已然就位 发表于 2017-9-24 23:33:27

除法的一些小问题

这是第八章除法的一些应用,刚看后面还没看下去就有点忍不住想问了。
甲鱼老师在图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-24 23:34:19

求解

已然就位 发表于 2017-9-25 08:13:55

求解

丶忘却的年少o 发表于 2017-9-25 09:46:31

已然就位 发表于 2017-9-25 08:13
求解

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下也是可以的,就是注意除数要转换十六进制

weizhongyang 发表于 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就对了。
页: [1]
查看完整版本: 除法的一些小问题