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