王爽 汇编语言 附注5 公式证明那里不懂,谁帮我看一下

书上说DIV指令只能得出余数和商,而我们只保留商,余数必然小于除数,一次正确的除法运算只能丢掉一个余数,到这里我就糊涂了,为什么要丢掉余数啊?

对于除法溢出的问题,他是用“做两次除法”来解决的。

前一次除法,只是保留商数。

余数,并没有丢掉,而是放在第二次除法了。

80x86 的除法指令本身,就含有溢出的可能性。

一般时,不要轻易使用。

或者在使用前,加以判断,确定不会溢出时,再去执行除法指令。

其实,可以利用除法指令,编写一个“不会溢出的除法程序”。

示意图如下:

在这个程序中,被除数和商数,字节数,是相等的。

因此,就绝不会溢出。

温馨提示:内容为网友见解,仅供参考
第1个回答  2010-05-05
其他的地方能看明白么?
其他的地方能看明白就不用管那句了,那个附录的主要目的不是让你弄明白如何在做除法的时候不溢出么?
把最后那个公式弄明白就行了

大概意思好像是用那个公式计算的结果只有商,没有余数.为了结果不溢出,只能不计算余数

其实我感觉那个公式有点过于复杂了,那个公式生成的指令肯定会非常多,而且仅根据结果无法判断那个数是否溢出了
如果那样还不如在具体的程序里加个判断语句来防止溢出,比如一个除以10的除法运算,你只要判断被除数是否大于9FFF6(FFFF*A)就行了,如果大于,则结果会溢出.效率比那个公式高
进一步的,你可以将除数和FFFF相乘,看结果是否大于等于被除数,如果大于等于,则这个除法不会溢出,这样效率可能(我不太确定,这个可能会有很多指令)还是比那个公式高.这样通用性更强,而且能得到余数
===========================================
楼主你先别结贴,我还要补充一点东西
===========================================
这个问题里汤叔说的方法也不错:
http://zhidao.baidu.com/question/117361812.html
无视我的那个回答吧,人家问怎样吃饭能不噎着我告诉人家别吃饭
那个余数的问题可以把余数除以原来的除数,然后把商放到后来的那个商的后面,余数就是正确的余数,举个例子(都是十六进制的数,不表示了):
1234/10=123......4
1234/100=12......34
用34除以10,商3,余4,将12左移4位,加上3就是正确的商了,然后4就是正确的余数

我刚才搜索了一下,发现有个可以秒杀以上所有方法的东西:
http://www.baidu.com/s?wd=div+%D2%E7%B3%F6+divdw
点开第一个就是
===========================================
好了,我补充完了
第2个回答  2010-05-04
虽然我不知道您的汇编语言是用于什么的,毕竟8086与单片机的汇编语言不同。 如果是教材的话一般是以8086/8088为例。我简单说下,因为汇编语言中我们是需要把除数和被除数都放在两个不同的reg当中,所以在运算的时候,会自动将商(整数)放在结果reg中,而并没有余数的reg,这个并不是为什么的问题,而是器件的本身特性。本回答被提问者采纳

王爽 汇编语言 附注5 公式证明那里不懂,谁帮我看一下
示意图如下:在这个程序中,被除数和商数,字节数,是相等的。因此,就绝不会溢出。

王爽老师 汇编语言第二版的检测点3.1 的第二个小问题,看不懂 jmp 0ff...
呵呵,这位朋友,你前面的段知识没理解通透,8086的地址线是20位的,它计算地址的公式是段地址剩16(16进制就是剩10,十进制的16转换成16进制数是10H)然后加上偏移地址 即是:段地址X16+偏移地址 = 物理地址(也就是书上说的绝对地址),,,看下3.1这道题,,段地址0ff0 x 10 = ff00...

王爽汇编语言实验10除法溢出公式疑惑
5. ; (dx)=dword型数据的高16位 6. ; (cx)=除数 7. ;返回: (dx)=结果的高16位,(ax)=结果的低16位 8. ; (cx)=余数 9. ;计算公式:X\/N=int(H\/N)*2^16+[rem(H\/N)*2^16+L]\/N 10. divdw:11. jcxz divdw_return ;除数cx为0,直接返回 12. push...

汇编16进制 加减 怎么算?刚刚看了王爽老师的汇编语言 难到时不难 主要...
16进制就和10进制一样, 逢16进1,而且每位数可以有0-F, 15个数 比如 1F38H+5679H 低位:9+8=17 进1 余1 第二位:3+7+进位=11=B 第三位:F+6=21, 进1余5 第四位:1+5+进位=7 所以结果为 75B1H 关于进制转换的方面一言两语讲不太清楚,例如10进制转换到2进制,用除2取...

相似回答