ejemplos modo protegido.pdf


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


Página 1...26 27 28293091

Vista previa de texto


db 10010010b
db 0
db 0
;
; Por último se inicializa un segmento para mantener la compatibilidad
; al retornar a modo real, como recomienda Intel.
;
idt:
resb 8*8
;
; En la tabla de interrupciones se dejan las primeras 8 interrupciones
; sin inicializar, por lo cual se deben tomar las suficientes
; precauciones para que éstas no sucedan.
;
irq0: dw
0
dw
08h
db
0
db
10000110b
db
0
db
0
;
; La IRQ 0 es la del timer-tick y la que se necesita para este
; ejemplo, el offset será colocado en tiempo de ejecución, ya que no
; se sabe dónde el SO colocará el código. Si se puede indicar el
; selector de código en 8. El segmento está presente, con nivel 0, se
; trata de un descriptor de sistema del tipo interrupt gate de 16 bits.
;
irq0_han:
;
; Ésta será la rutina de antención al timer-tick, la cual incrementará
el
; primer byte de la pantalla y almacenará en la variable scan code el
; valor leído desde el teclado.
;
push ds
pushad
;
; Lo primero que se debe hacer en el servicio de interrupción es guardar
; en la pila los registros que van a ser modificados, en este caso DS y
; los registros de propósitos generales. En realidad en este ejemplo no
; es necesario, ya que el programa principal no los utiliza, pero es una
; práctica recomendable.
;
mov ax,18h
mov ds,ax
mov eax,0b8000h
inc byte [eax]
;
; En estas 4 líneas se carga el selector del segmento FLAT en ds, se
; apunta a la memoria de video en modo texto, ubicada en 0b8000h en
; todos los monitores VGA color y se incrementa el primer byte.
;
mov ax,10h
mov ds,ax
;
; Luego se carga el selector del segmento imagen del de código.
;
in al,60h
mov [ds:scan_code],al
;
; Se lee el scan code y se lo almacena en la variable global.
;