ejemplos modo protegido.pdf


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


Página 1...37 38 39404191

Vista previa de texto


;
; Se imprime SS.
;
mov edi,160*4+100
mov eax,[excepciones+excepciones_struc.registros+\
registros_struc.reg_SS]
call mostrar_valor
mov esi,ss_msg
mov edi,160*4+100
call mostrar_cadena
;
; Se imprimen los EFLAGS.
;
mov edi,160*5+2+14
mov eax,[excepciones+excepciones_struc.registros+\
registros_struc.reg_EFLAGS]
call mostrar_valor
mov esi,eflags_msg
mov edi,160*5+2
call mostrar_cadena
;
; Por último se imprime el error code, en caso de existir alguno.
;
cmp byte [excepciones+excepciones_struc.errorcode?],1
jne no_errorcode
mov edi,160*6+2+12
mov eax,[excepciones+excepciones_struc.errorcode]
call mostrar_valor
mov esi,errorcode_msg
mov edi,160*6+2
call mostrar_cadena
no_errorcode:
;
; Se recuperan los valores de los registros y se retorna.
;
popad
pop ds
ret
;
; Esta función es la encargada de mostrar una cadena en la pantalla,
; para ello debe recibir en ds:esi la cadena finalizada en NULL, y en
; edi la posición dentro de la pantalla.
;
mostrar_cadena:
;
; Antes que nada se guardan todos los registros que se van a utilizar y
; se carga el segmento necesario, que en este caso es el flat, para
; poder acceder a la memoria de video.
;
pushad
push es
mov bx,18h
mov es,bx
;
; Se verifica que la dirección a imprimir sea par y menor a 4096. Luego
; se suma el desplazamiento, para que apunte a la memoria de video.
;
and edi,0FFEh
add edi,0b8000h
;
; Se hará un loop para imprimir en la pantalla. Se leen los caracteres