Стек – это память, работа с которой ведется по следующему принципу: элемент, пришедший в стек последним, считывается из него первым. В ПК под такую память можно отвести любую область памяти, но к ней предъявляются некоторые требования: ее размер не должен превышать 64кбайт и ее начальный адрес должен быть кратным 16. Другими словами, эта область должна быть сегментом памяти. Его называют сегментом стека. На его начало, как мы уже знаем должен указывать сегментный регистр SS . В ПК принято заполнять стек так: первый элемент записывается в самый конец области стека, следующий элемент идет за ним. При чтении из стека первым всегда удаляется самый верхний элемент. Поэтому получается, что низ стека фиксирован, а вот вершина стека всегда сдвигается. Для того, чтобы знать текущее положение этой вершины используется еще один регистр – SP - указатель стека, в нем хранится адрес ячейки, отсчитанный от начала сегмента стека. Поэтому адрес задается парой регистров SS:SP (см. рис.16.)

Рис.7.1. Стек.
ЗАПОМНИТЕ: запись в стек идет по убыванию адресов!
Имена ячейкам стека обычно не дают, так как все равно обращение к ним осуществляется косвенно через регистр SP , а не по именам. Чаще всего не задают и начальные значения для ячеек стека.
Прежде, чем начинать работу со стеком, необходимо загрузить в регистры SS и SP соответствующие значения: первый должен указывать на начало сегмента стека, а второй – на вершину стека. Это выполняется автоматически, если определять сегмент директивой SEGMENT с параметром STACK . При этом в SS устанавливается на начало сегмента стека, а в регистр SP записывается размер стека в байтах. Это число как раз и указывает на первую ячейку за областью стека.