Команды PUSHA, PUSHAD, POPA, POPAD используются для сохранения в стеке и извлечения из него всех регистров общего назначения. Может использоваться перед вызовом процедуры, чтобы восстановить все значения регистров, какими они были до вызова.

 

Команды PUSHA, PUSHAD
Синтаксис: PUSHA
PUSHAD
Операнды: Нет
Назначение: Помещение регистров общего назначения в стек
Процессор: 80186+
80386+
Флаги: Не изменяются
Комментарий: Команда PUSHA помещает в стек регистры общего назначения в следующем порядке: AX, CX, DX, BX, SP, BP, SI, DI (в случае регистра SP используется значение, которое находилось в этом регистре до начала работы команды).
Если команда используется в 32-разрядном режиме адресации или указана команда PUSHAD, то в стеке будут сохраняться регистры EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI.
Ограничения: Нет
Примеры:
pusha
Команда POPA, POPAD
Синтаксис: POPA
POPAD
Операнды: Нет
Назначение: Извлечение регистров общего назначения из стека
Процессор: 80186+
80386+
Флаги: Не изменяются
Комментарий: Команда POP извлекает из стека содержимое регистров общего назначения в следующем порядке: DI, SI, BP, +2, BX, DX, CX, AX. Регистр SP, при чтении из стека с помощью команды POPA, пропускается. Вместо этого регистр стека просто увеличивается на 2 и происходит чтение следующего регистра.
Если команда используется в 32-разрядном режиме адресации или указана команда POPAD, то из стека будут извлекаться регистры EDI, ESI, EBP, +4, EBX, EDX, ECX, EAX.
Ограничения: Нет
Примеры:
popa