ejemplos modo protegido.pdf

Vista previa de texto
; un NULL y mostrar_valor, que imprime un eax en hexadecimal.
;
mostrar_reg:
;
; Claramente se borra la pantalla, más adelante está la función.
;
call clrscr
;
; Se guarda el estado de los registros y el DS. En el DS se carga el
; segmento solapado con el código.
;
push ds
pushad
mov ax,10h
mov ds,ax
;
; Se imprime en pantalla la cadena de EIP, vale aclarar que ds:esi es la
; posición de la cadena a imprimir, la cual debe finalizar con NULL y
; que la posición en la pantalla es expresada en edi.
;
mov esi,eip_msg
mov edi,2+80*2
call mostrar_cadena
;
; Luego se carga el valor de eip en eax y se lo muestra en la posición
; indicada por edi.
;
mov edi,10+80*2
mov eax, [excepciones\
+excepciones_struc.registros+registros_struc.reg_EIP]
call mostrar_valor
;
; La forma de direccionar las estructuras es algo complejo en nasm. Las
; estructuras se manejan como desplazamientos, de modo que se deben
; realizar simples sumas de desplazamientos para indicar al procesador
; dónde se encuentra el valor del EIP, registro que se desea imprimir.
; "excepciones" indica el offset dentro del segmento de datos donde
; comienza la estructura. Luego, "excepciones_struc.registros" indica
; dónde comienza la estructura de registros dentro del la estructura
; excepciones. Por último "registros_struc.reg_EIP" indica dónde se
; encuentra el EIP, dentro de la estructura registros, dentro de la
; estructura excepciones.
;
; Se imprime la excepción y su mensaje correspondiente.
;
mov esi,excepcion_msg
mov edi,70
call mostrar_cadena
mov edi,90
mov eax,[excepciones+excepciones_struc.excepcion]
call mostrar_valor
;
; Se imprime EAX.
;
mov esi,eax_msg
mov edi,2+160*2
call mostrar_cadena
mov edi,2+160*2+8
mov eax,[excepciones+excepciones_struc.registros+\
registros_struc.reg_EAX]
