Команда sal осуществляет сдвиг влево всех битов операнда. Старший бит операнда поступает в флаг CF. Если команда записана в формате
sal операнд, 1
сдвиг осуществляется на 1 бит. В младший бит операнда загружается 0. Если команда записана в формате
sal операнд,CL
сдвиг осуществляется на число битов, указанное в регистре-счетчике CL, при этом в процессе последовательных сдвигов старшие биты операнда, пройдя через флаг CF, теряются, а младшие заполняются нулями (рис. П8.).
Рис. П8. Действие команды sal.
В качестве операнда команды sal
можно указывать любой регистр (кроме сегментного) или ячейку памяти размером
как в байт, так и в слово. Не допускается использовать в качестве операнда непосредственное
значение.
Каждый сдвиг влево эквивалентен умножению знакового числа на 2, поэтому команду
sal удобно использовать для возведения операнда в степень 2.
Команда воздействует на флаги OF, SF, ZF, PF и CF.
Пример 1
mov AL,7
sal AL,1 ;AL= 0Eh=7*2, CF=0
Пример 2
mov AX,IFh
mov CL,8
sal AX,CL ;AX=lF00h=lFFh*256, CF=0
Пример 3
mov SI,-1 ;SI=FFFFh
mov CL,4
sal SI,CL ;SI=FFF0h=-l*16=-16, CF=1
Допустим сдвиг 32-битовых операндов. Допустимо указание числа бит сдвига как с помощью регистра CL, так и непосредственным значением. Максимальная величина сдвига составляет 31 бит.
Пример
mov EBX,0000C835h
sal EBX,5 ;EBX=001906A0h