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



       

ГЛАВА 21. Компановка программ - часть 9


| 0000 | 1600 | D213 | 4001 | 0025 | 0000 |C213 | | | | | | | | SP: 72 74 76 78 7A 7C 7E

Ассемблер для IBM PC. Глава 21 9

Так как BP теперь также содержит 0072, то параметр цены (PRICE) будет по адресу BP+8, а параметр количества (QTY) - по адресу BP+6. Программа пересылает эти величины из стека в регистры AX и BX соответственно и выполняет умножение.

------------------------------------------------------------ ------------------------------------------------------------ Рис.21.6. Передача параметров.

Перед возвратом в вызывающую программу в регистре BP восстанавливается первоначальное значение, а содержимое в регистре SP увеличивается на 2, с 72 до 74. Последняя команда RET представляет собой "длинный" возврат в вызывающую программу. По этой команде выполняются следующие действия:

ъ Из вершины стека восстанавливается значение регистра IP (1600). ъ Содержимое регистра SP увеличивается на 2, от 74 до 76. ъ Из новой вершины стека восстанавливается значение регистра CS (D213). ъ Содержимое регистра SP увеличивается на 2 от 76 до 78.

Таким образом осуществляется корректный возврат в вызываю щую программу. Осталось одно небольшое пояснение. Команда RET закодирована как

RET 4

Параметр 4 представляет собой число байт в стеке использо ванных при передаче параметров (два слова в данном случае). Команда RET прибавит этот параметр к содержимому регистра SP, получив значение 7C. Таким образом, из стека исключаются ненужные больше параметры. Будьте особенно внимательны при восстановлении регистра SP - ошибки могут привести к непред сказуемым результатам.

КОМПАНОВКА ПРОГРАММ НА BASIC-ИНТЕРПРЕТАТОРЕ И АССЕМБЛЕРЕ ------------------------------------------------------------

В руководстве по языку BASIC для IBM PC приводятся различ ные методы связи BASIC-интерпретатора и программ на ассемблере. Для этого имеются две причины: сделать возможным использование BIOS-прерываний через ассемблерные модули и создать более эффективные программы. Цель данного раздела - дать общий обзор по данному вопросу; повторять здесь технические подробности из руководства по языку BASIC нет необходимости. Для связи с BASIC ассемблерные программы кодируются, транслируются и компануются отдельно. Выделение памяти для подпрограмм на машинном языке может быть либо внутри, либо вне 64 Кбайтовой области памяти, которой ограничен BASIC. Выбор лежит на программисте.




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