Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Микропроцессорные системы (книга Комаров) / Программирование на Ассемблере (ч 2).doc
Скачиваний:
155
Добавлен:
08.03.2015
Размер:
380.93 Кб
Скачать

Команды обращения к стеку

Команды обращения к стеку PUSH и POP имеют формат:

PUSH источник

POP приемник

и обеспечивают пересылку слов между стеком системы и регистрами МП или ячейками памяти.

Команда PUSH дважды декрементирует указатель стека SP и помещает содержимое указанного 16-битного регистра или ячейки памяти по этому адресу, то есть на верхушку стека. В результате стек расширяется в сторону меньших адресов. Регистр SP всегда указывает на последнее слово, включенное в стек.

Команда POP извлекает слово с верхушки стека и помещает его в указанный 16-битный регистр или ячейку памяти. После этого содержимое указателя стека SP дважды инкрементируется, и он вновь указывает на верхушку стека. В команде POP в качестве приемника данных нельзя указывать сегментный регистр CS, так как его изменение будет эквивалентно переходу, что не должно реализовываться командами пересылки данных.

Будучи взаимно обратными, команды PUSH и POP обычно используются парами, то есть каждой команде PUSH в программе должна соответствовать своя команда POP. При этом последовательность команд POP по используемым операндам должна быть обратна последовательности команд PUSH.

Пример 3.51:

PUSH SI ; Сохранение регистров в стеке

PUSH DS

. . . . . . .

POP DS ; Восстановление регистров из стека

POP SI

PUSH Counter ; Сохранение слов памяти в стеке

PUSH Table[BX][DI]

. . . . . . .

POP Alpha ; Запись в память слов из стека

POP [BX+SI]

Чаще всего стек используется для временного хранения данных. Однако, он может использоваться и в качестве буфера при некоторых пересылках.

Пример 3.52:

PUSH ES ; Копирование ES в DS через

POP DS ; стек

MOV AX, ES ; Альтернативное копирование

MOV DS, AX ; ES в DS через регистр

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

К этой подгруппе относятся команды PUSHF, POPF и LAHF, SAHF.

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

После пересылки в стек может быть изменено состояние флага трассировки TF(бит D8), что является единственным способом его формирования, так как команды прямого управления этим флагом отсутствуют. После загрузки установленного в единичное значение флага TF в регистр флагов, МП перейдет в режим трассировки.

Пример 3.53:

PUSHF ; Переключение МП

MOV BP,SP ; в режим трассировки

OR WORD PTR[BP], 0100h

POPF

Команды LAHF и SAHF пересылают младший байт регистра флагов F соответственно в регистр AH и обратно. Эти команды введены для обеспечения программной совместимости МП ВМ86/ВМ88 с МП ВМ80/ВМ85.

Пример 3.54:

LAHF ; Эквивалент команды PUSH PSW

PUSH AX ; МП ВМ80/ВМ85

. . . . . .

POP AX ; Эквивалент команды POP PSW

SAHF ; МП ВМ80/ВМ85

Команды ввода/вывода

К этой подгруппе относятся команды IN и OUT.

Команда ввода IN осуществляет ввод байта или слова из порта ввода в аккумулятор МП. В ней может использоваться прямая или косвенная адресация порта ввода. В соответствии с этим она записывается в двух форматах: