112 5. Rozkazy mikroprocesorów 808618088
0010 |
‘ 1111 | | ||
Liczba taktów - 4. | |||
Przykłady | |||
AL | |||
MOV AL, 12 |
12 |
0001 0010 | |
SUB AL, 5 |
-5 |
0000 0101 | |
(XXX) 1101 A < 3:0 > >9 | |||
DAS |
-6 |
00000110 | |
= 7 |
0000 0111 AL<9FH A CF = 0 | ||
MOV AL, 51H |
51H |
01010001 | |
SUB AL, 8 |
-8 |
0000 1000 | |
= |
0100 1001 AF = 1 | ||
DAS |
-6 |
00000110 | |
— |
0100 0011 AL <9FH A CF = 0 | ||
MOV AL, 6 |
6 |
0000 0110 | |
SUB AL, 8 |
-8 |
(XXX) 1000 | |
= |
1111 1110A<3:0> >9 | ||
DAS |
-6 |
(XXX) 0110 | |
— |
1111 1000 AL>9FH | ||
-60H |
0110 0000 | ||
= 98H |
1001 1000 | ||
bo 106-8 |
= 98! | ||
5J3. |
Mnożenie |
MUL (ang. multiply byle or word unsigned) 1
mnożenie bajtów lub słów bez znaku
Operacja: w = 0 => (AX<-AL‘prawy_argument else DXoAX<-AX*prawy_argume-nt); next (w = 0 a AH = 0 v w = 1 a DX = 0) => (CF = 0; OF = 0) elsc (CF = 1; OF = 1)
Znaczniki: OF DF IF TF SF ZF AF PF CF 1
x ---???? x Ł\
Rozkaz realizuje mnożenie dwóch argumentów (z których lewy jest akumulatorem) bez znaku, będących bajtami lub słowami. Prawy argument może być rejestrem lub argumentem w pamięci operacyjnej. Jeżeli jednym z czynników jest rejestr AL, to drugi argument musi być bajtem, wynik zaś zostaje umieszczony w AX. Z kolei jeśli jednym z czynników jest AX, to drugi musi być słowem, a wynik mnożenia jest umieszczony w podwójnym rejestrze DXoAX. Jeżeli starsza część wyniku jest równa zero, to znaczniki CF i OF zostają wyzerowane. W przeciwnym wypadku przyjmują wartość równą 1.
Mnożenie akumulatora przez rejestr (bez znaku)
1111 Oliw 11100 reg |
Liczba taktów dla w = O - 70...77, dla w = 1 - 118... 133.
Przykłady
M()V AL, ZMIENNA BAJT MUL CL ;wynikwAX
MOV AX, ZMIENNASLOWO MUL BX ; wynik w DXoAX
• • •
MOV AL, ZMIENNABAJT MOV AH, 0
MUL SI ; wynik w DXoAX Ą
Mnożenie akumulatora przez argument w pamięci (bez znaku)
1111 Oliw modlOOr/m addrjow addr high
Liczba taktów dla w = 0 - 7Ó...83 + takty do obliczenia adresu efektywnego,dla w = 1 -124... 139 + takty do obliczenia adresu efektywnego.
Przykład
MOV AX, ZMIENNA SLOWO l
MUL ZMIENNA SŁOWO 2[DI] ; wynik w DXoAX +
IMUL (ang. integer mullipty byte or word) mnożenie całkowite bajtów lub słów ze znakiem
Operacja: w = 0 => (AX<-AL*prawy_argument_bajt else DXoAX«-AX*prawy argu-mcntslowo); nexl (częśćstarszawyniku = przenicsienie znakowc części młodszej) =* (CF = 0; OF = 0) else (CF = 1; OF = 1) ^
Znaczniki: OF DFIF TF SF ZF AF PF CF
x ---???? x
Rozkaz realizuje mnożenie dwóch argumentów całkowitych ze znakiem (lewy argument jest akumulatorem), będących bajtami lub słowami. Prawy argument może być rejestrem lub argumentem w pamięci operacyjnej. Jeżeli jednym z czynników jest rejestr AL, to drugi argument musi być bajtem, wynik zaś zostaje umieszczony w AX. Jeśli jednym z czynników jest AX, to drugi musi być słowem, a wynik mnożenia jest ^mieszczony w podwójnym rejestrze DXoAX. Jeżeli bardziej znacząca część wyniku jest równa przeniesieniu znakowemu części mniej znaczącej, to znaczniki CF i OF zo-s*ają wyzerowane. W przeciwnym wypadku przyjmują wartość 1. Stan znaczników ŁF = 1 i OF=l świadczy o tym, że AH lub DX zawiera znaczącą cyfrę wyniku. Możliwe opcje