8086汇编语言DIV指令的问题

1200*3000=3600000,十六进制为0036EE80,我想把它变成3600000的形式显示出来。但是在用DIV指令求余(除数为10)倒着存放时的商AX里放不下怎... 1200*3000=3600000,十六进制为0036EE80,我想把它变成3600000的形式显示出来。但是在用DIV指令求余(除数为10)倒着存放时的商AX里放不下怎么办?比如第一次的商360000,AX就放不下。 展开
 我来答
做而论道
高能答主

2023-01-01 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3万
采纳率:80%
帮助的人:1.1亿
展开全部

80x86 中的除法指令(如:DIV  CX、DIV  BL)时,是有可能溢出的。

如果被除数较大,或除数较小,都可能使“商”超出预定位数,此时,就会溢出。

特别是当除数为零时,必然会出现:Divide  overflow。

直接使用 DIV 指令,有一定的风险,一不小心就溢出了。

特别是数字不明确的时候。

因此,在执行 DIV 指令之前,应该加以判断,以免发生溢出。

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

如果高位为零,比如 DX = 0,这就肯定不会溢出。

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

80x86 的 CPU 最大,只支持 32 位数的除法指令。

那么,被除数较大,非常非常大,该怎么办呢?

有人就寄希望于高档的 CPU 问世。

其实,不用等待。

你就编写一个“不会溢出”的除法程序,就可以解决。

方法思路如下:

左图是 CPU 执行 16 位数除以 8 位数时的操作。

在右图中,

被除数,是四个字节:1A 2B 3C 4DH,有 32 位数。

除数,只有一个字节:BL,仅有 8 位数。

这么大的被除数,这么小的除数!

直接用除法指令来求商,显然是根本就做不到的。

但是,按照图中的步骤,执行四次 DIV  BL。

可得四个字节的:商。

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

实际上,被除数的字节数,还可以继续增加。

那么,按此思路,被除数,可以认为是无限的。

头好舞05
2012-12-03 · TA获得超过2099个赞
知道小有建树答主
回答量:797
采纳率:100%
帮助的人:493万
展开全部
可以事先判断被除数大小,来决定是除以10000还是1000还是100还是10,总之不要溢出,之后不用再提示了吧
追问
好聪明啊,多谢
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
沙里波特
2012-12-05 · TA获得超过5245个赞
知道大有可为答主
回答量:1.1万
采纳率:100%
帮助的人:623万
展开全部
把很多位的二进制数字,以十进制显示,根本不用除法。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
synweb
2012-12-03 · 超过14用户采纳过TA的回答
知道答主
回答量:166
采纳率:0%
帮助的人:60.6万
展开全部
你可以用将此数转换成BCD码,然后再考虑显示
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
倾城1023
2012-12-03
知道答主
回答量:18
采纳率:0%
帮助的人:2.7万
展开全部
32位
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式