Описание процессора i8086 для программиста

       

Стек


Микропроцессор 8086 поддерживает аппаратный стек. Регистровая пара SS:SP (селектор сегмента находится в регистре SS, а смещение – в регистре SP) указывает на слово, являющееся вершиной стека. Регистр SP должен содержать чётное значение, т.е. стек всегда должен быть выровнен на границу слова. При записи или чтении байта в стек будет помещено или из стека будет извлечено слово (два байта).

Стек микропроцессора 8086 растёт вниз. Это означает, что при записи слова в стек содержимое регистра SP уменьшается на два, после чего производится запись в стек по адресу SS:SP. При извлечении данных из стека сначала считывается слово по адресу SS:SP, а затем содержимое SP увеличивается на два. Если операция выполнялась над байтом, то этот байт будет младшим байтом слова, записываемого или извлекаемого из стека. Значение старшего байта при записи предсказать невозможно; при чтении из стека его значение игнорируется.

Запись в стек имеет место в следующих случаях:

– при выполнении инструкции PUSH, записывающей в стек значение своего операнда;

– при выполнении инструкции PUSHF, записывающей в стек содержимое регистра флагов;

– при выполнении инструкции CALL, записывающего в стек адрес возврата из подпрограммы (адрес состоит из одного или двух слов в зависимости от того, выполняется ли ближний или дальний переход);

– при выполнении прерывания (в стек записывается три слова – содержимое регистра флагов и адрес возврата из прерывания).

Чтение из стека происходит:

– при выполнении инструкций POP

и POPF, обратных инструкциям PUSH и PUSHF;

– при выполнении инструкции RET, обеспечивающей возврат из подпрограммы (извлекается одно или два слова в зависимости от того, какой возврат – ближний или дальний – выполняется);

– при выполнении инструкции возврата из прерывания IRET (извлекается три слова – дальний адрес возврата из подпрограммы и содержимое слова флагов).

Для доступа к данным в стеке без их извлечения ячейки, составляющие стек, могут адресоваться как обычные ячейки памяти. Как правило, базовый адрес, используемый для доступа к ячейкам стека, содержится в регистре BP. Использование регистра SP для таких доступов невозможно.



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