Принципы работы со стеком

Стек – область памяти, специально выделяемая для временного хранения данных программы. Для работы со стеком предназначены три регистра:

SS – регистр сегмента стека;

SP – регистр указателя стека;

BP – регистр указателя базы кадра стека

Стеков может быть несколько. В постоянный момент времени доступен только один стек, адрес сегмента которого содержится в регистре SS. Для обращения к другому стеку в регистр SS можно загрузить его адрес.

Особенности работы со стеком.

Запись и чтение данных в стеке осуществляется по принципу LIFO

0000.0000    
Сегмент кода  
Сегмент данных  
Сегмент стека  
Вершина стека SS:SP
Дно стека SS:ffff

По мере записи в стек области данных, он растет в сторону младших адресов. При использовании регистров SP и BP для адресации памяти, Assembler автоматически считает, что содержащиеся в нем значения представляют собой смещение относительно сегментного регистра SS. Регистр SP указывает на вершину стека, т.е. содержит смещение, по которому в стек был записан последний элемент. При записи элементов в стек, процессор сначала уменьшает значение SP, а затем записывает элемент по адресу новой вершины. При извлечении данных из стека процессор копирует элемент, расположенный по адресу вершины, затем увеличивает значение регистра указателя стека SP.

Для доступа к элементам внутри стека используют регистр BP.

Для организации работы со стеком существуют специальные команды записи и чтения:

1. push <источник> (ax)

Алгоритм работы:

1. Уменьшает SP на 2

2. Значение источника записывается по адресу, указываемого парой SS:SP

2. pop <приемник>

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

Алгоритм работы:

1. Запись содержимого в вершину стека по месту указываемого приемником

2. Увеличение SP на 2

Основные виды операций, использующие стек: вызов подпрограмм, временное сохранение значений регистров, определение локальных переменных в процедуре