315775569 发表于 2012-7-6 20:51:41

关于用MUL来计算N的三次方(用子程序调用)的一个疑问,急急急急...........

;说明:计算N的三次方
;参数(bx)=n
;结果 : (dx:ax) =N^3
cube:mov ax,bx
mul bx
mul bx
ret

这一段里面 在三次的时候 乘法是不是有问题呢?

在执行第一条 mul bx 的时候 ax,bx 都是16位的 做乘法后的值高位16位放在dx里 低16放ax里面

在第二次执行 mul bx 的时候 这里我理解是(ax)*(bx) 根本没有取到第二次的值啊   
那么他们得出的值又到哪里去了?

求大虾指教下,谢谢

NeBen 发表于 2012-7-6 20:51:42

这个或许就是16位寄存器无法完成的问题,如果真要计算也会溢出,32位,64位应该就没问题了,我个人看法

NeBen 发表于 2012-7-6 21:03:10

楼主很细心,确实如果是16位的乘法,结果就不是我们想要的了

NeBen 发表于 2012-7-6 21:04:18

本帖最后由 NeBen 于 2012-7-6 21:12 编辑

DX的值第二次的时候没调用到,结果就是错误的了,本书不严谨,但主要是后面的问题只用到了255以下的数

315775569 发表于 2012-7-7 11:14:47

NeBen 发表于 2012-7-6 21:16 static/image/common/back.gif
这个或许就是16位寄存器无法完成的问题,如果真要计算也会溢出,32位,64位应该就没问题了,我个人看法

听大虾这么一说,脑子一下子通了许多,哈哈,谢谢你哈,

NeBen 发表于 2012-7-7 11:51:15

315775569 发表于 2012-7-7 11:14 static/image/common/back.gif
听大虾这么一说,脑子一下子通了许多,哈哈,谢谢你哈,

我不是大虾。。。。。。。

水之境界 发表于 2012-7-7 21:53:50

这个算法计算N^3有问题,除非N^2小于16位上限,否则必出错。
页: [1]
查看完整版本: 关于用MUL来计算N的三次方(用子程序调用)的一个疑问,急急急急...........