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



       

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


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

Существует два способа загрузки машинного кода в память: использование оператора языка BASIC - POKE или объединение скомпанованного модуля с BASIC-программой.

Использование BASIC-оператора POKE.

Хотя это и самый простой способ, но он удобен только для очень коротких подпрограмм. Способ заключается в том, что сначала определяется объектный код ассемблерной программы по LST-файлу или с помощью отладчика DEBUG. Затем шестнадцати ричные значения кодируются непосредственно в BASIC-программе в операторах DATA. После этого с помощью BASIC-оператора READ считывается каждый байт и оператором POKE заносится в память для выполнения.

Компановка ассемблерных модулей.

С большими ассемблерными подпрограммами обычно проще иметь дело, ели они оттранслированы и скомпанованые как выполнимые (EXE) модули. Необходимо организовать BASIC-программу и выполнимый модуль в рабочую программу. При работе с BASIC-программой не забывайте пользоваться командой BSAVE (BASIC save) для сохранения программы и BLOAD - для загрузки ее перед выполнением. Прежде чем кодировать BASIC- и ассемблерную программы, необходимо решить, каким из двух способов они будут связаны. В языке BASIC возможны два способа: функция USR и оператор CALL. В обоих способах регистры DS, ES и SS на входе содержат указатель на адресное пространство среды BASIC. Регистр CS содержит текущее значение, определенное последним оператором DEF SEG (если он имеется). Стековый указатель SP указывает на стек, состоящий только из восьми слов, так что может потребоваться установка другого стеке в подпрограмме. В последнем случае необходимо на входе сохранить значение указателя текущего стека, а при выходе восстановить его. В обоих случаях при выходе необходимо восстановить значение сегментных регистров и SP и обеспечить возврат в BASIC с помощью межсегментного возврата RET. Скомпануйте ваш ассемблированный объектный файл так, что бы он находился в старших адресах памяти. Для этого используется параметр HIGH при ответе на второй запрос компа новщика, например, B:имя/HIGH. Затем с помощью отладчика DEBUG необходимо загрузить EXE-подпрограмму и по команде R определить значения в регистрах CS и IP: они показывают на стартовый адрес подпрограммы. Находясь в отладчике укажите имя (команда N) BASIC и загрузите его командой L. Два способа связи BASIC-программы и EXE-подпрограммы - использование операторов USR или CALL. Работая в отладчике, необходимо определить стартовый адрес EXE-подпрограммы и, затем, указать этот адрес или в операторе USRn или в CALL. В руководстве по языку BASIC для IBM PC детально представлено описание функции USRn и оператора CALL с различными примерами.




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