ejemplos modo protegido.pdf

Vista previa de texto
; Se define la estructura del TSS.
;
struc tss_structure
.reg_PTL
resw 1
resw 1
.reg_ESP0
resd 1
.reg_SS0
resw 1
resw 1
.reg_ESP1
resd 1
.reg_SS1
resw 1
resw 1
.reg_ESP2
resd 1
.reg_SS2
resw 1
resw 1
.reg_CR3
resd 1
.reg_EIP
resd 1
.reg_EFLAGS
resd 1
.reg_EAX
resd 1
.reg_ECX
resd 1
.reg_EDX
resd 1
.reg_EBX
resd 1
.reg_ESP
resd 1
.reg_EBP
resd 1
.reg_ESI
resd 1
.reg_EDI
resd 1
.reg_ES
resw 1
resw 1
.reg_CS
resw 1
resw 1
.reg_SS
resw 1
resw 1
.reg_DS
resw 1
resw 1
.reg_FS
resw 1
resw 1
.reg_GS
resw 1
resw 1
.reg_LDT
resw 1
.reg_T
resw 1
.reg_IOMAP
resw 1
.IOMAP
resd 1
endstruc
;
; Para definir la base de las pilas se utiliza el label fin, que se
; encuentra al final del código, de modo que una pila se encontrará
; desde el final del código hasta 255 bytes y la otra a partir de 256
; bytes pasando el código y hasta 512.
;
%define pila_0
fin
%define pila_3
fin+256
;
; Para la TSS inicial no se define ningún contenido, ya que se la
; necesita únicamente para cambiar de nivel de privilegio, pasando, de
; esta forma, con el salto de tarea de nivel 0 a 3.
;
tss_in_struc:
resb tss_structure_size
;
; La segunda y en realidad única tarea, tendrá definidos sus registros
; de pila en 252, ya que es múltiplo de 4, y sus segmentos serán los
; definidos en la GDT, el EIP estará en 0, los EFLAGS en cero, por ende
; las interrupciones inhabilitadas y el IOPL en 0, el selector de datos
