вторник, 21 сентября 2010 г.

ASM: Работа со стеком.

Команды PUSH и POP:

Команда PUSH позволяет поместить в стек содержимое любого 16- или 32-битного регистра или ячейки памяти.



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

POP, записывает в свой операнд значение вершины стека (последнее сохраненное в стеке значение).

Команды PUSHA/POPA и PUSHAD/POPAD:

Иногда полезно сохранить в стеке значения сразу всех регистров общего назначения.
Для этого используется команда PUSHA, а для извлечения из стека
значений всех регистров служит команда РОРА. Команды PUSHA и РОРА
помещают в стек и извлекают из него все 16-разрядные регистры. Операндов
у этих команд нет.

Поскольку команды PUSHA и РОРА разрабатывались для предшественника
процессора 80386, они не могут сохранять значений 32-битных регистров (они
просто не подозревают об их существовании). Для сохранения и восстановления
значений расширенных регистров служат команды PUSHAD и POPAD.

Регистры помещаются в стек в следующем порядке (сверху вниз):
(Е)АХ, (Е)СХ, (E)DX, (E)BX, (E)SP, (E)BP, (E)SI, (E)DI.

Команды PUSHF/POPF и PUSHFD/POPFD:

В 16-битных процессорах и регистр признаков был 16-битным, поэтому
для помещения в стек флагов и восстановления из него использовались
команды PUSHF и POPF. Для новых процессоров, где регистр признаков
32-битный, нужно использовать 32-битные версии этих команд — PUSHFD
и POPFD.

Комментариев нет:

Отправить комментарий

Примечание. Отправлять комментарии могут только участники этого блога.