ejemplos modo protegido.pdf

Vista previa de texto
;
; Se realiza el loop, copiando así 65536 bytes.
;
mov ax,10h
mov ds,ax
;se carga nuevamente un segmento de 64 Kb.
;de límite.
;
; Se carga en el selector que se utilizó un descriptor de límite de
; 64Kbytes por compatibilidad con modo real.
;
mov eax,cr0
and al,0feh
mov cr0,eax
;se pasa a modo real.
jmp $+2
;
; Se pasa a modo real y se realiza el jmp para vaciar la cola de
; instrucciones.
;
mov ax,cs
mov ds,ax
;se recupera el segmento de modo real.
;
; El selector ds apuntaba a un descriptor de segmento de datos de base 0
; y límite de 64 Kbytes. Sin embargo su valor era de 10h, por lo cual,
; en modo real, se podría interpretar que su base es de 100h. Por eso es
; que se carga nuevamente con un valor de modo real, así se acomoda la
; base correctamente.
;
mov ah,3ch
xor cx,cx
mov dx,archivo
int 21h
;se crea el archivo.
mov bx,ax
;se guarda el handler.
;
; Se crea un archivo utilizando la función de BIOS. Al handler del mismo
; se lo deja en bx.
;
mov ax,es
mov ds,ax
mov ah,40h
mov cx,0ffffh
xor dx,dx
int 21h
;se graba el archivo.
;
; Se graba el archivo. Cómo el segmento que se estaba utilizando estaba
; en ds, se lo pasa a ds.
;
mov ah,3eh
;se cierra el archivo.
int 21h
;
; Se cierra el archivo.
;
sti
mov ah,4ch
int 21h
;
; Se habilitan las interrupciones y se vuelve al DOS.
;
fin:
;
; Éste es label que se utiliza para conocer la ubicación del final del
; código.
