PUSH - передает слово из источника в стек, а команда POP
осуществляет противоположное действие: передает слово из стека в
приемник. Регистр SP содержит смещение последнего включенного в
стек слова (вершину стека).
! Стек растет по направлению уменьшения адресов !
PUSH начинается с уменьшения содержимого SP на 2, а команда POP
завершается увеличением содержимого SP на 2.
Операндами команд PUSH и POP могут быть сегментный регистр,
несегментный (шестнадцатиразрядный) регистр или слово в памяти.
Кроме того, в команде PUSH можно указывать непосредственный
операнд, что не допускается в команде PUSH для процессора 8086.
POP- не может содержать непосредственный операнд. Форматы команд
приведены в таблице 2.4.
Таблица 2.4. Форматы команд PUSH и POP.
Операнд
Включение
Извлечение
Регистр
PUSH AX
POP BX
Память
PUSH PW
POP PW
Сегментный регистр
PUSH DS
POP ES
Непосредственный операнд
PUSH 856
Все 16-битные регистры
PUSHA
POPA
Все 32-битные регистры
PUSHAD
POPAD
Исключение:
POP CS и POP IP - недействительные операции.
PUSHA и POPA являются эффективным средством для сохранения
содержимого всех регистров (кроме сегментных и IP) в начале
выполнения процедуры и восстановления их в конце работы. PUSHA
включает в стек регистры в следующем порядке: AX, CX, DX, BX, SP,
BP, SI, DI. Значение SP то, что было в нем до выполнения команды
PUSHA. PUSHAуменьшает содержимоеSP на 2 при включении в стек
содержимого каждого регистра. POPA вызывает увеличение содержимого
SP на ту же величину, что и PUSHA, ей не требуется запомненное в
стеке содержимое регистра SP и она егопросто уничтожает. Команды
PUSHAD, POPAD работают аналогично с 32-битными регистрами
процессора.
Команда XLAT - преобразует значение в регистре AL: она его заменяет
на байт из таблицы, адресуемой регистром BX, причем индексом
таблицы служит исходное содержимое регистра AL.
Удобна для
преобразования из одного кода в другой.
Пример использования команды для перевода цифр из 10 системы
счисления в код “2 из 5” - любой код, содержащий 2 единичных
бита.
Код “2 из 5” приведен в таблице.
Цифра
Код
~
~
TABLE DW 11000B, 00011B, 00101B, 00110B, 01001B, 01010B, 01100B,
10001B, 10010B, 10100B, 11000B
MOV BX, OFFSET TABLE
MOV AL, 7
XLAT TABLE
2.5.1.3. Команды ввода-вывода.
Для связи с разными частями ЭВМ и управления ими микропроцессор
использует порты ввода-вывода. Любой порт идентифицируется
шестнадцатиразрядным номером порта в диапазоне от 0 до 65535. Как и
при доступе к памяти, процессор для связи использует шины данных и
адреса. При доступе к порту он посылает сначала по управляющей шине
сигнал, который оповещает все устройства ввода-вывода, что адрес на
шине является адресом определенного порта, а затем посылает сам
адрес. То устройство, адрес порта которого совпадает, дает ответ.
Номер порта - это адрес ячейки памяти, являющейся частью устройства
ввода-вывода, а не частью основной памяти. Для указания на доступ к
порту и пересылки информации к устройствам ввода-вывода и обратно,
используются специальные команды ввода-вывода.
IN - передает данные (байт, слово или двойное слово ) из исходного
порта в аккумулятор (AL, AX или EAX).
OUT - передает данные из аккумулятора в исходный порт.
Номер порта можно указывать либо в самой команде, либо в регистре
DX(0-65535).
Примеры использования команд ввода-вывода приведены в таблице
2.5.
Таблица 2.5. Примеры использования команд ввода-вывода.
Команда
Байт
Слово
Дв. Слово
IN
(непосредственная, операнд)
IN AL, 20h
IN AX, 20h
IN EAX, 20h
OUT(непосредственная, операнд)
OUT 20h, AL
OUT 20h, AX
OUT 20h, EAX
IN (регистр)
IN AL, DX
IN AX, DX
IN EAX, EDX
OUT(регистр)
OUT DX, AL
OUT DX, AX
OUT EDX, EAX
Команды PUSH и POP .
329
0
2 минуты
Понравилась работу? Лайкни ее и оставь свой комментарий!
Для автора это очень важно, это стимулирует его на новое творчество!