ejemplos modo protegido.pdf

Vista previa de texto
;
;
;
;
;
Se debe RECORDAR eliminar estas líneas cuando se desee correr sobre la
la PC real, ya que el programa se bloqueará indefinidamente hasta una
interrupción o, en el caso en que estén inhabilitadas, hasta que se
reinicie la PC.
cli
;
;
;
;
;
;
En modo protegido la tabla de interrupciones se maneja de forma
distinta e incompatible con la de modo real, por lo que se deben
inhabilitar las interrupciones hasta conocer y entender el mecanismo
de interrupciones (ver ej03.asm).
mov eax,cr0
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;lee el registro de control 0.
El bit PE es el bit 0 del cr0. Para mantener el resto de los bits
inalterados, antes de modificar el registro, se lee su contenido y
se setea únicamente el bit deseado. Las formas de acceder al bit PE
son:
mov cr0,exx y mov exx,cr0
lmsw reg16 y smsw reg16
A diferencia del mov al registro cr0, el segundo grupo de
instrucciones sólo accede a la parte baja del cr0 (el cual en el
80286 se denomina Machine Status Word). Por otro lado, las
instrucciones mov del cr0 no se pueden correr estando en modo
protegido en los niveles NO privilegiados, en los que se corre, por
ejemplo, el programa en una ventana bajo Windows. Por lo tanto, para
saber si el procesador se encuentra ya en modo protegido, se debe
utilizar smsw. En este ejercicio se lee directamente del cr0, por lo
que el programa se cerrará si el procesador se encuentra en modo
protegido. En ejemplos posteriores se utilizará la instrucción smsw
para indicar en la pantalla, mediante un mensaje, si el procesador se
encuentra en modo protegido.
or al,1
;setea el bit PE Protection Enable.
;
; Se coloca el bit correspondiente en 1.
;
mov cr0,eax
;pasa a modo protegido.
;
; Se pasa a modo protegido.
;
jmp short $+2
;vacía la cola de ejecución.
;
; Intel recomienda vaciar la cola de ejecución al entrar y salir de modo
; protegido. Si bien es posible que el programa funcione a pesar de no
; hacerlo, Intel no lo puede asegurar.
;
mp:in al,60h
;lee el scan-code del teclado.
;
; Se lee el contenido del puerto 60h, o sea, el scan-code del teclado.
;
dec al
;compara con esc.
;
; Se decrementa el scan-code para compararlo con 0, por ser esto más
; simple que comparar con uno.
;
jnz mp
;si es esc, se retorna a modo real.
;
; Si el scan-code leído del puerto 60h es distinto de 1, significa que
