Вызовы подпрограмм
храняя, таким образом, адрес возврата. Адресом возврата называется адрес, по которому возобновляется исполнение вызывающей программы после возврата из подпрограммы.
Рис. В.З. Пример стека |
Далее из метки или с действительного адреса загружается новый счетчик команд. При дальнем вызове значение регистра CS размещается в стеке перед значением регистра PC, а счетчик команд и регистр кодового сегмента загружаются непосредственными данными или с действительного адреса. На этом выполнение команды CALL завершается.
Команда возврата, RET, выталкивает из стека адрес возврата, сохраняет его в счетчике команд, после чего выполнение программы возобновляется с команды, следующей непосредственно за командой CALL. Иногда в команде RET роль непосредственных данных выполняет положительное число. Это число рассматривается как ряд байтов аргументов, размещенных в стеке перед вызовом; оно прибавляется к значению SP, и стек очищается.
При дальнем вызове (выполнении команды RETF) регистр кодового сегмента выталкивается после счетчика команд.В рамках подпрограммы необходимо реализовать доступа к аргументам. По этой причине выполнение подпрограммы часто начинается с размещения в стеке указателя базы и копирования текущего значения регистра SP в регистр ВР. Таким образом, указатель базы указывает на свое предыдущее значение. После адрес возврата определяется путем прибавления к ВР двойки, а первый и второй аргументы располагаются по действительным адресам ВР + 4иВР + 6, соответственно. Если процедуре нужны локальные переменные, необходимое количество байтов можно вычесть из указателя стека; обращаться к этим переменным можно из указателя базы путем отрицательного смещения. В примере на рис. В.З имеются три однословных локальных переменных, расположенных по адресам ВР-2, ВР-4 и ВР - 6. Таким образом, весь набор текущих аргументов и локальных переменных становится доступным через регистр ВР.
В стеке, как обычно, сохраняются промежуточные результаты или подготавливаются аргументы для последующих вызовов. Чтобы восстановить стек до возврата, не высчитывая, какую часть стека заняла подпрограмма, нужно скопировать указатель базы в указатель стека, вытолкнуть из стека старое значение ВР и выполнить команду RET.
Иногда в процессе вызова подпрограммы значения регистров процессора меняются. В этой связи полезно сделать так, чтобы вызывающая программа не знала о том, какие регистры используются вызываемой программой. Для этого проще всего ввести для системных вызовов и обычных подпрограмм одни и те же соглашения. Предполагается, что в вызываемой программе могут изменяться значения регистров АХ и DX. Если в одном из этих регистров содержится ценная информация, желательно, чтобы вызывающая процедура разместила ее в стеке до выполнения аналогичной операции с аргументами. Если подпрограмма использует и другие регистры, их можно поместить в стек непосредственно в начале ее выполнения и извлечь из него перед запуском команды RET. Таким образом, желательно сделать так, чтобы вызывающая процедура сохраняла значения регистров АХ и DX (если в них содержатся значимые данные), а вызываемая — значения других регистров, которые она перезаписывает.
Еще по теме Вызовы подпрограмм:
- ВЫЗОВ ВРАЧА
- СПТ откликается на вызов обстоятельств
- Быстрый вызов желаемого
- Бросьте себе вызов
- Самоубийство как вызов обществу
- § 14 Условное соглашение. – Предложение и вызов. – Договор посредством публичного торга или состязания. – Одностороннее обещание.
- § 46 Принятие наследства. – Значение вызова кредиторов и некоторых публикаций. – Отзыв о принятии и действия, служащие признаком принятия.
- Есть вызов – есть чудеса.
- § 45 Меры к охранению открывшегося наследства. – Опись. – Вызов наследников. – Утверждение в правах наследства. – Срок на явку наследников и вступление явившихся. – Особые правила для торгового сословия.
- § 55 Общие понятия о поклаже. – Поклажа свободная и необходи- мая, по русскому закону. – Кто может вступать в договор о поклаже. – Доказательство поклажи. – Сохранная расписка. – Когда не требуется письменное доказательство. – Обязанности приемщика. – Поклажа в запертом помещении. – Растрата. – Ответственность приемщика. – Возвращение поклажи при несостоятельности. – Вызов наследников приемщика и отдатчика. – Поклажа в гостиницах.
- 10 приемов воздействия на противника
- Непокорный
- Определение шестое