Связь ассемблера с языками высокого уровня 349
4. Если вы собираетесь исследовать в отладчике работу программы, то необходи-
мо потребовать, чтобы компилятор включил отладочную информацию в гене-
рируемый им исполняемый модуль. Для этого есть две возможности. Первая
заключается в использовании глобального ключа
Этот ключ должен быть
установлен сразу после заголовка программы на Pascal.
альтернативная
возможность заключается в установке параметра компилятора: Options Com-
piler Debug Information.
5. Выполнить компиляцию программы на Pascal. Для компиляции удобно исполь-
зовать интегрированную среду. Для изучения особенностей связки Pascal —
ассемблер удобно прямо в интегрированной среде перейти к работе в отладчи-
ке командой Tools Turbo Debugger (или клавишами
Будет загружен
отладчик. Его среда вам хорошо знакома; в данном случае в окне Module вы уви-
дите текст программы на Pascal. Нажимая клавишу F7, вы в пошаговом режиме
будете исполнять программу на Pascal. Когда очередь дойдет до вызова про-
цедуры на ассемблере, отладчик откроет окно с текстом программы на ассемб-
лере. Но наш совет вам — не ждать этого момента, так как вы пропустите неко-
торые интересные вещи. Дело в том, что отладчик скрывает момент перехода из
программы на Pascal в процедуру на ассемблере. Поэтому лучше всего испол-
нять программу при открытом окне CPU отладчика. И тогда вы станете свидете-
лями тех процессов, которые мы будем обсуждать далее.
Если бы взаимодействие программ ограничивалось только передачей и возвра-
том управления, то на этом обсуждение можно было бы и закончить. Но дело зна-
чительно усложняется, когда требуется передать аргументы (в случае процедуры)
или передать аргументы и возвратить результат (в случае функции). Рассмотрим
процессы, которые при этом происходят.
Передача аргументов при связи модулей на разных языках всегда производит-
ся через стек. Компилятор Pascal генерирует соответствующие команды при обра-
ботке вызова процедуры ассемблера. Это как раз те команды, которые отладчик
пытался скрыть от нас. Они записывают в стек аргументы и генерируют команду
CALL для вызова процедуры ассемблера. Чтобы убедиться в этом, просмотрите на
исполняемый код программы в окне CPU отладчика. После обработки вызова про-
цедуры и в момент передачи управления процедуре asmproc содержимое стека бу-
дет таким, как показано рис.
а. Для доступа этим аргументам можно приме-
нять различные методы, наиболее удобный из них — использование регистра Р.
Регистр
как уже отмечалось, специально предназначен для организации
произвольного доступа к стеку. Когда мы рассматривали связь ассемблерных мо-
дулей, то говорили о необходимости добавления в текст вызываемого модуля фраг-
ментов, настраивающих его на передаваемые ему аргументы. При объединении
разноязыких модулей также нужно вставлять подобные дополнительные
ты кода. Они, кроме всего прочего, позволят учесть особенности конкретного язы-
ка. Фрагмент, вставляемый в самое начало вызываемого модуля, называется
про-
34>32>31>30>29>28>27>26>25>24>23>20>19>18>17>16>15>14>13>12>11>9>8>7>5>4>3>2>1>13>12>11>10>9>8>7>6>5>4>3>2>
Do'stlaringiz bilan baham: