EAX (32 bity)
31 |
15 |
WWWMKBiBISIBBk-i 7 0 |
Starsze bity |
-- |
Młodsze bity |
Carry Flag
(znacznik przeniesienia)
Rysunek 2.5. Rysunek prezentujący, jak obracają się bity dla instrukcji RCL
Składnia:
ROR operandl, operand2 RCR operandl, operand2
Pierwsza instrukcja przesuwa logicznie w prawo pierwszy operand o liczbę bitów podaną w operandzie drugim. Nie używa flagi CF, więc najstarszy bit przyjmuje wartość najmłodszego bitu. Druga instrukcja przeprowadza tę samą czynność, ale przy użyciu flagi CF. Najstarszy bit przyjmuje wartość, która była w CF, a znacznik CF przyjmuje wartość najmłodszego bitu. Sposób obracania się bitów w 32-bitowym rejestrze dla instrukcji ROR został zaprezentowany na rysunku 2.6, a dla instrukcji RCR — na rysunku 2.7.
EAX(32 bity) | ||
31 Starsze bity |
15 |
7 0 Młodsze bity |
mc- |
Carry Flag
(znacznik przeniesienia)
Rysunek 2.6. Rysunek prezentujący, jak obracają się bity dla instrukcji ROR
Składnia:
SHLD operandl, operand2, operand3 SHRD operandl, operand2, operand3
Carry Flag
(znacznik przeniesienia)
Rysunek 2.7. Rysunek prezentujący, jak obracają się bity dla instrukcji RCR
l’ierwsza instrukcja (SHLD) przesuwa w lewo bity w operandzie pierwszym o liczbę bitów podaną w operandzie trzecim. Najstarsze bity pierwszego operandu zostają wyrzucone (flaga CF przyjmuje wartość ostatniego wyrzuconego bitu), a najmłodsze bity przyjmują wartości najstarszych bitów z drugiego operandu. Uwaga! Bity drugiego operandu pozostają niezmienione. SHRD przesuwa natomiast bity pierwszego operandu o liczbę bitów podaną w operandzie trzecim. Najmłodsze bity pierwszego operandu zostają wyrzucone, a najstarsze bity przyjmują wartość najmłodszych bitów z operandu drugiego. Bity drugiego operandu pozostają niezmienione. Sposób przesuwania się bitów dla instrukcji SHLD został zaprezentowany na rysunku 2.8, a dla instrukcji SHRD — na rysunku 2.9.
1’rzykład dla instrukcji SHLD:
mov ecx, 0 ; zerujemy ECX
mov eax, OFFFFFFFFh ; do EAX wartość OFFFFFFFFh shld ecx, eax, 2 ; EAXbędzie równy OFFFFFFFCh, gdyż ; dwa jego najmłodsze bity zostały zastąpione ; przez dwa najstarsze bity rejestru ECX,
; które miały wartość zero.
1’rzykład dla instrukcji SHRD:
mov ecx, 0 ; zerujemy ECX
mov eax, OFFFFFFFFh ; do EAX wartość OFFFFFFFFh shrd ecx, eax, 2 ; EAXbędzie równy 3FFFFFFFh, gdyż ; dwa jego najstarsze bity zostały ; zastąpione dwoma najmłodszymi bitami ; z rejestru ECX, które miały wartość zero.