ХАНДЫФАР

Восстанавливает все регистры общего назначения из стека. Эта инструкция поддерживается начиная с архитектуры 186 и 286C.

POPA - Восстанавливает все регистры общего назначения из стека.


Восстанавливает из стека в регистры общего назначения. Регистры загружаются в следующем порядке: DI, SI, BP, BX, DX, CX и AX. Значение в стеке для регистра SP игнорируется. Вместо этого после загрузки каждого регистра, регистр SP увеличивается на единицу.

В следующем примере мы напишем функцию которая внутри себя изменяет состояние регистров ax и bx. После выхода из функции изначальное значение регистров будет восстановлено.

  1. title Автор: Довгополов Евгений Сергеевич
  2. .286C
  3. .model small
  4. .stack 100h
  5. code segment public _______; Начало сегмента кода
  6. ____assume cs:code
  7. ____main proc _____________; Начало процедуры main
  8. ________mov_____ax, 10_____; Копируем значение 10 в регистр ax
  9. ________mov_____bx, 20_____; Копируем значение 20 в регистр bx
  10. ________call____function___; Вызываем процедуру function
  11. ________mov_____ax, 4C00h__; Копируем значение функции завершения процесса в ah а значение в al
  12. ________int_____21h _______; Вызываем прерывание DOS
  13. ____main endp _____________; Конец процедуры main
  14. ____function proc__________; Начало процедуры function
  15. ________pusha______________; Загружаем содержимое регистров общего назначения в стек
  16. ________xor_____ax, ax_____; Обнуляем регистр ax
  17. ________xor_____bx, bx_____; Обнуляем регистр bx
  18. ________popa_______________; Востанавливаем все регистры общего назначения из стека
  19. ________ret________________; Возврат из процедуры
  20. ____function endp__________; Конец процедуры function
  21. code ends _________________; Конец сегмента кода
  22. end main __________________; Конец файла. Точкой входа указывается процедура main
Made on
Tilda