CDSEG SEGMENT 'CODE'
ASSUME CS:CDSEG,DS:CDSEG
; Neue Fassung vom 23.06.2003
HP PROC
PUSH CS ; DS := CS
POP DS
MOV AH,35h ; Interruptvektor 0 lesen
MOV AL,00h
INT 21h
PUSH BX ; Interruptvektor 0 merken
PUSH ES
MOV DX,OFFSET INT0 ; Interruptvektor 0 setzen
MOV AH,25h
MOV AL,00h
INT 21h
MOV AX,0 ; Divisionsueberlauf ausloesen
MOV BX,0
MOV DX,0
DIV BX
MOV AH,09h ; Meldung ausgeben
MOV DX,OFFSET GOON
INT 21h
POP DS ; Interruptvektor 0 zuruecksetzen
POP DX
MOV AH,25h
MOV AL,00h
INT 21h
MOV AX,4C00h
INT 21h
HP ENDP
INT0 PROC FAR
STI
MOV AH,09h ; Meldung ausgeben
MOV DX,OFFSET DIV0
INT 21h
POP BX ; urspruengliche Ruecksprungadresse
ADD BX,2 ; hinter DIV-Befehl setzen
; (IP zeigt bei INT-Aufruf noch auf DIV-Befehl)
PUSH BX ; korrigierte Ruecksprungadresse
IRET
INT0 ENDP
DIV0 DB "Divisionsueberlauf",13,10,'$'
GOON DB "Programm laeuft noch ...",13,10,'$'
CDSEG ENDS
SSEG SEGMENT STACK
DW 1024 DUP (?)
SSEG ENDS
END HP