Оперативная память

         

Работа процедур со стеком



Работа процедур со стеком

В данном разделе описаны правила, которых следует придерживаться при составлении внешних подпрограмм, ориентированных на работу со стеком.

Распределение пространства стека. Общий случай распределения пространства стека при выполнении процедуры показан в табл. В.2.

Таблица В.2. Распределение пространства стека в порядке увеличения адресов

Общедоступная область стека
Промежуточные переменные подпрограммы
Исходное содержимое регистра bр или ebp
Адрес возврата из подпрограммы
Параметры подпрограммы
Недоступная часть стека

Общедоступная область расположена в начале стекового сегмента, ее минимальный адрес (смещение) равен нулю, а максимальный хранится в указателе стека (в регистре sp). Обычно она используется для хранения содержимого регистров и передачи параметров вызываемым подпрограммам.

Место для промежуточных переменных резервирует подпрограмма, если в этом есть необходимость. Она же сохраняет в стеке исходное содержимое регистра bpли ebp при работе в 32-разрядном режиме. Во время выполнения подпрограммы адрес, в котором сохранено исходное значение регистра bp(или ebp), используется в качестве базы для доступа команд к параметрам или промежуточным переменным.

Адрес возврата и параметры размещает в стеке основная задача, вызывающая данную подпрограмму. При входе в подпрограмму указатель стека содержит адрес первого свободного слова, в которое обычно помещается исходное значение регистра bpли ebp.



Недоступная часть стека названа так не потому, что она физически недоступна, а потому, что подпрограмма не должна изменять хранящиеся там данные. Если перед размещением параметров стек был полностью очищен, то недоступной области просто не существует.



Содержание раздела