Сегмент стека.

 

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

В отличие от сегмента данных и кода, в которых можно явно адресовать любую ячейку памяти (например, используя метки или имена переменных – т.е. их адреса), в сегменте стека обычно регистры SS и SP используются неявно, автоматически изменяя свои значения при выполнении тех или иных команд. Стек обычно используется для временного хранения адресов возврата из подпрограмм или прерываний (для того, чтобы можно было продолжить выполнение программы с прерванной точки). Кроме того, в стеке удобно сохранять, а потом из стека восстанавливать значения некоторых регистров, если они могут измениться при выполнении некоторых действий (например, перед вызовом функций операционной системы или в начале программы обработки прерываний). И, наконец, используя стек, можно легко передавать аргументы подпрограммам и в стеке можно организовывать локальные переменные (такой подход используется во всех языках высокого уровня).