ejemplos modo protegido.pdf

Vista previa de texto
shr eax,16
mov byte [seg_cod+4],al
mov byte [seg_datos+4],al
;
; Se carga la base del GDTR.
;
mov eax,ebx
add eax,gdt
mov dword [gdtr+2],eax
lgdt [gdtr];cargo el GDTR
;
; Se guarda el IDTR de modo real en una variable y se carga el nuevo
; IDTR, no sin antes cargar la base del mismo.
;
sidt [real_idtr]
mov eax,ebx
add eax,idt
mov dword [idtr+2],eax
lidt [idtr]
;
; Luego se pasa a modo protegido.
;
cli
mov eax,cr0
or al,1
mov cr0,eax
jmp 08:modo_protegido
;
; A partir de aquí el procesador corre en modo protegido.
;
modo_protegido:
;
; Se carga el segmento de datos.
;
mov ax,10h
mov ds,ax
;
; Y se inhabilita el uso del resto de los selectores, colocándolos en
; 0, salvo la pila, porque se utilizará la de modo real.
;
mov ax,0
mov es,ax
mov fs,ax
mov gs,ax
;
; Se modificará la base de los PICs a 32 y 40.
;
picmove 32,40
;
; Se guarda el valor de la máscara del PIC de modo real y se inicializa
; la máscara a utilizar en este programa, la cual permite únicamente la
; irq0. Luego se habilitan las interrupciones.
;
in al,21h
mov [mask_real_pic1],al
mov al,011111101b
out 21h,al
;
; Se habilitan las interrupciones, en este caso la del teclado
; únicamente.
;
