鱼C论坛

 找回密码
 立即注册
查看: 2839|回复: 6

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

[复制链接]
发表于 2012-7-6 20:51:41 | 显示全部楼层 |阅读模式
3鱼币
;说明:计算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位应该就没问题了,我个人看法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-7-6 20:51:42 | 显示全部楼层
这个或许就是16位寄存器无法完成的问题,如果真要计算也会溢出,32位,64位应该就没问题了,我个人看法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-7-6 21:03:10 | 显示全部楼层
楼主很细心,确实如果是16位的乘法,结果就不是我们想要的了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-7-6 21:04:18 | 显示全部楼层
本帖最后由 NeBen 于 2012-7-6 21:12 编辑

DX的值第二次的时候没调用到,结果就是错误的了,本书不严谨,但主要是后面的问题只用到了255以下的数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-7-7 11:14:47 | 显示全部楼层

听大虾这么一说,脑子一下子通了许多,哈哈,谢谢你哈,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-7-7 11:51:15 | 显示全部楼层
315775569 发表于 2012-7-7 11:14
听大虾这么一说,脑子一下子通了许多,哈哈,谢谢你哈,

我不是大虾。。。。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-7-7 21:53:50 | 显示全部楼层
这个算法计算N^3有问题,除非N^2小于16位上限,否则必出错。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-20 09:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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