DF (Direction Flag) - ovlivňuje chování instrukcí blokového kódu
IOPL (I/O Privilage Level) - úroveň oprávnění
IF (Interrupt enable Flag) - možnost zablokovat některá přerušení
Porovnávání čísel
porovnání čísel - CMP r/m, CMP r/m/i
JE - skok při rovnosti
JNE - skok při nerovnosti
Podmíněné skoky
Podmíněné skoky pro porovnání neznaménkových hodnot
| instrukce | alt. jméno | příznaky | podmínka |
|-----------|------------|--------------------|------------|
| JA | JNBE | (CF or ZF) = 0 | A > B |
| JAE | JNB | CF = 0 | A ≥ B |
| JB | JNAE | CF = 1 | A < B |
| JBE | JNA | (CF or ZF) = 1 | A ≤ B |
Podmíněné skoky pro porovnání znaménkových hodnot
| instrukce | alt. jméno | příznaky | podmínka |
|-----------|------------|------------------------|----------|
| JG | JNLE | (SF = OF) & ZF = 0 | A > B |
| JGE | JNL | (SF = OF) | A ≥ B |
| JL | JNGE | (SF ≠ OF) | A < B |
| JLE | JNG | (SF ≠ OF) nebo ZF = 1 | A ≤ B |
Smyčky
speciální operace pro snadnější implementaci cyklů
LOOP - odečte 1 or RCX/ECX a pokud v něm není nula → provede skok
Odhad skoků
podmíněné skoky zpomalují běh programu → procesory provádí různé heuristiky pro odhad, zda bude skok proveden
Např. čtyř-stavové počítadlo se saturací (11, 10, 01, 00 - až na 00 počítá, že se skok provede)
Zásobník
procesor má vyčlenění úsek paměti pro zásobník
ten uchovává pomocné výpočty, návratové adresy, lokální proměnné, …
vyšší programovací jazyky obvykle neumožňují manipulaci s tímto zásobníkem
operace: PUSH r/m/i, POP r/m
Volání funkcí s konvencí cdecl
Volání funkce:
na zásobník jsou uloženy parametry funkce
zavolá se funkce (call <adresa>), na zásobník se uloží adresa návratu
funkce uloží obsah registru EBP na zásobník (adresa předchozího rámce)
funkce uloží do registru EBP obsah ESP (začátek nového rámce)
vytvoří se na zásobníku místo pro lokální proměnné
na zásobník se uloží registry, které se budou měnit
Návrat z funkce:
obnovíme hodnoty registrů
odstraníme lokální proměnné
obnovíme hodnotu EBP
provedeme návrat z funkce ret
odstraníme argumenty ze zásobníku
Proces překladu
Je to proces, kterým se zdrojový kód napsaný v programovacím jazyce (např. C, Java) převádí na strojový kód, který může být proveden procesorem.