ejemplos modo protegido.pdf

Vista previa de texto
org 100h
;
jmp inicio
;
gdtr
dw 7*8-1
dd 0
;
;
gdt
resb 8
;
; 08h Segmento de código de 64 Kb sobre el de modo real.
;
%define code_sel
08h
seg_code:dw 0ffffh
dw 0
db 0
db 10011010b
db 0
db 0
;
; 10h Segmento de datos de 64 Kb sobre el de modo real.
;
%define data_sel
10h
seg_data:dw 0ffffh
dw 0
db 0
db 10010010b
db 0b
db 0
;
; 18h Segmento de datos flat.
;
%define flat_sel
18h
seg_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
;
; Aquí comienzan las diferencias con los programas anteriores. Debido a
; que se desea hacer un programa con 2 aplicaciones, se necesitan 2 TSS.
; Además se necesita un selector de TSS cargado en TR antes de realizar
; el primer salto de tarea, por lo que se definen 3 TSS. Uno no se usará
; más que para realizar el primer salto y se lo denominará TSS_inicial.
; Los otros dos serán los TSS de las 2 aplicaciones, TSS superior e
; inferior, según en qué parte de la pantalla muestren, las respectivas
; aplicaciones, el contador. Al largo se lo define en 68h-1, o sea, 103
; bytes, que es el mínimo largo que pueden tener. En los 3 casos se
; apunta al desplazamiento de los TSS dentro del segmento de códigos.
; Sin embargo, este desplazamiento se debe corregir, ya que el campo
; deberá indicar la dirección lineal del TSS.
;
%define tss_inicial
20h
tss1:
dw
67h
dw
TSS_inicial_struc
db
0
db
10001001b
db
00000000b
db
0
;
