Рис. 7.6. Принцип работы команды PUSHA
Старшие адреса ОП
Стек после команды
PUSHA
сегмента и при указании 32-разрядного сегмента работает с соответствующими
32-разрядными регистрами (то есть
ЕСХ,
EBX,
EBP, ESI, EDI).
Команда PUSHAD — выполняется аналогично команде
но есть некоторые
особенности, которые вы можете найти в приложении.
Следующие три команды выполняют действия, обратные действиям
ранее команд:
*
т POPAD.
описан-
Глава 7. Команды обмена данными
Представленная далее группа команд позволяет сохранить в стеке регистр фла-
гов и записать слово или двойное слово. Отметим, что перечисленные команды —
единственные в системе команд процессора, которые позволяют получить доступ
(и которые нуждаются в этом доступе) ко всему содержимому регистра флагов.
Команда
F сохраняет регистр флагов в стеке. Работа этой команды зависит
от атрибута размера сегмента:
16 — в стек записывается регистр FLAGS размером два байта;
2 — в стек записывается регистр FLAGS размером четыре байта.
Команда
сохраняет в стеке регистр флагов размером в слово. С атрибу-
том
всегда работает так же, как команда
Команда
сохраняет в стеке регистр флагов FLAGS или EFLAGS в зависимо-
сти от атрибута размера сегмента (то есть то же, что и
Следующие три команды также выполняют действия, обратные действиям рас-
смотренных выше команд:
POPF;
* POPFW;
и POPFD.
Работать со стеком приходится постоянно, поэтому к этому вопросу мы будем
возвращаться еще не раз. Отметим основные виды операций, когда использование
стека практически неизбежно:
ш вызов подпрограмм;
временное сохранение значений регистров;
определение локальных переменных в процедуре.
Итоги
* Основная команда пересылки данных — MOV. Операнды этой команды (как
и большинства других команд, берущих значения из памяти) должны быть
согласованы по разрядности. Хотя обычно действуют правила умолчания, в со-
мнительных ситуациях лучше явно указывать разрядность операндов с по-
мощью оператора PTR.
Ш Управление периферией компьютера в общем случае осуществляется с исполь-
зованием всего двух команд ввода-вывода — IN и OUT.
В процессе работы программы динамически можно получить как эффектив-
ный, так и полный (физический) адрес памяти. Для этого язык ассемблера
доставляет группу команд получения указателей памяти.
8 Архитектура процессора предоставляет в распоряжение программиста специ-
фическую, но весьма эффективную структуру — стек. Система команд поддер-
живает все необходимые операции со стеком. Подробнее со стеком мы позна-
комимся при изучении модульного программирования на ассемблере.
Do'stlaringiz bilan baham: |