Система команд x86 |
|
Программирование - Архитектура и система команд микропроцессоров x86 |
LEAVE
Влияние команды на флаги и форматы команды:
|
|
|
|
|
|
|
|
|
C9 |
LEAVE |
Загрузить в SP значение из BP и считать из нового стека BP |
Intel286 |
leave |
C9 |
LEAVE |
Загрузить в ESP значение из EBP и считать из нового стека EBP |
Intel386 |
leave |
Описание:
Команда LEAVE производит действия обратные команде ENTER. Копируя указатель кадра eBP в указатель стека, команда LEAVE освобождает пространство стека, использовавшееся для локальных переменных в завершающейся процедуре. Новый указатель кадра выбирается из стека в регистр BP или EBP, восстанавливая кадр вызвавшей процедуры. Последующая команда RET передает управление вызвавшей процедуре.
Операция:
IF StackAddress = 16
THEN SP = BP;
ELSE (* StackAddrSize = 32 *)
ESP = EBP;
FI;
IF OperandSize = 32
THEN BP = Pop();
ELSE (* OperandSize = 32 *)
EBP = Pop();
FI;
Особые ситуации защищенного режима:
#SS(0), если регистр EBP не указывает на местоположение внутри пределов текущего сегмента стека.
#PF(Код ошибки) при страничной ошибке.
#AC(0) при невыровненной ссылке в память при текущем уровне привилегий равном 3.
Особые ситуации режима реальной адресации:
#GP, если регистр BP не указывает на местоположение внутри пространства эффективных адресов от 0 до 0FFFFh.
Особые ситуации режима V86:
То же, что и в режиме реальной адресации.
#PF(Код ошибки) при страничной ошибке.
#AC(0) при невыровненной ссылке в память.
Все права защищены © Алексей Ровдо, 1994-2023. Перепечатка возможна только по согласованию с владельцем авторских прав. admin@club155.ru