汇编中断程序(王爽的除法溢出中断程序实现出错)

汇编中断程序(王爽的除法溢出中断程序实现出错),第1张

80x86 的 0 号中断,是针对“除数为零”而设置的。

如果在程序中,做除法之前加以判断,避腊陵免除数为零,

那么,0 号中断,就不会发生了。

那么,再这么认真的学习这块内容,芹卖就没有实用意义了。

-------------------------

CPU 执行除法指令,确实是容易发生溢出。

一般来说,当被除数的高位,大于等于除数时,就会发生“溢出”。

如果你编写一个“不会溢出”的除法程序,这些问题,就都没有了。

参考下图:

在右图中,

被除数:1A 2B 3C 4DH,有 32 位数。

除数是:BL,仅有 8 位数。嫌局逗

商,是:32 位数。

按照图中的步骤,需要执行四次 DIV  BL。

只要 BL 不为零,就绝对不会发生溢出。

按此思路,被除数的字节数,还可以增加,仅受制于内存的大小。

这就是说:这种除法程序,被除数,可以认为是无限大的。

我们可以用中断类型码,在中断向量表中找到中断处理程序的入口。找到这个入口地址的最终目的是用它设置CS和IP,使CPU执行中断处理程序。用中断类型码找到中断向量,并用它来设置CS和IP,这个工作是由CPU的硬件自动完成的。CPU硬件完成这个工作的过程被称为蔽差信中断过程。

下面是8086CPU在收到中断信息后,所引发的中断过程。

2)标志寄存器的值入栈(因为在中断过程中要庆冲改变标志寄存器的值,所以先将其保存在栈中)

3)设置标志寄存器的第8位TF和第9位IF的值为0

4)CS的内容入栈

5)IP的内容入栈;

6)从内存地址为中断类型宏轮码 4和中断类型码 4+2的两个字单元中读取中断处理程序的入口地址设置IP和CS。

可以简洁的描述如下:

1)取得中断类型码N

2)pushf

3)TF=0,IF=0

4)push CS

5)push IP


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12402097.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存