修改int 0中断后,用iret返回会进入死循环是怎么回事呢?
我尝试修改了int 0中断的处理例程,如果用iret做返回的话,则程序会不断打印“div error!”,请问是怎么回事 呢?
测试程序如下:
assume cs:code
code segment
start:
int 0
code ends
end start
修改int 0中断的代码如下:
assume cs:code
code segment
start:
mov ax,cs
mov ds,ax
mov si, offset do0
mov ax,0
mov es,ax
mov di,200h
mov cx, offset do0end - offset do0
cld
rep movsb
;设置中断向量表
mov ax,0
mov ds,ax
mov word ptr ds:[0], 200h
mov word ptr ds:[2], 0h
mov ax,4c00h
int 21h
;以下是新的int 0中断例程
do0:jmp short do0Start
msg:db "div error!$"
do0Start:
mov ax,cs
mov ds,ax
mov dx, 202h
mov ah, 09h
int 21
iret ;如果这儿用mov ax,4c00, int 21h是没有问题的。
do0end:
nop
code ends
end start