9.Организация стека, команды работы со стеком. Регистры адресации стека.

По нормальному:

http://asmworld.ru/uchebnyj-kurs/020-stek/

Расположение стека

Располагается стек в сегменте памяти, описываемом регистром сегмента стека SS(Stack Segment), а текущее смещение вершины стека отражено в указателе вершины стека – регистре SP(Stack Pointer) Вершина стека представлена парой SS:SP (SS:ESP).

Стек растет в памяти «вниз», то есть новая порция данных записывается по меньшему адресу. Впрочем, точный адрес данных внутри стека не имеет для нас значения, потому что любая операция над стеком имеет дело с его вершиной.

Стек

Понятие стека - LIFO (Last-In, First-Out).

Стековая адресация памяти - SS ESP, «рост» в сторону меньших адресов.

PUSH/POP r/m16|r/m32|imm32|imm16

PUSHFD/POPFD – флаги 32 бита

PUHSF/POPF - флаги 16 бит

PUSHAD/POPAD – регистры по 32 бита - EAX,ECX,EBX,ESP,EBP,ESI,EDI

PUHSA/POPA - регистры по 16 бит - AX, CX, BX, SP, BP, SI, DI

Push <операнд>

Пример использования:

push eax ;поместить ЕАХ в стек

Pop <операнд>

Команды PUSHА/POPА и PUSAD/POPAD

Сохраняют в стеке значения сразу всех регистров общего назначения
и восстанавливают их
Регистры помещаются в стек в следующем порядке (сверху вниз):

(Е)АХ, (Е)СХ, (E)DX, (E)BX, (E)SP, (E)BP, (E)SI, (E)DI

Команды PUSHF/POPF и PUSAF/POPAF
Используются для помещения стек флагов и восстановления из него