Языки программирования - концепции и принципы

Чтобы дать более конкретное представление


Чтобы дать более конкретное представление о реализации идей стековой архитектуры, рассмотрим вход в процедуру и выход из нее на уровне машинных команд для процессора серии Intel 8086. В качестве примера возьмем:

procedure Main is

       Global: Integer;

        procedure Proc(Parm: in Integer) is

                 Local'1, Local2: Integer;

        begin

Ada

                 Local2 := Global + Farm + Local 1 ;



        end Proc;

begin

       Proc(15);

end Main;

Процессор 8086 имеет встроенные команды push и pop, в которых подразуме­вается, что стек растет от старших адресов к младшим. Для стековых операций выделены два регистра: регистр sp, который указывает на «верхний» элемент в стеке, и регистр bр, который является указателем дна и идентифицирует ме­стоположение начала записи активации.

    При вызове процедуры в стек помещается параметр и выполняется коман­да вызова (call):

mov                 ax, #15                            Загрузить значение параметра

push                ax                                    Сохранить параметр в стеке

call                  Proc                                 Вызвать процедуру

На рисунке 7.11 показан стек после выполнения этих команд — параметр и адрес возврата помещены в стек.



    Следующие команды являются частью кода процедуры и выполняются при входе в процедуру; они сохраняют старый указатель дна (динамическая связь), устанавливают новый указатель дна и выделяют память для локальных переменных, уменьшая указатель стека:

push             bp                         Сохранить старый динамический указатель

mov              bp, sp                    Установить новый динамический указатель

sub               sp,#4                      Выделить место для локальных переменных

Получившийся в результате стек показан на рис. 7.12.



Теперь можно выполнить тело процедуры:

mov                     ax,ds:[38]                        Загрузить переменную Global


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