158
5. Rozkazy mikroprocesorów 8086/8088
SUB AL, OAAH JNS DALEJ ADD BX, 1 JNS O K
JO (ang.jump if overflow )
skok względny gdy jest przepełnienie
Operacja: OF = 1 => IP«-IP + disp Wskaźniki: bez. zmian
Jeżeli wskaźnik OF=l, to sterowanie jest przekazywane pod żądany adres, który jednak nie może być odległy od offsetu następnego rozkazu o więcej niż -128 i +127. Jeżeli warunek nie jest spełniony, to skok nie jest realizowany i jest wykonywany kolejny rozkaz w programie.
01110000 disp
Liczba taktów -16 dla skoku wykonanego, 4 dla skoku nie wykonanego.
♦
SUB BH, BAJT JO JEST ADD BX, 1 JO KONIEC
JP/JPE (ang. jump if pańty/if parity even )
skok względny gdy parzystość, skok względny gdy parzystość parzysta _
Operacja: PF = 1 => IP«-IP + disp Wskaźniki: bez zmian
Jeżeli wskaźnik PF = 0, to sterowanie jest przekazywane pod żądany adres, który jednak nie może być odległy od offsetu następnego rozkazu o mniej niż -128 i więcej niż +127. Jeżeli warunek nie jest spełniony, to skok nie jest realizowany i jest wykonywany kolejny rozkaz w programie.
1010 disp
Liczba taktów -16 dla skoku wykonanego, 4 dla skoku nie wykonanego.
♦
AND AL, OAAH JP JEST ADD DL, OFH JPE PARZYSTY
5.6. Rozkazy organizujące pętle
JS (ang.jump if sign, jump if negative )
skok względny gdy jest znak, skok względny gdy znak ujemny
Operacja: SF = 0 =* IP«-IP + disp Wskaźniki: bez zmian
Jeżeli wskaźnik SF = 1, to sterowanie jest przekazywane pod żądany adres, który jednak nic może być odległy od offsetu następnego rozkazu o więcej niż -128 i +127. Jeżeli warunek nie jest spełniony, to skok nie jest realizowany i jest wykonywany kolejny rozkaz w programie.
01111
Liczba taktów -16 dla skoku wykonanego, 4 dla skoku nie wykonanego.
Przykład
SUB AL, OAAH JS UJEMNA ADD CL, ZMIENNA
JS ZNAK +
Rozkazy organizujące wyliczane pętle umożliwiają tworznie konstrukcji programowych, odpowiadających konstrukcjom typu: DO WHILE/REPEAT UNTIL w językach wysokiego poziomu. Rozkazy te, podobnie jak rozkazy skoków warunkowych, pozwalają zmieniać wskaźnik rozkazów w zakresie od -128 do nie więcej niż +127 (skoki krótkie SHORT). Licznikiem iteracji jest rejestr CX. Rozkazy te nie zmieniają stanu rejestru wskaźników i do nich należą
LOOP - powtórzenie sekwencji rozkazów jeśli rejestr CX^0,
LOOPE/LOOPZ - powtórzenie sekwencji rozkazów jeśli rejestr CX^0 lub jest równość (wartość równa zero),
LOOPNE/LOOPNZ - powtórzenie sekwencji rozkazów jeśli rejestr CX**0 lub jest nierówność (wartość różna od zera),
JCXZ - skok względny, gdy rejestr CX = 0.
LOOP (ang. loop or iterate instruction seÄ…uence until count complete)
powtórzenie sekwencji rozkazów jeśli rejestr CX 0 __
Operacja: CX—CX-1; next CF*0 => IP«-IP + disp Znaczniki: bez zmian
Rozkaz powoduje zmiejszenic rejestru CX pełniącego rolę licznika o jeden, sprawdzenie czy CXóO i jeżeli tak, to przekazanie sterowania pod adres wynikający 7 dodania argumentu rozkazu LOOP (disp) do offsetu następnego rozkazu po LOOP. Ody cx = 0, nie jest wykonywana żadna operacja.