ejemplos modo protegido.pdf


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


Página 1...43 44 45464791

Vista previa de texto


; parámetros la base de ambos PIC. Para modificar la base del PIC
; se deben enviar las 4 palabras de configuración (queda al lector
; estudiar qué hace cada una de ellas).
;
%macro picmove 2
pushfd
cli
mov al,11h
out 20h,al
;ICW1
mov al,%1
out 21h,al
;ICW2
mov al,04h
out 21h,al
;ICW3
mov al,01h
out 21h,al
;ICW4
mov al,11h
out 0a0h,al
;ICW1
mov al,%2
out 0a1h,al
;ICW2
mov al,02h
out 0a1h,al
;ICW3
mov al,1
out 0a1h,al
;ICW4
popfd
%endmacro
;
; De aquí en más se trata de un programa típico de modo protegido, con
; alguna salvedad, por ejemplo la generación de la excepción, pero ya
; se llegará a eso.
;
inicio:
;
; Se verifica si se está en modo real. En caso contrario se imprime el
; mensaje y se retorna.
;
smsw ax
test al,1
jz en_modo_real
mov ah,09h
mov dx,modo_virtual_msg
int 21h
mov ah,4ch
int 21h
en_modo_real:
;
; Ya que se cambiará de segmento de código al pasar a modo protegido,
; para poder retornar se debe almacenar el de modo real. Por ello es que
; se almacena el segmento de código de modo real en la variable real_cs.
;
mov ax,cs
mov [real_cs],ax
;
; Se carga la base del code segment, como también del segmento de datos.
;
xor eax,eax
;carga eax en cero
mov ax,cs
;carga el cs en eax
shl eax,4
;en eax=base lineal de cs
mov ebx,eax
;se guarda en ebx
mov word [seg_cod+2],ax
mov word [seg_datos+2],ax