S
SAHF Запись содержимого регистра АН в регистр флагов
Команда sahf копирует разряды 7, 6, 4, 2 и 0 регистра АН в регистр флагов процессора, устанавливая тем самым значения флагов SF, ZF, AF, PF и CF соответственно. Команда не имеет операндов.
Команда sahf (совместно с командой lahf) дает возможность читать и изменять значения флагов процессора, в том числе флагов SF, ZF, AF и PF, которые нельзя изменить непосредственно. Однако следует иметь в виду, что команда sahf заполняет только младший байт регистра флагов. Поэтому нельзя изменить с ее помощью, например, состояние флага OF.
Пример 1:
lahf; Регистр АН отображает ;состояние регистра флагов or АН,80h; Установка бита 7 = SF sahf; Загрузка АН в регистр ;флагов, где теперь будет SF = 1
Пример 2:
lahf; Регистр АН отображает ;состояние регистра флагов and АН,0BFh; Сброс бита 6 = ZF sahf; Загрузка АН в регистр ;флагов, где теперь будет ZF = 0
Пример 3:
mov АН, 5 sahf; Устанавливаются флаги PF и ;CF и сбрасывается флаги SF, ;ZF и AF
SAL Арифметический сдвиг влево
Команда 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