ejemplos modo protegido.pdf

Vista previa de texto
and
add
mov
cld
xor
rep
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
edi,0fffff000h
edi,[PTE]
ecx,1024
eax,eax
stosd
Se tiene un mapa de memoria como el siguiente:
<bochs:11> show "tab"
cr3: 00112000
00000000 - 00000000:
00011000
:
00012000
:
00013000
:
00112000
:
110000
111000
112000
113000
114000
(
(
(
(
110000
111000)
112000)
113000)
114000)
in
in
in
in
TLB
TLB
TLB
TLB
De esta forma, a la PTE de la pila se la direcciona mediante
la página ubicada a partir de 112000 lineal.
Se inicializa la PTE con el puntero a la PILA.
mov eax,[freemem]
or al,7
add dword [freemem],1000h
mov edi,3ffff000h
shr edi,12
shl edi,2
add edi,[PTE]
mov [edi],eax
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
Finalmente el mapa de memoria resulta:
<bochs:24> show "tab"
cr3: 00112000
00000000 - 00000000:
00011000
:
00012000
:
00013000
:
00112000
:
3ffff000 - 3ffff000:
110000
111000
112000
113000
114000
115000
(
(
(
(
-
110000
111000)
112000)
113000)
114000)
115000
in
in
in
in
TLB
TLB
TLB
TLB
Falta inicializar la gdt en su nueva posición de base lineal 0,
para lo que se utiliza la pila.
push gdt_base
sub esp,2
mov word [esp],gdt_end-gdt-1
lgdt [esp]
add esp,6
;
;
;
;
;
;
;
;
;
Hasta aquí se realizó el proceso de inicialización de un programa
con paginación. Si se lo desea continuar, aquí es donde se debe
agregar código. Este ejemplo termina aquí, sólo continúa con el
procedimiento para retornar a modo real. Se debe inhabilitar la
paginación, lo cual se debe hacer desde una dirección lineal que
físicamente tenga el mismo valor. Por eso se vuelve a armar la misma
estructura de memoria que existía anteriormente.
mov edi,gdt_basep
shr edi,12
