ХАНДЫФАР

Освобождает стековый фрейм, установленный предыдущей инструкцией ENTER. Инструкция LEAVE копирует указатель фрейма (в регистре BP) в регистр указателя стека (SP), который освобождает пространство стека, выделенное для стекового фрейма. Старый указатель фрейма (указатель фрейма для вызывающей процедуры, который был сохранен инструкцией ENTER) затем извлекается из стека в регистр BP, восстанавливая фрейм стека вызывающей процедуры.

Инструкция RET обычно выполняется после инструкции LEAVE, чтобы вернуть управление программой вызывающей процедуре.

LEAVE - Устанавливает для SP значение BP, затем выталкивает значение BP.


  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. ________enter___4, 0________________; Создаём фрейм стека на 4 байта для двух локальных переменных
  16. ________push____ax__________________; Ложим значение регистра ax на вершину стека
  17. ________push____bx__________________; Ложим значение регистра bx на вершину стека
  18. ________mov_____word ptr[bp-2], ax__; Копируем значение регистра ax в первой локальной переменной
  19. ________mov_____word ptr[bp-4], bx__; Копируем значение регистра bx во второй локальной переменной
  20. ________mov_____cx, word ptr[bp-2]__; Копируем значение первой локальной переменной в cx
  21. ________mov_____dx, word ptr[bp-4]__; Копируем значение второй локальной переменной в dx
  22. ________pop_____bx__________________; Выталкиваем значение из верхней части стека в bx
  23. ________pop_____ax__________________; Выталкиваем значение из верхней части стека в ax
  24. ________leave_______________________; Уничтожаем фрейм стека
  25. ________ret_________________________; Возврат из процедуры
  26. ____function endp___________________; Конец процедуры function
  27. code ends __________________________; Конец сегмента кода
  28. end main ___________________________; Конец файла. Точкой входа указывается процедура main
Made on
Tilda