ejemplos modo protegido.pdf

Vista previa de texto
;
bajando:
;
; Ahora habrá que borrar las entradas que ya no se utilizarán, para
; dejar un diagrama de memoria prolijo. Se borran todas las entradas
; superiores al mega.
;
mov edi,gdt_basep
shr edi,12
shl edi,2
add edi,[PTE]
xor eax,eax
mov ecx,(modo_prot_32_end-modo_prot_32+4095)/4096+2+1
rep stosd
;
; Queda un diagrama de memoria incorrecto, ya que algunas páginas se
; encontraban en la TLB y, al borrarlas de la PDE, no se borran
; automáticamente de la PDE. Es necesario flushear la TLB cargando
; nuevamente el cr3.
;
mov eax,cr3
mov cr3,eax
;
; Ahora el diagrama de memoria es:
;
; <bochs:59> show "tab"
; cr3: 00112000
; 00000000 - 00000000:
110000 110000
; 00011000 - 00013000:
111000 113000
;
; En este punto, sólo falta inicializar la pila, que se encuentra
; apuntando a 3fffffff, direcciones lineales que no existen.
;
; Primero se debe generar una PTE que pueda direccionar esa memoria.
;
mov edi,3ffff000h
shr edi,22
shl edi,2
add edi,[PDE]
mov eax,[freemem]
or eax,7
mov [edi],eax
add dword [freemem],1000h
;
; Esta nueva página de memoria (PTE) se debe poder direccionar en
; espacio lineal para poder acceder a ella.
;
mov edi,3ffff000h
shr edi,12
shl edi,2
add edi,[PTE]
shr edi,12
shl edi,2
add edi,[PTE]
mov [edi],eax
;
; Se inicializa toda la PTE en 0.
;
mov edi,3ffff000h
shr edi,12
shl edi,2
