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ů (branch prediction)
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)
Počítadlo se nazývá branch prediction buffer
Zásobník
vyčleněný úsek paměti pro procesor
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
registr ESP je vrcholem zásobníku
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
Po návratu z funkce mohou registry EAX, ECX, EDX obsahovat cokoliv
callee-saved registry … volaný se stará o uchování hodnot (pro lokální proměnné)
caller-saved registry … volající se stará o uchování hodnot (pro dlouhodobější proměnné)
Přerušení
způsob reakce na vnější asynchroní (neočekávané) události
obvykle nějaký vstup (uživatel ťuknul do klávesnice, příchod paketu) potřebující CPU
obsluha přerušení (podobná běžným funkcím)
vždy po dokončení celé instrukce (instrukce = atomická operace)
vyvolání přerušení → uložení stavu programu → obsluha přerušení → pokračování, tam kde CPU skončil
souběh více přerušení ⇒ nutný řadič přerušení
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.