Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lec_asm_06_3495.doc
Скачиваний:
2
Добавлен:
01.04.2025
Размер:
178.18 Кб
Скачать

9.4.2. Команды циклического сдвига

Команды циклического сдвига, в отличие от команд сдвига, сохраняют сдвинутые за пределы операнда биты, помещая их обратно в операнд.

Как и при исполнении команд сдвига, сдвинутый за преде­лы операнда бит запоминается во флаге переноса CF.

Команды ROL (сдвинуть влево циклически) и ROR (сдвинуть вправо циклически). При исполнении команд вышедший за пределы операнда бит входит в него с противоположного конца.

Команды RCL (сдвинуть влево циклически вместе с флагом переноса) и RCR (сдвинуть вправо циклически вместе с флагом перено­са). При исполнении команд в противоположный конец операнда помещается значение флага переноса CF.

Все команды циклического сдвига воздействуют только на флаги CF и OF.

Пример.

Пусть снова АL = 10110100 и CF = 1.

Команды циклического сдвига воздействуют на регистр AL и флаг CF следующим образом:

После ROL АL, l: AL = 01101001 CF = 1

После ROR AL, 1: AL = 01011010 CF = 0

После RCL AL, 1: AL = 01101001 CF = 1

После RCR AL, 1: AL = 11011010 CF = 0

10. Команды работы с флагами

10.1. Команды управления флагами

У микропроцессора 8088 есть семь команд, которые позволяют изме­нять флаг переноса CF, флаг направления DF и флаг прерывания IF.

Команды STC (установить флаг переноса) и CLC (обнулить флаг переноса) переводят флаг CF в состояния 1 и 0 соответствен­но. Они полезны для установки нужного состояния флага CF перед исполнением команд циклического сдвига с флагом переноса RCL и RCR.

Команда CMC (обратить флаг переноса) переводит флаг CF в состояние 0, если он имел состояние 1, и наоборот.

Команды STD (установить флаг направления) и CLD (обнулить флаг направления) переводят флаг DF в состояния 1 и 0 соответственно. Мы их рассматривали при изучении команд обработки строк.

Команда CLI (обнулить флаг прерывания) обнуляет флаг IF. Это заставляет микропроцессор 8088 игнорировать маскируемые прерывания, инициируемые внешними устройствами системы.

Команда STI (установить флаг прерываний) переводит флаг IF в состояние 1. Это что разрешает микропроцессору 8088 реагировать на прерывания, инициируемые внешними устройствами.

10.2. Команды пересылки флагов

Команда LAHF (загрузить регистр АН флагами) копирует флаги, совместимые с флагами микропроцессоров 8080/8085, в регистр АН. А именно, она копирует флаги CF, PF, AF, ZF и SF в соответствующие биты регистра АН (0, 2, 4, 6 и 7).

Команда SAHF (загрузить флаги из регистра АН) выполняет обратную операцию: она загружает пять упомянутых битов регистра АН в регистр флагов.

Команда LAHF не изменяет состояния флагов. Команда SAHF, конечно же, изменяет состояние флагов микропроцессоров 8080/8085. Эти команды введены для совместимости с микропроцессорами 8080/8085.

Команды PUSHF и POPF пересылают содержимое регистра флагов в стек и обрат­но. Они идентичны командам PUSH и POP, но в них не требуется указывать операнд, так как под ним подразумевается регистр флагов. Как и в случае команд PUSH и POP, команды PUSHF и POPF всегда используют­ся парами.

С помощью команд PUSH, PUSHF, POP и POPF можно сохранить содержимое любого регистра (или даже всех регистров) на время исполнения процедуры или программы обработки прерывания.

Пример.

Пусть содержащие­ся в регистрах AX и DI данные имеют существенное значение. Далее, пусть требуется обратиться к процедуре SORT, которая может изменить их содержимое. Предполо­жим также, что только что была выполнена арифметическая операция и важно оставить флаги неприкосновенными.

Эту задачу выполнит следующая последова­тельность команд:

PUSH АX ; Сохранить регистры

PUSH DI

PUSHF ; и флаги

CALL SORT ; Вызвать процедуру

POPF ; По возвращению восстановить флаги

POP DI ; и регистры

POP AX

Можно также включить требуемые команды PUSH, PUSHF и POP, POPF в тело процедуры с тем, чтобы не повторять их при каждом обращении к ней. Следовате­льно, три команды PUSH должны стать первыми командами процедуры SORT, а три команды POP – ее последними командами. После этого можно указывать команду

CALL SORT

и не заботиться о том, какие регист­ры уничтожаются, а какие сохраняются.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]