|
10鱼币
assume cs:cod,ds:da
da segment
dw 1,2,3,4,5,6,7,8
dd 0,0,0,0,0,0,0,0
da ends
cod segment
start:
mov ax,da
mov ds,ax
mov si,0
mov di,16
mov cx,8
s:
mov bx,ds:[si]
call cube
mov ds:[di],ax
mov ds:[di+2],dx
add si,2
add di,4
loop s
mov ax,4c00h
int 21h
cube:
mov ax,bx
mul bx
mul bx
ret
cod ends
end start
大家看这个程序的这个部分
mov ax,bx
mul bx
mul bx
这是一个计算三次方的子程序,结果放在ax,dx中,但是如果第一次相乘结果就大于16位,那就是ax,dx中都有数据,然后再mul bx,就是ax乘以bx,那dx中的数据等于就被忽略了,是不是是错误的了 |
最佳答案
查看完整内容
真的明白了,如果第一次相乘就大于16位,就溢出了
第一次相乘 180*180 = 32400 = 7E90h (还没有溢出)
如果真的要计算 180*180*180 就要改进算法了
180 不是极限 181 也可以 我不想找那个极限了
|