鱼C论坛

 找回密码
 立即注册
查看: 1506|回复: 3

关于王爽书上的一个问题

[复制链接]
发表于 2014-7-3 22:38:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
在 10.10 有这样一个子程
; 计算N的3次方
;参数 (bx)=N
;结果 (dx:ax)=N^3

cube : mov ax,bx      ; 这里把bx当作参数传给ax
           mul bx           ;  bx*ax=bx*bx    两个16位数据相乘   结果的高位会放在dx中  低位会放在ax中
           mul bx       ; 这里继续 mul bx  相当于 ax*bx  算的只是结果的低16位乘以bx  并不能求出 bx的3次方
           ret
显然这里是错误的

问题 : 16位的数据   我们该怎么去计算 N次方。




想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-7-8 16:24:30 | 显示全部楼层
书中的错误是一个范围的问题 第一步N的平方不超出16位是可行的(即DX为零) 可以用(dx:ax)表示
当范围很大的时候  2个寄存器不足以存储 只能用3个寄存器表示:
我在这里用
;结果 (di:dx:ax) = N^3 表示
代码
       cube:          mov ax,bx               
                mul bx
                mov di,dx
                mul bx
                push ax
                push dx
                mov ax,di
                mul bx
                mov di,dx
                pop dx
                add dx,ax
                pop ax

                                 ret
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-7-8 16:40:41 | 显示全部楼层
补充一点 计算的结果是 di*100000000h+dx*10000h+ax
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-9 14:02:49 | 显示全部楼层
vkevke_3437 发表于 2014-7-8 16:40
补充一点 计算的结果是 di*100000000h+dx*10000h+ax

谢了。:handshake
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-18 08:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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