鱼C论坛

 找回密码
 立即注册
查看: 3059|回复: 4

[已解决]除法的一些小问题

[复制链接]
发表于 2017-9-24 23:33:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
这是第八章除法的一些应用,刚看后面还没看下去就有点忍不住想问了。
甲鱼老师在图1发过程序可以让我们去debug去试试看这个程序。我试了下不对在图2。想问问有什么地方错了,(第一条我没剪下来,但是我的确一条一条打下来的)?
另外还有个问题,甲鱼老师说在dx放入1,为高位。在ax放入86a1h,为低位。在bx放入100,为除数。然后在div bx。
这我有点疑问了为什么是div bx了。除100001不是应该div 186a1h当然程序不能这么写。我不会写就是想法上是这样的?如果div bx。说是被除数dxax。dx和ax是怎么联系在一起的不会只除ax或者dx吗?
最佳答案
2017-9-25 09:46:31

dx是被除数的高位,ax是被除数的低位,bx是除数。
题目是100001除以100,100001就是被除数,换算成十六进制是186a1h,通俗点讲,一个寄存器只能放四位,所以ax=86a1h,1就只能放在dx。题目有个错误,100是十进制,没换算就直接放进去除了,应该是bx=100=64h。至于你说的dx和ax怎么联系在一起的?这个是内部已经规定好就是这样的。div指令开头有讲,我给你翻译一下的意思就是当除数是字节单元(8位),如bl,那内部默认只默认ax为被除数,要是除数是字单元,如bx,那内部默认是dx和ax为被除数。
程序运行如下:在debug下也是可以的,就是注意除数要转换十六进制
捕获.JPG

图1

图1

图2

图2
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-9-24 23:34:19 | 显示全部楼层
求解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-9-25 08:13:55 | 显示全部楼层
求解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-9-25 09:46:31 | 显示全部楼层    本楼为最佳答案   

dx是被除数的高位,ax是被除数的低位,bx是除数。
题目是100001除以100,100001就是被除数,换算成十六进制是186a1h,通俗点讲,一个寄存器只能放四位,所以ax=86a1h,1就只能放在dx。题目有个错误,100是十进制,没换算就直接放进去除了,应该是bx=100=64h。至于你说的dx和ax怎么联系在一起的?这个是内部已经规定好就是这样的。div指令开头有讲,我给你翻译一下的意思就是当除数是字节单元(8位),如bl,那内部默认只默认ax为被除数,要是除数是字单元,如bx,那内部默认是dx和ax为被除数。
程序运行如下:在debug下也是可以的,就是注意除数要转换十六进制
捕获.JPG
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-25 09:47:10 | 显示全部楼层
首先需要声明下,deubg和masm里数据的进制是不一样的
在debug里默认是16进制的
masm里默认是10进制的

所以, mov bx, 100          ;如果你是直接在Debug里输入代码的话,相当于bx=16^2=256了;
                                      ;而如果在masm里输入的代码的话,mov bx, 100才是相当是100

所以,上面你的程序输出的值肯定是不对的,因为你是在debug里输入的100吧,相当100001/256,结果当然不是你所想的那个了。

PS:上面的程序应该在masm里输入执行就是正确的, 如果想在debug中直接执行,应该改为mov bx, 64就对了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-25 01:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表