关于王爽书上的一个问题
在 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次方。
书中的错误是一个范围的问题 第一步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 补充一点 计算的结果是 di*100000000h+dx*10000h+ax vkevke_3437 发表于 2014-7-8 16:40
补充一点 计算的结果是 di*100000000h+dx*10000h+ax
谢了。:handshake
页:
[1]