LEAVE
Salida de procedimiento de alto nivel
estableVMJITAOTinstruccion
Codificaciones
| Opcode | Instruccion | Op/En | 64 bits | Compat/Legacy | Descripcion |
|---|---|---|---|---|---|
C9 | LEAVE | ZO | Valido | Valido | Establece SP a BP, luego pop BP. |
C9 | LEAVE | ZO | No codificable | Valido | Set ESP a EBP, luego pop EBP. |
C9 | LEAVE | ZO | Valido | No codificable | Set RSP a RBP, luego pop RBP. |
Coste medido
Cargando las mediciones de arch-data...
Descripción
Libera el marco de pila establecido por una instrucción ENTER anterior. La instrucción LEAVE copia el puntero del marco (en el registro EBP) en el registro el puntero de pila (ESP), que libera el espacio de la pila asignado al marco de la pila. El viejo puntero de marco (el puntero de marco para el procedimiento de llamada que fue guardado por la instrucción ENTER) se salta de la pila en el registro EBP, restaurando el marco de la pila del procedimiento de llamada.
Una instrucción RET se ejecuta comúnmente siguiendo una instrucción LEAVE para devolver el control del programa al procedimiento de llamada.
Ver "Procedimiento de llamadas para lenguajes bloqueados" en el capítulo 6 de Intel(R) 64 e IA-32 Architectures Software Developer's Manual, Volumen 1, para información detallada sobre el uso de las instrucciones ENTER y LEAVE.
En modo de 64 bits, el tamaño de operación predeterminado de la instrucción es de 64 bits; la operación de 32 bits no se puede codificar. Vea la tabla resumen al comienzo de esta sección para la codificación de datos y límites.
Operación
IF StackAddressSize = 32
THEN
ESP := EBP;
ELSE IF StackAddressSize = 64
THEN RSP := RBP; FI;
ELSE IF StackAddressSize = 16
THEN SP := BP; FI;
FI;
IF OperandSize = 32
THEN EBP := Pop();
ELSE IF OperandSize = 64
THEN RBP := Pop(); FI;
ELSE IF OperandSize = 16
THEN BP := Pop(); FI;
FI;Banderas afectadas
None.
Excepciones
Modo protegido
#SS(0) | Si el registro EBP apunta a una ubicación que no está dentro de los límites del segmento de pila actual. #PF(fault-code) Si un fallo de pagina ocurre. |
#AC(0) | Si la comprobación de alineación está habilitada y se hace una referencia de memoria no alineada mientras que el nivel de privilegio actual es 3. |
#UD | Si se utiliza el prefijo LOCK. |
Modo real
#GP | Si el registro EBP apunta a una ubicación fuera del espacio de dirección eficaz de 0 a FFFFH. |
#UD | Si se utiliza el prefijo LOCK. |
Modo virtual-8086
#GP(0) | Si el registro EBP apunta a una ubicación fuera del espacio de dirección eficaz de 0 a FFFFH. #PF(fault-code) Si un fallo de pagina ocurre. |
#AC(0) | Si la comprobación de alineación está habilitada y se hace una referencia de memoria no alineada. |
#UD | Si se utiliza el prefijo LOCK. |
Modo de compatibilidad
| Las mismas excepciones que en modo protegido. |
Modo de 64 bits
#SS(0) | Si la dirección de la pila está en forma no canónica. |
#AC(0) | Si la comprobación de alineación está habilitada y se hace una referencia de memoria no alineada mientras que el nivel de privilegio actual es 3. |
#UD | Si se utiliza el prefijo LOCK. |