Иллюстрированный самоучитель по Assembler

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.).

Иллюстрированный самоучитель по Assembler › Приложение. Система команд процессоров Intel. › S
Рис. П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
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.