Ассемблер и программирование для IBM PC



         

ГЛАВА 7. Логика и Организация Программы - часть 9


Использование процедур дает хорошую возможность организо вать логическую структуру программы. Кроме того, операнды для команды CALL могут иметь значения, выходящие за границу от -128 до +127 байт. Технически управление в процедуру типа NEAR может быть передано с помощью команд перехода или даже обычным построч ным кодированием. Но в большенстве случаев рекомендуется использовать команду CALL для передачи управления в проце дуру и команду RET для возврата.

СЕГМЕНТ СТЕКА ------------------------------------------------------------

Ассемблер для IBM PC. Глава 7 141

До этого раздела в приводимых примерах встретились только две команды, использующих стек, - это команды PUSH в начале сегмента кодов, которые обеспечивают возврат в DOS, когда EXE-программа завершается. Естественно для этих программ требуется стек oчень малого размера. Однако, команда CALL автоматически записывает в стек относительный адрес команды, следующей непосредственно за командой CALL, и увеличивает после этого указатель вершины стека. В вызываемой процедуре команда RET использует этот адрес для возврата в вызывающую процедуру и при этом автоматически уменьшается указатель вершины стека. Таким образом, команды PUSH записывают в стек двухбайто вые адреса или другие значения. Команды POP обычно выбирают из стека записанные в него слова. Эти операции изменяют отно сительный адрес в регистре SP (т.е. в указатели стека) для доступа к следующему слову. Данное свойство стека требует чтобы команды RET и CALL соответствовали друг другу. Кроме того, вызванная процедура может вызвать с помощью команды CALL другую процедуру, а та в свою очередь - следующую. Стек должен иметь достаточные размеры для того, чтобы хранить все записываемые в него адреса. Для большенства примеров в дан ной книге стек объемом в 32 слова является достаточным. Команды PUSH, PUSHF, CALL, INT, и INTO заносят в стек адрес возврата или содержимое флагового регистра. Команды POP, POPF, RET и IRET извлекают эти aдреса или флаги из стека. При передаче управления в EXE-программу система устанавли вает в регистрах следующие значения:




Содержание  Назад  Вперед