操作碼 |
指令 |
說明 |
C9 |
LEAVE |
將 SP 設定為 BP,然後彈出 BP |
C9 |
LEAVE |
將 ESP 設定為 EBP,然後彈出 EBP |
釋放早先的 ENTER 指令設定的堆疊幀。LEAVE 指令將幀指針(在 EBP 暫存器中)複製到堆疊指針暫存器 (ESP),從而釋放分配給堆疊幀的堆疊空間。然後,舊的幀指針(由 ENTER 指令儲存的呼叫過程的幀指針)從堆疊彈入 EBP 暫存器,從而恢復呼叫過程的堆疊幀。
LEAVE 指令後面通常執行 RET 指令,以便將程序控制權返回給呼叫過程。
如需有關使用 ENTER 與 LEAVE 指令的詳細資訊,請參閱“IA-32 英特爾® 體系結構軟件開發人員手冊”第 1 卷第 5 章中的“塊結構語言的過程呼叫”。
IF StackAddressSize 32
THEN
ESP EBP;
ELSE (* StackAddressSize 16*)
SP BP;
FI;
IF OperandSize 32
THEN
EBP Pop();
ELSE (* OperandSize 16*)
BP Pop();
FI;
無。
#SS(0) - 如果 EBP 暫存器指向的位置超出目前堆疊段的限制。
#PF(錯誤程式碼) - 如果發生頁錯誤。
#AC(0) - 如果啟用對齊檢查並在目前特權級別為 3 時進行未對齊的記憶體引用。
#GP - 如果 EBP 暫存器指向的位置出現在 0 到 0FFFFH 的有效地址空間之外。
#GP(0) - 如果 EBP 暫存器指向的位置出現在 0 到 0FFFFH 的有效地址空間之外。
#PF(錯誤程式碼) - 如果發生頁錯誤。
#AC(0) - 如果在啟用對齊檢查的情況下進行未對齊的記憶體引用。