ejemplos modo protegido.pdf


Vista previa del archivo PDF ejemplos-modo-protegido.pdf


Página 1...24 25 26272891

Vista previa de texto


;
; La primera de ellas carga en IDTR el valor del puntero, mientras
; que SIDT lee el contenido del IDTR y lo coloca en la dirección del
; puntero.
;
use16
org 100h
comienzo:jmp inicio
modo_virtual_msg

db

'El procesador se encuentra en modo virtual, no'
'se puede correr la aplicación.$'

;
; El texto anterior servirá de mensaje de error cuando se ejecute el
; programa estando en modo virtual.
;
mask_real_pic1
db 0
;
; Se almacenará el valor de la máscara de interrupciones del PIC
; (Programable Interrupt Controler) en modo real, para poder restaurar
; al regresar. Se debe tener en cuenta que el programa no utilizará
; todas las interrupciones, y una forma prolija para habilitar algunas y
; otras no, es mediante el PIC.
;
real_idtr
resb 6
;
; Estos 6 bytes son para almacenar el valor del IDTR de modo real. En
; los x86 no existía este registro, sin embargo, a partir del x286, el
; mismo indica dónde se encuentra la IDT, tanto en modo protegido como
; en MODO REAL. Por eso es importante, antes de modificar el contenido
; del IDTR, guardar una copia para poder recuperar al volver a modo
; real.
;
scan_code
db
0
;
; Ésta será la variable global que almacenará el último scan-code.
;
gdtr:
dw 8*5-1
dd 0
;
; Puntero utilizado para cargar el GDTR. La base será calculada en
; tiempo de ejecución, ya que depende de donde cargue el SO el
; programa, mientras que el límite puede ya ser impuesto en 5
; descriptores (4, ya que el primero es el NULO y no se utiliza).
;
idtr
dw 8*10-1
dd 0
;
; Este puntero será el utilizado para cargar el IDTR. Al igual que con
; el GDTR la base será cargada en tiempo de ejecución, mientras que el
; límite será de 10 descriptores, ya que se necesita manejar la
; interrupción 9.
;
gdt
resb 8
;
; Se deja la primera entrada libre, ya que se trata del descriptor NULO.
;
;--- 08h Segmento de código de 64 Kb sobre el de modo real --seg_cod:dw 0ffffh
;Límite 15:0
dw 0
;Base 15:0
db 0
;Base 23:16
db 10011010b
;P PL #S Tipo