Работа процедур со стеком
Работа процедур со стеком
В данном разделе описаны правила, которых следует придерживаться при составлении внешних подпрограмм, ориентированных на работу со стеком.
Распределение пространства стека. Общий случай распределения пространства стека при выполнении процедуры показан в табл. В.2.
Таблица В.2. Распределение пространства стека в порядке увеличения адресов
Общедоступная область стека |
Промежуточные переменные подпрограммы |
Исходное содержимое регистра bр или ebp |
Адрес возврата из подпрограммы |
Параметры подпрограммы |
Недоступная часть стека |
Общедоступная область расположена в начале стекового сегмента, ее минимальный адрес (смещение) равен нулю, а максимальный хранится в указателе стека (в регистре sp). Обычно она используется для хранения содержимого регистров и передачи параметров вызываемым подпрограммам.
Место для промежуточных переменных резервирует подпрограмма, если в этом есть необходимость. Она же сохраняет в стеке исходное содержимое регистра bpли ebp при работе в 32-разрядном режиме. Во время выполнения подпрограммы адрес, в котором сохранено исходное значение регистра bp(или ebp), используется в качестве базы для доступа команд к параметрам или промежуточным переменным.
Адрес возврата и параметры размещает в стеке основная задача, вызывающая данную подпрограмму. При входе в подпрограмму указатель стека содержит адрес первого свободного слова, в которое обычно помещается исходное значение регистра bpли ebp.
Недоступная часть стека названа так не потому, что она физически недоступна, а потому, что подпрограмма не должна изменять хранящиеся там данные. Если перед размещением параметров стек был полностью очищен, то недоступной области просто не существует.