关于DIV溢出
CPU是如何得知DIV中断的,中断时会对PSW寄存器状态有影响吗?以下是我写的一个DIV中断安装程序
assume cs:code
code segment
start: mov ax,cs
mov ds,ax
mov si,offset r0
mov ax,0
mov es,ax
mov di,0200H
mov cx,offset r0_end - offset r0
cld
rep movsb
mov ax,0
mov es,ax
mov word ptr es:[0],0200H
mov word ptr es:[2],0
mov ax,4c00H
int 21H
r0: jmp short r0_st
db "divide error!"
db 0
r0_st: mov ax,cs
mov ds,ax
mov si,0202H
mov ax,0B800H
mov es,ax
mov di,12*160+36*2
show: mov cl,[si]
mov ch,00H
jcxz show_en
mov es:[di],cx
inc di
mov cx,01000010B
mov es:[di],cx
inc di
inc si
jmp short show
show_en: iret
r0_end: nop
code ends
end start
我把此中断程序放在0000:0200处,如果产生DIV中断,则会执行此中断程序,程序执行完后用 iret 返回。
但是实际情况却是一直在执行此中断程序,无法结束。我认为用 iret 时已经返回了调用些中断的程序,但是返回后又执行了此中断程序,所以此中断程序会一直执行下去。对此很不解,请高手指点。谢谢!