Przesunięcie logiczne lub arytmetyczne (bajtu lub słowa) w lewo, SHL/SAL



Rozkazy SHL i SAL wykonują takie samo zadania, a mianowicie, przesuwają bity w lewo w lewym argumencie (operandzie) o liczbę bitów, określoną prawym argumentem. Gdy dokonujemy przesunięcia o 1 bit, wówczas liczba l jest prawym argumentem, gdy dokonujemy przesunięcia o liczbę bitów większą niż 1, prawym argumentem jest rejestr CL, który uprzednio załadowany jest liczbą, określającą o ile bitów należy przesunąć lewy argument. W czasie przesuwania, najbardziej znaczące bity argumentu są wprowadzane do rejestru znaczników w miejsce znacznika CF, natomiast w miejsce najmniej znaczącego bitu wpisywane jest 0; tracona jest poprzednia zawartość znacznika CF. Jeśli podczas przesuwania o 1 bit w lewo nie ulega zmianie zawartość bitu znaku, to wówczas znacznik OF jest zerowany, w przeciwnym razie znacznik ten przyjmuje wartość 1.
 

Rozkazy SHL i SHR używane są w programach jako rozkazy odpowiednio zastępujące: rozkaz mnożenia - MUL, i rozkaz dzielenia - DIV, jak też w sytuacjach związanych z tablicami, z uzyskiwaniem dostępu do danego elementu tablicy.

Przykłady:

...
SAL AL,1
...
SHL AL,1
...
SAL ZMIENNA,CL
...
MOV CL, 5
SHL ZMIENNA, CL
...
SHL DX,1
 
;przesunięcie arytmetyczne rejestru AL w lewo o 1 bit

;przesunięcie logiczne rejestru AL w lewo o 1 bit


;przesunięcie arytmetyczne komórki pamięci o nazwie ZMIENNA w lewo, o CL bitów


;przesunięcie logiczne komórki pamięci o nazwie ZMIENNA w lewo o CL


;przesunięcie logiczne rejestru DX w lewo o 1 bit, równoważne jest działaniu DX*2


cofnij