nxos/EXCEPT.ASM
2014-01-27 10:02:18 +01:00

117 lines
2.3 KiB
NASM
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

;NXOS
;--------
;Written by: Alberto Venturini (Alb) - 2001
;Email address: -albe-@libero.it
;
;NXOS exception handlers
;------------------------------------------------------------------------------
InstallExceptionHandlers:
push ax
push es
xor ax,ax
mov es,ax
mov ax,offset Int00h
mov word ptr es:[0000h],ax
mov ax,cs
mov word ptr es:[0000h+2],ax
mov ax,offset Int06h
mov word ptr es:[0006h*4],ax
mov ax,cs
mov word ptr es:[0006h*4+2],ax
mov ax,offset Int07h
mov word ptr es:[0007h*4],ax
mov ax,cs
mov word ptr es:[0007h*4+2],ax
pop es
pop ax
ret
;-----------------------------------------------------------------------------
Int00h:
;L'interrupt 00h Š invocato quando si verifica una divisione per 0
;(quando il divisore di DIV o IDIV Š 0)
;Questa routine termina il processo che ha provocato l'errore.
cli
push cs
pop ds
mov si,offset Int00hMsg
jmp TerminateProcess
;-----------------------------------------------------------------------------
Int06h:
;L'int 06h si verifica quando c'Š un'istruzione non valida.
;Termina il processo che ha provocato l'errore
cli
push cs
pop ds
mov si,offset Int06hMsg
jmp TerminateProcess
;-----------------------------------------------------------------------------
Int07h:
;L'int 07h viene generato quando c'Š un'istruzione di un coprocessore
;che per• non Š presente.
;Termina il processo che ha provocato l'errore.
cli
push cs
pop ds
mov si,offset Int07hMsg
jmp TerminateProcess
;-----------------------------------------------------------------------------
TerminateProcess:
;input SI --> offset del messaggio di errore da visualizzare
push si
mov ah,03h
int 20h
mov ah,04h
int 24h
mov si,offset GeneralErrorMsg
mov ah,01h
mov bl,7
int 24h
pop si
int 24h
mov si,offset TerminateProcessMsg
int 24h
mov ah,00h
int 25h
mov ah,02h
mov bl,0
int 20h
;-----------------------------------------------------------------------------
GeneralErrorMsg db 13,10,'Fatal error:',0
Int00hMsg db ' division by zero (int 00h).',13,10,0
Int06hMsg db ' invalid opcode (int 06h).',13,10,0
Int07hMsg db ' processor extension not avaliable (int 07h).',13,10,0
TerminateProcessMsg db 'The process will be terminated.',13,10,0