ejemplos modo protegido.pdf


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


Página 1...19 20 21222391

Vista previa de texto


; base se calcula CSx16+gdt:.
;
gdt:
resb 8
;
; A partir de aquí comienza la GDT. Se puede observar que la primera
; entrada se deja en blanco. La razón es que el micro NO UTILIZA el
; primer descriptor de la GDT, el cual se denomina descriptor NULO y
; puede ser referenciado por cualquier selector, con el fin de colocar
; los selectores no utilizados en algún valor.
;
;--- 08h Segmento de datos flat
dw 0ffffh
;límite 15.00
dw 00000h
;base 15.00
db 000h
;base 23.16
db 10010010b
;Presente Segmento Datos Read Write
db 10001111b
;G y limite 0Fh
db 00h
;base 31.24
;
; Para inicializar el segmento se debe conocer la base y el límite que
; dependen de lo que se quiere hacer. En este caso se coloca la base en
; 0 y el límite de 4Gb, el BIOS también se podría leer colocando la base
; en FFFF0000h y el límite en 0FFFFh. Un segmento que tiene base en 0 y
; límite 4Gb se denomina FLAT.
;
; Como el límite es mayor que el Mbyte, se debe setear la granularidad,
; entonces se expresa en unidades de 4 Kbytes: 4 Gb/4 Kbytes-1, o sea,
; 0FFFFFh. Donde justamente los 20 bits del límite están seteados. Es
; por esto que en el primer word los bits 15:0 del límite están
seteados.
; La base es 0. Luego se indica el tipo de segmento (de datos, de
; lectura o de escritura). Es indistinto como se setea el bit accedido.
; Este es automáticamente colocado en 1 por hard cada vez que se utiliza
; el descriptor. Así el SO puede llevar un control de cuánto se utiliza
; cada descriptor. Colocando en cero este bit periódicamente sabrá
; aproximadamente cada cuánto tiempo es accedido. El objetivo final es
; saber cuál es el segmento más indicado para enviar a memoria virtual.
; En el último byte se deben colocar la granularidad en 1 y el resto del
; límite también. El 8º byte, se coloca cero, que representa la parte
; alta de la base del segmento.
;
;--- 10h Segmento de datos de 64 Kb
dw 0ffffh
dw 0
db 0
db 10010010b
db 0
db 0
;
; El segundo descriptor se utiliza para mantener compatibilidad con
; el modo real. En modo real el límite es de 65535 bytes, por lo que es
; recomendable que, antes de retornar a modo real, todos los límites
; estén en este valor.
;
; En este descriptor el límite es de 0FFFFh (64 Kbytes). La base, al no
; ser conocida (ya que depende de dónde el DOS cargue el programa), se
; deja en blanco, para completarla en tiempo de ejecución con 16 veces
; el valor indicado por CS más lo que ocupe el código.
;
inicio:
mov al,0d1h
out 64h,al