ejemplos modo protegido.pdf

Vista previa de texto
; Se inicializan las entradas de la PTE a las posiciones físicas que
; corresponden a la gdt y al programa principal a partir de la base
; física gdt_basep.
;
mov edi,gdt_basep
shr edi,12
shl edi,2
add edi,[PTEF]
mov eax,gdt_basep
or al,111b
;
; En ecx se indica la cantidad de páginas a direccionar.
; (modo_prot_32_end-modo_prot_32+4095)/4096 son la cantidad de páginas
; utilizadas por el código, a este valor se le suma una página por la
; GDT, una por la PDE y una por la PTE.
;
; Se hace un ciclo para setear la memoria lineal con la física
; correspondiente.
;
mov ecx,(modo_prot_32_end-modo_prot_32+4095)/4096+3
init_PTE1:
mov [edi],eax
add edi,4
add eax,1000h
dec ecx
jnz init_PTE1
;
; Se habilita la paginación.
;
mov eax,cr0
or eax,80000000h
mov cr0,eax
;
; A este punto se tiene un mapa de memoria como el siguiente:
;
; <bochs:14> show "tab"
; cr3: 00112000
; 00110000 - 00110000:
110000 110000
; 00111000
:
111000 ( 111000) in TLB
; 00112000 - 00113000:
112000 113000
;
; El show “tab” es el comando de bochs para mostrar la las tablas de
; paginación. Primero indica el valor del cr3 y luego decodifica las
; direcciones lineales en físicas. El bochs, además de decodificar
; la memoria, indica qué páginas se encuentran en la TLB, por ejemplo,
; la 111000 en este caso.
;
; Se direcciona la posición lineal 0 apuntando a la GDT.
;
mov edi,[PTEF]
mov eax,gdt_basep
or al,7
mov [edi],eax
;
; Entonces queda un mapa de memoria como el siguiente:
;
; <bochs:21> show "tab"
; cr3: 00112000
; 00000000 - 00000000:
110000 110000
; 00110000
:
110000 ( 110000) in TLB
; 00111000
:
111000 ( 111000) in TLB
