ejemplos modo protegido.pdf


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


Página 1...80 81 82838491

Vista previa de texto


;
inicio:
;
; Se habilita A20, ya que se utiliza memoria por arriba del mega, es
; necesario habilitar A20.
;
cli
mov al,0d1h
out 64h,al
mov al,0dfh
out 60h,al
;Habilita A20.
;
; Se calcula la base del cs y se almacena en ebx.
;
xor eax,eax
mov ax,cs
shl eax,4
mov ebx,eax
;
; Se carga el GDTR con la base de la gdt.
;
add eax,gdt
mov [gdtr+2],eax
lgdt [gdtr]
;
; Se inicializa la base del segmento de código y del de datos de 16
; bits.
;
mov eax,ebx
mov [cs_des_16+2],ax
mov [ds_des_16+2],ax
shr eax,16
mov [cs_des_16+4],al
mov [ds_des_16+4],al
;
; Se almacena el cs para retornar a modo real.
;
mov [real_cs],cs
;
; Se pasa a modo protegido
;
cli
mov eax,cr0
or al,1
mov cr0,eax
jmp cs_sel_16:modo_prot_16
modo_prot_16:
mov ax,ds_sel_16
mov ds,ax
mov ax,ds_sel_32
mov es,ax
;
; Se copia la gdt a gdt_basep, para lo que se apunta el ds al segmento
; de modo real y el es al flat. Luego se realiza una especie de rep
; movsb, pero en forma de loop, ya que se está copiando, en un segmento
; de 16 bits, datos de un segmento de límite de 16 bits a uno de límite
; de 32 bits. Para copiar de ds:si a es:edi no sería correcto utilizar
; rep movsd.
;
mov esi,gdt