144
5. Rozkazy mikroprocesorów 8086/8088
MOV AL, 20H ; spacja
MOV DI, OFFSET TABLICA MOV CX, LENGHT TABLICA CLD ; DF«-0 (kierunek)
REPE SCASB ; kiedy koniec spacji
JNE NIERÓWNE ; w TABLICY ?
REPNE/REPNZ (ang. repeat string operation if not eqnal/not zero ) powtarzanie operacji łańcuchowej tak długo, jak jest nierówność lub nie ma zera
Operacja: CX^0 => ({wykonaj SCAS lub CMPS}; next CX«-CX-1; ncxt ZF=1=>IP«-IP-1)
Znaczniki: bez zmian
REPNE/REPNZ są to równoważne przedrostki dla operacji łańcuchowych SCAS i CMPS. Rozkazy te są wykonywane wielokrotnie tak długo, jak długo licznik CX?±0 (zob. komentarz do REP) oraz dodatkowa znacznik ZF = 0, czyli jest nierówność lub wartość nie jest równa zero. Znacznik ZF nie musi być inicjowany bowiem jego testowanie odbywa się dopiero po wykonaniu pojedynczej operacji.
REPNE SCAS, REPNZ SCAS - porównywanie zawartości akumulatora (AX lub AL) z elementami łańcucha dopóki wartości nie są równe; *
REPNE CMPS, REPNZ CMPS - porównywanie dwóch łańcuchów dopóki kolejne odpowiadające sobie ich elementy nie są równe.
Liczba taktów - 2.
MOV SI OFFSET TABLICA 1 MOV DI, OFFSET TABLICA 2 MOV CX, LENGHT TABL1CA1 CLD
REPNE CMPSW JE RÓWNE
; spacja
; DF*-0 (kierunek)
; znaleziono jednakowe -
; słowa w obu tablicach ♦
Rozkazy skoków powodują zmianę zawartości wskaźnika rozkazów IP, co pozwala przekazywać sterowanie w różne miejsca w ramach danego segmentu programu. Mówimy wtedy o tzw. skokach bliskich (ang. near ). W przypadku tzw. skoków dalekich ('dng far ) wykonywanych między różnymi segmentami, jest dodatkowo zmieniana zawartość rejestru segmentowego CS. Wyróżniamy dwie grupy roz.ka/ów
powered by
5.5. Rozkazy sterowania skokami
Rozkazy skoków bezwarunkowych
JMP - zwykły skok bezwarunkowy,
CALL - wywołanie podprogramu,
RET - powrót z podprogramu do miejsca wywołania.
Rozkazy skoków warunkowych ' ‘ “
- rozkazy testujÄ…ce stan jednego znacznika
JC - skok jeśli jest przeniesienie (CF = 1),
VJNC - skok gdy nie ma przeniesienia (CF = 0),
JO - skok jeśli jest przepełnienie (OF = 1),
JNO - skok gdy nie ma przepełnienia(OF = 0), uJS - skok jeśli znak liczby jest ujemny (SF= 1),
\JNS - skok jeśli znak liczby jest dodatni (SF = 0),
JP/JPE - skok gdy jest parzystość (parzystość) parzysta (PF= 1),
' JNP/JPO - skok gdy nieparzystość (parzystość) nieparzysta (PF = 0), t JZ - skok jeśli liczba równa zero (ZF = 1), j JNZ - skok gdy liczba różna od zera (ZF = 0),
- rozkazy związane z porównaniem dwóch argumentów
JE - skok gdy są równe (ZF = 1),
JNE - skok gdy nie są równe, są różne (ZF = 0),
^ JG - skok gdy jest większy ((SF©OF) V ZF = 0),
’ JNG - skok gdy nie jest większy ((SF0OF) V ZF = 1), s JGE - skok gdy jest większy lub równy (SF©OF = 0),
JNGE - skok gdy nie jest większy lub równy (SF©OF = 1),
JL - skok gdy jest mniejszy (SF0OF = 1),
JNL - skok gdy nie jest mniejszy (SF0OF = 0),
JLE - skok gdy jest mniejszy lub równy (SF0OF) V ZF = O),
JNLE - skok gdy nie jest mniejszy lub równy (SF0OF) V ZF = 1),
JA - skok gdy jest powyżej (CF V ZF = 0),
JNA - skok gdy nie jest powyżej (CF V ZF = 0),
JAE - skok gdy jest powyżej lub równo (CF = 0),
JNAE - skok gdy nie jest powyżej lub równo (CF = 1),
JB - skok gdy jest poniżej (CF = 1),
JNB - skok gdy nie jest poniżej (CF = 0),
JBE - skok gdy jest poniżej lub równo (CF V ZF) = 1),
JNBE - skok gdy nie jest poniżej lub równo (CF V ZF = 0),
Przykład
Jeżeli w programie wystąpi sekwencja rozkazów
CMP AX, BX ; porównaj zawartość dwóch rejestrów
Jxxx ETYKIETA ; Jxxx - jeden z rozkazów skoków ♦
to skok będzie wykonany w przypadkach uwzględnionych w tabl. 5.11.