新手求助~!32位符号数的乘法运算,求注释!谢谢
时间:2010-12-14
来源:互联网
;32位符号数的乘法运算
;入: DXAX=32位操作数1
; CXBX=32位操作数2
;出: CXBXDXAX=两操作数积
;===============================
subn_mul32 proc near
push di
xor di,di
test dh,80h
jz sss_1
mov di,1
not dx
not ax
add ax,1
adc dx,0
sss_1:
test ch,80h
jz sss_2
not cx
not bx
add bx,1
adc cx,0
xor di,1
sss_2:
call subn_32x32
test di,1
jz sss_out
not ax
not bx
not cx
not dx
add ax,1
adc dx,0
adc bx,0
adc cx,0
sss_out:
pop di
ret
subn_mul32 endp
;入: DXAX=32位操作数1
; CXBX=32位操作数2
;出: CXBXDXAX=两操作数积
;===============================
subn_mul32 proc near
push di
xor di,di
test dh,80h
jz sss_1
mov di,1
not dx
not ax
add ax,1
adc dx,0
sss_1:
test ch,80h
jz sss_2
not cx
not bx
add bx,1
adc cx,0
xor di,1
sss_2:
call subn_32x32
test di,1
jz sss_out
not ax
not bx
not cx
not dx
add ax,1
adc dx,0
adc bx,0
adc cx,0
sss_out:
pop di
ret
subn_mul32 endp
作者: z307450494 发布时间: 2010-12-14
帮帮我~谁懂?
作者: z307450494 发布时间: 2010-12-15
subn_mul32 proc near
push di
xor di,di ;di用来记乘积的符号,初始状态置为0,表示+
test dh,80h ;判断32位操作数DX AX是正数还是负数,只需看最高位是0还是1
jz sss_1 ;若是正数,转到sss_1
mov di,1 ;若是负数,则DI置1,表示乘积可能为负(还要看另一个操作数)
not dx ;以下4行取32位操作数DX AX的相反数(即绝对值),就是用“取反+1”的操作
not ax
add ax,1
adc dx,0
sss_1:
test ch,80h ;这里到sss_2是对另一个操作数CX BX做同样的处理
jz sss_2
not cx
not bx
add bx,1
adc cx,0
xor di,1 ;第二个操作数为负数,则di最低位取反(即,0变成1,或1变成0)
sss_2:
call subn_32x32 ;这个子程序应该是完成无符号32位数乘法的,用它求原两个数绝对值的成绩
test di,1 ;判断乘积的符号应该是正还是负
jz sss_out ;应该是正,则结束
not ax ;否则,以下8行用“取反加一”的操作,对CX BX DX AX这个64位数取相反数
not bx
not cx
not dx
add ax,1
adc dx,0
adc bx,0
adc cx,0
sss_out:
pop di
ret
subn_mul32 endp
push di
xor di,di ;di用来记乘积的符号,初始状态置为0,表示+
test dh,80h ;判断32位操作数DX AX是正数还是负数,只需看最高位是0还是1
jz sss_1 ;若是正数,转到sss_1
mov di,1 ;若是负数,则DI置1,表示乘积可能为负(还要看另一个操作数)
not dx ;以下4行取32位操作数DX AX的相反数(即绝对值),就是用“取反+1”的操作
not ax
add ax,1
adc dx,0
sss_1:
test ch,80h ;这里到sss_2是对另一个操作数CX BX做同样的处理
jz sss_2
not cx
not bx
add bx,1
adc cx,0
xor di,1 ;第二个操作数为负数,则di最低位取反(即,0变成1,或1变成0)
sss_2:
call subn_32x32 ;这个子程序应该是完成无符号32位数乘法的,用它求原两个数绝对值的成绩
test di,1 ;判断乘积的符号应该是正还是负
jz sss_out ;应该是正,则结束
not ax ;否则,以下8行用“取反加一”的操作,对CX BX DX AX这个64位数取相反数
not bx
not cx
not dx
add ax,1
adc dx,0
adc bx,0
adc cx,0
sss_out:
pop di
ret
subn_mul32 endp
作者: shzhfu 发布时间: 2010-12-15
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28