Стековые команды

 

а) PUSH op; запись слова в стек, флаги не модифицируются

ор – может быть в регистре (в том числе и в сегментном) или в ячейке памяти, но не непосредственный операнд.

Алгоритм выполнения:

- декремент значения SP:=SP–2;

- пересылка содержимого ор на сводную ячейку стека с адресом [SS:SP] (в польской инверсной записи).

Пример:

PUSH AX

Примечание: Если организуется стековый сегмент в максимальном объеме (64КБ), то при полном заполнении, происходит разрушение ранее записанной информации (см. рис.12)

 


Рис.12

Если стек имеет меньший размер, то при полном его заполнении каждое новое обращение разрушает область памяти вне стекового сегмента (см. рис.13).

 
 

 


Рис. 13

 

б) РОР ор ; чтение слова из стека

ор – аналогично PUSH.

Алгоритм выполнения:

- слово из ячейки стека пересылается в ор (порядок байтов восстанавливается),

- инкремент SP := SP +2

Пример:

POP CX

Примечание:

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

в) PUSHF ; копирование слова из регистра FLAGS в стек

POPF ; копирование слова из стека в регистр FLAGS

ор отсутствует, флаги не изменяются.

Эти команды позволяют модифицировать флаг TF. Т.к. другого пути воздействия на TF нет, то нужно выполнить засылку флага в стек, затем изменить 8-й бит и записать новое значение из стека в регистр FLAGS.