Przesuwa w lewo bity pierwszego operandu o podaną liczbę bitów w operandzie drugim. Starszy przesunięty bit zostaje zachowany w fladze CF (ang. Carry Flag), a młodsze bity są wypełniane zerami. Sposób przesuwania się bitów dla instrukcji SAL/SHL w 32-bitowym rejestrze prezentuje rysunek 2.1.
Dla przykładu przesuniemy wartość w EAX o 1 bit w lewo:
mov eax, 1 ; do EAXdajemy wartość 1
shl eax, 1 ; EAXbędzie równy 2 (10 binarnie),
; gdyż jedynka się przemieściła,
; a na jej miejscu mamy zero,
; co daje wartość lOb (2h).
Najmłodszy bit | ||
EAX (32 bity) |
jest zerowany | |
Carry Flag 31 |
15 |
7 0 |
(znacznik Starsze bity |
Młodsze bity | |
przeniesienia) |
Rysunek 2.1. Rysunek prezentujący, jak przesuwają się bity dla instrukcji SAL/SHL
Składnia:
SAR operandl, operand2 SHR operandl, operand2
Instrukq'a SAR przesuwa w prawo bity pierwszego operandu o podaną liczbę bitów w operandzie drugim. Najmłodszy przesunięty bit zostaje zachowany w fladze CF, a najstarszy bit zostaje zachowany. Instrukcja SHR działa podobnie, różni się tylko tym, że zeruje najstarszy bit (nazywany również bitem znaku). Sposób przesuwania się bitów dla instrukcji SAR został zaprezentowany na rysunku 2.2, a dla instrukcji SHR — na rysunku 2.3.
Dla przykładu przesuniemy wartość w EAX o 1 bit w prawo:
mov eax, 1 ; do EAX idzie wartość 1 shr eax, 1 ; EAX będzie równy 0,
; flaga CF zostanie ustawiona.
EAX (32 brty)
31
Starsze bity
7 O
Młodsze bity
Carry Flag (znacznik przeniesienia)
Rysunek 2.2. Rysunek prezentujący, jak przesuwają się bity dla instrukcji SAR
Najstarszy b-t jest zerowany
U fflBSHMiffliM
31
Starsze bity
EAX (32 bity)
15 7 0
Młodsze bity
-'■
Carry Flag (znacznik przeniesienia)
Rysunek 2.3. Rysunek prezentujący, jak przesuwają się bity dla instrukcji SHR
Składnia:
HOL operandl, operandż HCL operandl, operand2
1’it'rwsza instrukcja przesuwa logicznie w lewo pierwszy operand o liczbę bitów podaną w operandzie drugim. Nie używa flagi CF, więc najmłodszy bit przyjmuje wartość najstarszego bitu. Druga instrukcja przeprowadza tę samą czynność, ale przy użyciu flagi CF. Najmłodszy bit przyjmuje wartość, która była w CF, a znacznik CF przyjmuje wartość najstarszego bitu. Sposób obracania się bitów dla instrukcji ROL w 32-hllowym rejestrze został przedstawiony na rysunku 2.4, a dla instrukcji HCL — na rysunku 2.5.
EAX (32 bity)
31 |
15 |
7 0 |
Starsze bity |
Młodsze bity |
■4®
Carry Flag
(znacznik przeniesienia)
Rysunek 2.4. Rysunek prezentujący, jak obracają się bity dla instrukcji ROL