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.
http://disi.unitn.it/~abeni/SO2/LinuxKernel/boot.html? – istepura