Pregunta

Este es el Código Snipper del archivo Header.s en el código del núcleo. No pude entender lo que el lretw La instrucción sí. He revisado muchas fuentes en línea para obtener la instrucción.

# We will have entered with %cs = %ds+0x20, normalize %cs so
# it is on par with the other segments.
        pushw   %ds 
        pushw   $6f 
        lretw

¿Alguien puede ayudarme a comprender esta instrucción?

¿Fue útil?

Solución

ret es la instrucción de regresar de un procedimiento. Entonces, básicamente, aparece la dirección de retorno de la pila al registro EIP.

la l El prefijo está aquí para decir que es un lejos regresar del procedimiento. En este caso, la instrucción primero produce un valor de la pila en el registro EIP y luego aparece un segundo valor en el registro CS.

la w El sufijo está aquí porque en este paso estamos ejecutando en modo real, y los operandos tienen 16 bits de ancho.

El código exacto es:

    pushw   %ds
    pushw   $6f
    lretw
6:

los 6: es muy importante aquí. Entonces, lo que esto hace es: empujar el valor de DS a la pila, empujar la dirección del 6 etiquetar en la pila y luego activar esto lretw instrucción. Entonces, básicamente, cargará la dirección de la etiqueta 6 en el registro del puntero de instrucciones y cargue el cs Regístrese con el valor del ds Registrarse. Así que esto es solo un truco para continuar la ejecución en la etiqueta 6 con un cambio de la cs Registro de valor.

Deberías descargar http://www.intel.com/design/intarch/manuals/243191.htm Lo que proporciona detalles precisos para todas las instrucciones, incluido un pseudocódigo que detalla lo que está haciendo cada instrucción.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top