2011-09-08 16 views
5

Este es código snipper del archivo header.S en código kernel. No pude entender lo que hace la instrucción lretw. He revisado tantas fuentes en línea para la instrucción.ayuda para comprender este fragmento de código

# 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 me puede ayudar a entender esta instrucción?

+0

http://disi.unitn.it/~abeni/SO2/LinuxKernel/boot.html? – istepura

Respuesta

5

ret es la instrucción para regresar de un procedimiento. Así que básicamente aparece la dirección de retorno de la pila en el registro EIP.

el prefijo l está aquí para indicar que es un ahora regreso del procedimiento. En este caso, la instrucción primero muestra un valor de la pila en el registro EIP y luego coloca un segundo valor en el registro CS.

el sufijo w 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: 

El 6: es muy importante aquí. Entonces, lo que hace es: insertar el valor de ds en la pila, insertar la dirección de la etiqueta 6 en la pila y luego activar esta instrucción lretw. Así que, básicamente, cargará la dirección de la etiqueta 6 en el registro de puntero de instrucción y cargará el registro cs con el valor del registro ds. Así que esto es solo un truco para continuar la ejecución en la etiqueta 6 con un cambio del valor de registro cs.

Debe descargar http://www.intel.com/design/intarch/manuals/243191.htm que proporciona detalles precisos para todas las instrucciones, incluido un pseudo-código que detalla lo que hace cada instrucción.

+0

miré en este manual ... pero no pude encontrar la instrucción específica. puede ser que no estaba muy claro .. realmente eres increíble gracias por la explicación clara .. me gustó .. –

+0

por cierto, ¿qué significa el comentario cuando dice normalizar% cs ... gracias por ayudarme . –

+0

¿por qué es $ 6f? doesnt $ 6f valor absoluto medio de 6 .. y ¿qué hace el sufijo f? lo siento por la corriente de preguntas. –

Cuestiones relacionadas