ejemplos modo protegido.pdf


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


Página 1...73 74 75767791

Vista previa de texto


db
0
gdt_end:
;
; Para dejar más prolijo el programa principal, se define un macro con:
;
; %macro el_nombre cantidad_de_parametros
;
; El primer parámetro es el nombre del macro y el segundo la cantidad
; de parámetros que recibe. Para llamar a un macro de 1 o más
; parámetros se hace:
;
; el_nombre %1, %2
;
; Para finalizar el macro se utiliza la sentencia:
;
; %endmacro.
;
; Si se desean utilizar labels dentro del macro para saltos se debe
; usar, por ejemplo:
;
; %%pepe:
;
; De esta forma el macro puede ser colocado en varias partes del
; programa, y en el momento de compilación se cambiarán los %% por
; valores .00pepe, luego .01pepe, etcétera, para que en el linkeo no se
: encuentren duplicados los labels.
;
%macro
init_gdt 0
xor eax,eax
mov ax,cs
shl eax,4
lea ecx,[eax+4096+4095]
and ecx,0FFFFF000h
mov ebx,gdt
mov [ebx+cs_16_selector+2],ax
mov [ebx+ds_16_selector+2],ax
mov [ebx+ss_32_selector+2],cx
ror eax,16
ror ecx,16
mov [ebx+cs_16_selector+4],al
mov [ebx+cs_16_selector+7],ah
mov [ebx+ds_16_selector+4],al
mov [ebx+ds_16_selector+7],ah
mov [ebx+ss_32_selector+4],cl
mov [ebx+ss_32_selector+7],ch
rol eax,16
add eax,gdt
mov [gdtr+2],eax
lgdt [gdtr]
;carga la GDT
clc
;no puede fallar
%endmacro
;
; Se comienza el programa principal.
;
inicio:
;
; Se inicializa la GDT mediante el MACRO correspondiente.
;
init_gdt
;
; Se guarda el cs para retornar a modo real.