Восстанавливает все регистры общего назначения из стека. Эта инструкция поддерживается начиная с архитектуры 186 и 286C.
POPA - Восстанавливает все регистры общего назначения из стека.
Восстанавливает из стека в регистры общего назначения. Регистры загружаются в следующем порядке: DI, SI, BP, BX, DX, CX и AX. Значение в стеке для регистра SP игнорируется. Вместо этого после загрузки каждого регистра, регистр SP увеличивается на единицу.
В следующем примере мы напишем функцию которая внутри себя изменяет состояние регистров
ax и
bx. После выхода из функции изначальное значение регистров будет восстановлено.
- title Автор: Довгополов Евгений Сергеевич
- .286C
- .model small
- .stack 100h
- code segment public _______; Начало сегмента кода
- ____assume cs:code
- ____main proc _____________; Начало процедуры main
- ________mov_____ax, 10_____; Копируем значение 10 в регистр ax
- ________mov_____bx, 20_____; Копируем значение 20 в регистр bx
- ________call____function___; Вызываем процедуру function
- ________mov_____ax, 4C00h__; Копируем значение функции завершения процесса в ah а значение в al
- ________int_____21h _______; Вызываем прерывание DOS
- ____main endp _____________; Конец процедуры main
- ____function proc__________; Начало процедуры function
- ________pusha______________; Загружаем содержимое регистров общего назначения в стек
- ________xor_____ax, ax_____; Обнуляем регистр ax
- ________xor_____bx, bx_____; Обнуляем регистр bx
- ________popa_______________; Востанавливаем все регистры общего назначения из стека
- ________ret________________; Возврат из процедуры
- ____function endp__________; Конец процедуры function
- code ends _________________; Конец сегмента кода
- end main __________________; Конец файла. Точкой входа указывается процедура main