130
5. Rozkazy mikroprocesorów 8086/8088
Przykłady
SAR ZMIENNA, 1 SAR BAJT[BP +1], 1 SAR ZMIENNA[SI BX], 1
Przesunięcie arytmetyczne w prawo o więcej niż 1 bit
Operacja: {w = 0 => n: =7 else n: = 15}; fl
next CL^O =» (argument < n-1:0 > oCF ^-argument < n:0>; ncxt CL«-CE-1;
next IP«-IP-d) {d - długość rozkazu w bajtach (2/4)} "
Argumentem jest rejestr
1101 OOlw 11111 reg
Liczba taktów -8 + 4 takty na każdy bit.
Przykłady
MOV CL,10 SAR SI, CL SAR AX, CL MOV CL, 5 SAR DL, CL
SAL AH, CL +
Argument jest w pamięci
1101 OOlw mod 111 r/m addrlow addrhigh
Liczba taktów - 20 + takty na obliczenie adresu efektywnego + 4 takty na każdy bit.
Przykłady
MOV CL, 3
SAR ZMIENNA, CL
SAR WORD PTR [SI + BX + 4], CL
MOV CL, 4
SHL ZMIENNAfDI], CL ♦
ROL (ang. rota te left byte or word )
przesunięcie cykliczne w lewo bajtu lub słowa __
Operacja: zobacz niżej Znaczniki: OF DF IF TF SF ZF AF PF CF x.......x
#
Rozkaz realizuje cykliczne przesunięcie lewego argumentu w lewo, o liczbę bitów określoną prawym argumentem (rys. 5.2). Jeżeli przesunięcie jest o 1 bit, to
5.3. Rozkazy operacji arytmetycznych i logicznych
jedynka jesl wprost prawym argumentem. Przy przesunięciu o większl prawym argumentem jest rejestr CL, który wcześniej należy załadować liczbą określającą o ile bitów należy przesunąć lewy argument. W czasie przesuwania najbardziej znaczący bit argumentu jest wprowadzany do znacznika CF, następnie pozostałe bity argumentu są przesuwane o 1 bit w lewo i na końcu stan znacznika CF jest przepisywany na miejsce najmniej znaczącego bitu argumentu. Tak więc bity argumentu krążą w kółko. Jeżeli przy przesuwaniu o 1 bit w lewo nie zmieni się zawartość bitu znaku, to znacznik OF jest zerowany. W przeciwnym wypadku znacznik OF przyjmuje wartość 1. Możliwe opcje
Przesunięcie cykliczne w lewo o 1 bit
Operacja: {w = 0 =* n: = 7 else n: = 15}; next CF«-argument < n >; next argument < n:0 > ^-argument < n-l:0 > oargument < n >; next (argument < n > * CF => OF<-l else OF«-0)
Argumentem jest rejestr 1101 OOOw 11000 reg Liczba taktów - 2.
ROL AL, 1 ROL DX, 1 ROL Dl, 1
ROL BH, 1 ♦
Argument jest w pamięci 1101 OOOw mod 000 r/m addr Jow addrhigh Liczba taktów -15 + takty do obliczenia adresu efektywnego.
ROL ZM1ENNA[BP], 1
ROL BAJT, 1
ROL ZM1ENNA[S1], 1
ROL BYTE PTR [DI], 1 ♦
Przesunięcie cykliczne w lewo o więcej niż 1 bit
Operacja: {w = 0 => n: =7 else n: = 15 }; next CL * 0 => (CF ♦-argument < n >; ncxt
argument < n:0 > ^-argument < n-l:0 > oargument < n >;
next CL«-CL-1; next IP«-IP-d) {d - długość rozkazu w bajtach (2/4)}
Argumentem jest rejestr 1101 OOlw 11000 reg Liczba taktów - 8 4* 4 takty na każdy bit.