中断00h比较麻烦,因为是硬中断,int00h中断返回是原地址,也就是:
div bl 产生00中断后,系统会回到这条div bl上,会再来一次div dl, 再触发0中断,也就是无限回圈. 不同的dos版本或dosbox会有不同处理,通常是强行关闭程式,返回dos.
所以,写0中断,要如何跳过原除法指令就是麻烦之处, 办法之一是再拦截单步中断.然后0中断返回时触发单步,令我们的单步中断取得除法指令下一条指令的地址,再强行返回原程式.
当然,也可以把问题简单化, 就像楼主的程式,直接返回dos.(反正都除法错误了, 基本代码已有问题, 再运行下去都没意思)
另外的问题是, 楼主的代码是很古早的东西,属于硬编,其实可以用比较正规的写法:
1.用dos函式读取/设定中断.
2.用bios函式输出字符.
修改一下楼主代码, 如下:

div bl 产生00中断后,系统会回到这条div bl上,会再来一次div dl, 再触发0中断,也就是无限回圈. 不同的dos版本或dosbox会有不同处理,通常是强行关闭程式,返回dos.
所以,写0中断,要如何跳过原除法指令就是麻烦之处, 办法之一是再拦截单步中断.然后0中断返回时触发单步,令我们的单步中断取得除法指令下一条指令的地址,再强行返回原程式.
当然,也可以把问题简单化, 就像楼主的程式,直接返回dos.(反正都除法错误了, 基本代码已有问题, 再运行下去都没意思)
另外的问题是, 楼主的代码是很古早的东西,属于硬编,其实可以用比较正规的写法:
1.用dos函式读取/设定中断.
2.用bios函式输出字符.
修改一下楼主代码, 如下:
