Она сохраняет в стеке адрес, по которому нужно
передать управление после окончания функции, и передаёт управление на начало
функции.
Передача параметров
Процессор Intel x86 ничего не знает о параметрах
вызываемых функций, поэтому механизм передачи параметров может быть
произвольным, главное чтобы вызывающий и вызываемый код договорились о нём
заранее. Мест, где можно сохранить параметры, не так уж и много: либо в
регистрах, либо в стеке, либо часть там, а часть там.
ПРИМЕЧАНИЕ
Конечно, можно передавать параметры по
ссылке или по значению, в прямом порядке или в обратном, но это для нас не
важно, важно только то, где передаваемая информация (параметры или их адреса)
находится.
|
Передача параметров через регистры используется в
основном в двух случаях:
Компилятором для оптимизации.
Ассемблер-программистом из лени или в погоне за
производительностью. Чтобы достать параметры из стека, надо написать несколько
дополнительных команд, а в регистрах они сразу под рукой.
В большинстве остальных случаев параметры передаются
через стек. При этом вызов функции выглядит примерно так:
push ...
; Параметр
push ...
; Ещё один параметр
push ...
; И последний параметр
call xxxxxh ; Вызов
|
А стек к моменту начала выполнения функции – так:
Рисунок 1. Состояние стека в начале выполнения
функции.
Возврат из функции
Возврат управления производит инструкция ret, имеющая
четыре различные формы:
ret
ret xxxh
retf
retf xxxh
|
ПРИМЕЧАНИЕ
Модификация retf предназначена для
возврата из функции, которую вызвали из другого сегмента («дальним вызовом»).
Ниже она не упоминается, так как, во-первых, в Windows вы её вряд ли
встретите, во-вторых, с точки зрения реализации API Spying-а, она практически
не отличается от ret.
|
Задача, выполняемая ret*:
Рекомендуем скачать другие рефераты по теме: конспект 5 класс, шпаргалки по физике.
Предыдущая страница реферата |
1
2
3
4
5
6
7
8
9
10
11 |
Следующая страница реферата