Soldiers5 发表于 2014-7-3 22:38:09

关于王爽书上的一个问题

在 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次方。




vkevke_3437 发表于 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

vkevke_3437 发表于 2014-7-8 16:40:41

补充一点 计算的结果是 di*100000000h+dx*10000h+ax

Soldiers5 发表于 2014-7-9 14:02:49

vkevke_3437 发表于 2014-7-8 16:40
补充一点 计算的结果是 di*100000000h+dx*10000h+ax

谢了。:handshake
页: [1]
查看完整版本: 关于王爽书上的一个问题