6.7. Передача параметра |
Вверх Предыдущий Следующий |
При вызове процедуры или функции компилятор выполняет следующие действия: 1.Если имеются какие-либо параметры для передачи в процедуру, они сохраняются в известных регистрах, а если имеется больше параметров, чем свободных регистров, то они помещаются в стек слева направо. 2.Если вызывается функция, которая возвращает значение типа String, Set, Record, Object или Array, то возвращается адрес для хранения результата функции, аналогично выполняется передача в процедуру. 3.Если вызываемая процедура или функция – это метод объекта, то указатель на self передаётся в процедуру. 4.Если процедура или функция вложена в другую функцию или процедуру, то указатель фрейма родительской процедуры помещается в стек. 5.Возвращаемый адрес помещается в стек (это делается автоматически с помощью инструкции, вызывающей подпрограмму). В результате фрейм стека при выходе выглядит так, как показано в таблице 6.5. Таблица 6.5. Фрейм стека при вызове процедуры (32-битная модель).
|