Справочник по языку Ассемблера IBM PC


Команды работы со стеком - часть 2



При занесении элемента в стек процессор уменьшает значение регистра esp, а затем записывает элемент по адресу новой вершины.


При извлечении данных из стека процессор копирует элемент, расположенный по адресу вершины, а затем увеличивает значение регистра указателя стека esp.


Таким образом, получается, что стек растет вниз, в сторону уменьшения адресов.

Что делать, если нам необходимо получить доступ к элементам не на вершине, а внутри стека?


Для этого применяют регистр ebp. Регистр ebpрегистр указателя базы кадра стека.


Например, типичным приемом при входе в подпрограмму является передача нужных параметров путем записи их в стек. Если подпрограмма тоже активно работает со стеком, то доступ к этим параметрам становится проблематичным. Выход в том, чтобы после записи нужных данных в стек сохранить адрес вершины стека в указателе кадра (базы) стека — регистре ebp. Значение в ebp в дальнейшем можно использовать для доступа к переданным параметрам.

Начало стека расположено в старших адресах памяти. На рис. 2 этот адрес обозначен парой ss:ffff. Смещение ffff приведено здесь условно. Реально это значение определяется величиной, которую программист задает при описании сегмента стека в своей программе.


К примеру, для программы в началу стека будет соответствовать пара ss:0100h. Адресная пара ss:ffff — это максимальное для реального режима значение адреса начала стека, так как размер сегмента в нем ограничен величиной 64 Кбайт (0ffffh).

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


источник — запись значения источник в вершину стека.


Интерес представляет алгоритм работы этой команды, который включает следующие действия (рис. 3):

  • (sp) = (sp) – 2; значение sp уменьшается на 2;

  • значение из источника записывается по адресу, указываемому парой ss:sp.

Рис. 3. Принцип работы команды push

назначение — запись значения из вершины стека по месту, указанному операндом назначение. Значение при этом “снимается” с вершины стека.


Алгоритм работы команды pop обратен алгоритму команды push (рис. 4):




Начало  Назад  Вперед



Книжный магазин