ejemplos modo protegido.pdf

Vista previa de texto
; El código a partir del label modo_prot_32 se copia por arriba del mega
; a la posición os_basep (111000h). Al habilitarse la paginación, una
; vez inicializada, la posición os_base es igual a 11000h y es por eso
; que los offsets de las variables son distintos antes y después de
; habilitar e inicializar la paginación. Para solucionar esto se definen
; dos offsets por variable, el terminado en “F” hace referencia a la
; posición física de la variable y a la lineal, antes de habilitar la
; paginación, mientras que la que no tiene una “F” se refiere a al
; offset una vez habilitada la paginación y finalizada su
; inicialización.
;
; A partir de aquí comienza el programa de 32 bits.
;
inicio32:
;
; Se cargan los selectores de 32 bits en todos los selectores a usar y
; además se inicializa la pila apuntando a un sector de memoria todavía
; no decodificado por la paginación, que no se encuentra aún habilitada.
; Hasta que se decodifique se debe tener especial cuidado en no utilizar
; la pila. En caso de que se utilice por error se generará una
; excepción, a menos que el equipo cuente con 1 Gb de memoria, que es
; adonde se encuentra apuntando la pila.
;
mov ax,ds_sel_32
mov es,ax
mov ds,ax
mov ss,ax
mov esp,3ffffffch
;
; Se coloca la PDE y al PTE en el primer espacio libre de memoria, para
; lo que se utiliza la variable freememF.
;
mov eax,[freememF]
mov [PDEF],eax
add eax,1000h
mov [PTEF],eax
add dword [freememF],2000h
;
; Se colocan en cero todas las entradas de la PDE y PTE.
;
mov edi,[PDEF]
mov ecx,2048
xor eax,eax
cld
rep stosd
;
; Se inicializa el cr3 apuntando a la posición física de la PDE.
;
mov eax,[PDEF]
mov cr3,eax
;
; Se inicializa la PTE apuntando a la posición física de la PTE. Los
; bits 0, 1 y 2 indican respectivamente que la página está presente,
; es de usuario y de escritura, a eso se debe la instrucción or con
; el valor 111b como origen.
;
mov eax,[PTEF]
or al,111b
mov edi,[PDEF]
mov [edi],eax
;
