Učebnice Assembleru 86

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.

Směr