Nastavení registru příznaků
Registr příznaků se
částečně nastavuje současně s vykonáváním některých
instrukcí. Obsahuje ale i registry, které se automaticky
nenastavují (IF, DF, TF). Proto ASM86 má instrukce, kterými
můžeme přímo ovlivnit hodnoty některých bitů registru F.
- CLC - do
registru CF vlož hodnotu log. 0
- CMC - neguj
obsah registru CF
- STC - do
registru CF vlož hodnotu log. 1
- CLD - do
registru DF vlož hodnotu log. 0 (DI, SI při práci s
řetězci zvyšuj)
- STD - do
registru DF vlož hodnotu log. 1 (DI, SI při práci s
řetězci snižuj)
- CLI - do
registru IF vlož hodnotu log. 0 (zakaž přerušení)
- STI - do
registru IF vlož hodnotu log. 1 (povol přerušení)
Jestliže chceme nastavit hodnotu
v příznaku, pro který instrukce neexistuje, použijeme
algoritmus:
- registr F předáme přes
zásobník do některého z registrů pro všeobecné
použití
- v tomto registru logickou
operací nastavíme bit příznaku
- přes zásobník opět
předáme obsah registru do registru F
Příklad:
var promenna:byte;
begin
asm
MOV promenna,0 {nastav proměnnou do hodnoty 0}
PUSHF {ulož registr příznaků do zásobníku}
POP AX {přesuň obsah vrcholku zásobníku do registru AX}
OR AX,1 {nastav poslední bit (CF) do logické 1}
PUSH AX {ulož obsah AX do zásobníku}
POPF {přesuň nazpátek do registru příznaků}
JNC @konec {otestuj nastavení CF}
MOV promenna,1 {CF byl v 1, nastav hodnotu proměnné do 1}
@konec:
end;
writeln (promenna); {vypiš obsah proměnné}
end.
Jednotlivé bity části registru
příznaků můžeme také ovlivnit vhodným použitím
instrukcí LAHF a SAHF.
|