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
Используются для помещения стек флагов и восстановления из него