116
5. Rozkazy mikroprocesorów 8086088
IDIV (ang. integer divide byte or word )
dzielenie argumentów całkowitych ze znakiem _
Operacja: {w = 0 => (dzielna: = AX; dzielnik: = arg bajt; max: = 7FH) ł
elsc (dzielna: = DXoAX; dzielnik: = arg_slowo; max: =7FFFH)}; 1
next ((dziel na/dzielnik > = 0 A dzielna/dziclnik > max) V (dzielna/dzielnik < 0 A dzielna/dzielnik < 0-max-l)) => INTO
elsc (w = 0=> AX/dzielnik; AH«-AX mod dzielnik 1
clse AX<—DXoAX/dziclnik; DX«-DXoAX mod dzielnik)
Znaczniki: OF DFIF TF SF ZF AF PF CF 1
9. . . 99999
• • • • • •
Rozkaz realizuje dzielenie argumentów całkowitych ze znakiem. Możliwe argumenty rozkazu określono w tabl. 5.0. Jeżeli wynik dzielenia zniszczy bil znaku (nastąpi przepełnienie), to jest generowane przerwanie INT 0. Dla znaków obowiązują przy tym reguły podane w tabl. 5.10.
Tablica 5.10. Znaki argumentów i wyniku dla rozkazu IDIV Dzielna Dzielnik Iloraz Reszta
+ + + +
+ - - +
+
+
Możliwe opcje
Dzielenie zawartości akumulatora przez rejestr (ze znakiem) 1111 Oliw 11111 reg
Liczba taktów dla w = 0 - 101...112, dla w = 1 - 165... 184.
MOVAX, ZMIENNA SŁOWO
♦
; iloraz w AL, reszta w AH
; dzielenie bajtu przez bajt ; konwersja bajt-słowo ; iloraz w AL, reszta w AH
Dzielenie zawartości akumulatora przez argument w pamięci (ze znakiem)
1111 Oliw mod 111 r/m addr low addr high
Liczba taktów dla w = 0 - 107... 118 4* takty do obliczenia adresu efektywnego, dla w = 1 - 171... 190 + takty na obliczenie adresu efektywnego.
MOV DX, STARSZA CZESC
5.3. Rozkazy operacji arytmetycznych i logicznych
MOV AX, M LODSZA CZESC
DI V BX ; iloraz w AX, reszla w DX 4
ĄĄD (ang. ASCII adjust for division )
poprawka przed dzieleniem w rozpakowanym kodzie BCD _
Operacja: AL <— AL + AH * 10; AH <— 0 Znaczniki: OF DFIF TF SF ZF AF PF CF ? - - - x x ? x ?
Rozkaz umożliwia wprowadzenie poprawki przed dwójkowym dzieleniem dwóch argumentów w rozpakowanym kodzie BCD. Iloraz uzyskany w wyniku dzielenia jest wyrażony także w rozpakowanym kodzie BC D. Wprowadzenie poprawki polega na dodaniu do rejestru AL zawartości rejestru AH, pomnożonej przez 10, a następnie
wyzerowanie rejestru AH. | uoi 0101 00001010 Liczba taktów - 60. | |||
Przykład | |||
MOV AH, 3 ; |
AH |
AL | |
M()V AL, 1 ; |
3 0000 0011 |
1 |
0000 0001 |
AAD ; MOV BL, 8 |
0000 0000 |
31 |
(XXII 1111 |
DIV BL ; |
7 0000 0111 |
3 |
0000 0011 |
• 1 |
(reszta) |
(iloraz) |
CBW (ang. convert byle to word ) zamiana bajtu na słowo
Operacja: AL< 7> = 1 => (AH «- OFFH else AH «-0)
Znaczniki: bez zmian
Rozkaz zamienia liczbę 8-bitową ze znakiem zawarlą w rejestrze AL na liczbę 16-bitową ze znakiem w AX. Konwersja sprowadza się do załadowania odpowiednio wartości OH lub OFFH do rejestru AH, w zależności od tego, czy liczba w rejestrze AL była dodatnia czy ujemna.
Liczba taktów - 2.
AH AL
MOV AL, 59H CBW
???? ???? 0101 1001
0000 0000 0101 1001