ejemplos modo protegido.pdf

Vista previa de texto
mov [excepciones+excepciones_struc.registros+\
registros_struc.reg_ES],es
mov [excepciones+excepciones_struc.registros+\
registros_struc.reg_FS],fs
mov [excepciones+excepciones_struc.registros+\
registros_struc.reg_GS],gs
mov [excepciones+excepciones_struc.registros+\
registros_struc.reg_SS],ss
mov eax,[esp+2+2+2]
mov [excepciones+excepciones_struc.registros+\
registros_struc.reg_EFLAGS],eax
ret
;
; Ahora quedan por definir las variables del sistema.
;
modo_virtual_msg db 'El procesador se encuentra en modo virtual, no'
db 'se puede correr la aplicacion.$'
mask_real_pic1
db 0
real_idtr
resb 6
;
; Las primeras 3 serán: el mensaje para indicar que el micro ya se
; encuentra en modo protegido, la variable para almacenar las máscara
; del PIC y el IDTR de modo real.
;
scan_code
db
0
;
; scan_code es la variable global donde la rutina de atención de la irq0
; almacena el scancode leído del teclado, mientras el programa principal
; verifica si es igual a 1 (la tecla escape).
;
gdtr
dw 8*5-1
dd 0
;
idtr
dw 8*34-1
;0,1,2,3,4,5,6,7,8,9
dd 0
;
gdt
resb 8
;
; Se reservan 8 bytes para el descriptor nulo.
;
; Primero como descriptor 08h se realiza un segmento de código de
; 64 Kbytes sobre el de modo real.
;
seg_cod:dw 0ffffh
dw 0
db 0
db 10011010b
db 00000000b
db 0
;
; Como ya se realizaron algunas veces y debido a que no se puede
; escribir sobre el primer segmento de código definido, de define un
; segmento igual, pero de datos, será el 10h.
;
seg_datos:dw 0ffffh
dw 0
db 0
db 10010010b
db 0b
db 0
;
