作者在 2008-12-20 23:20:03 发布以下内容
;布斯算法示例
;一位相乘
;=============ONEPROBLEM============
assume cs:code
;一位相乘
;=============ONEPROBLEM============
assume cs:code
code segment
start:
mov bl,2 ;被乘数
mov al,-3 ;乘数,返回值也在al中
mov cl,4 ;先把被乘数移到高位,方便加减
shl bl,cl
and al,0fh ;初始化乘数
start:
mov bl,2 ;被乘数
mov al,-3 ;乘数,返回值也在al中
mov cl,4 ;先把被乘数移到高位,方便加减
shl bl,cl
and al,0fh ;初始化乘数
mov dh,al
shl dh,1 ;先添加一个辅助位0
mov dl,dh
and dl,3 ;先判断辅助位和第一位.
call panduan
shl dh,1 ;先添加一个辅助位0
mov dl,dh
and dl,3 ;先判断辅助位和第一位.
call panduan
mov cx,3
begin:
shr dh,1
mov dl,dh
and dl,3
call panduan
loop begin
begin:
shr dh,1
mov dl,dh
and dl,3
call panduan
loop begin
mov ax,4c00h
int 21h
panduan:
cmp dl,0
je yiwei
cmp dl,3
je yiwei
cmp dl,1
je jiafa
cmp dl,2
je jianfa
int 21h
panduan:
cmp dl,0
je yiwei
cmp dl,3
je yiwei
cmp dl,1
je jiafa
cmp dl,2
je jianfa
yiwei: ;00 或11 时,仅移位
sar al,1
ret
jiafa: ;01 时,先相加,再移位
add al,bl
sar al,1
ret
jianfa: ;10 时,先相减,再移位
sub al,bl
sar al,1
ret
code ends
end start
sar al,1
ret
jiafa: ;01 时,先相加,再移位
add al,bl
sar al,1
ret
jianfa: ;10 时,先相减,再移位
sub al,bl
sar al,1
ret
code ends
end start