关于用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) 根本没有取到第二次的值啊
那么他们得出的值又到哪里去了?
求大虾指教下,谢谢 这个或许就是16位寄存器无法完成的问题,如果真要计算也会溢出,32位,64位应该就没问题了,我个人看法 楼主很细心,确实如果是16位的乘法,结果就不是我们想要的了 本帖最后由 NeBen 于 2012-7-6 21:12 编辑
DX的值第二次的时候没调用到,结果就是错误的了,本书不严谨,但主要是后面的问题只用到了255以下的数 NeBen 发表于 2012-7-6 21:16 static/image/common/back.gif
这个或许就是16位寄存器无法完成的问题,如果真要计算也会溢出,32位,64位应该就没问题了,我个人看法
听大虾这么一说,脑子一下子通了许多,哈哈,谢谢你哈, 315775569 发表于 2012-7-7 11:14 static/image/common/back.gif
听大虾这么一说,脑子一下子通了许多,哈哈,谢谢你哈,
我不是大虾。。。。。。。 这个算法计算N^3有问题,除非N^2小于16位上限,否则必出错。
页:
[1]