;两个多字数的2进制整数相乘。
;其中:每个数的字长度放在CONT中,被乘数放在以bata1中首地址的存储单元中,乘数放在以bata2为首地址的存储单元中,乘积放在以bata3为首地址的存储单元中。
;--------------------------------------------
;最佳答案:
;这种多个字的乘法,要仿照人工计算乘法的竖式,逐步、相乘、相加、进行计算。程序如下。
;--------------------------------------------
DATA SEGMENT
bata1 DW 2334H, 4556H ;被乘数
bata2 DW 1A2BH, 3C4DH ;乘数
bata3 DW 4 DUP(0) ;乘积空间,此处的数字,要大于“字数”的二倍
CONT DB 2 ;字数
;前面的数字,完成的乘法运算表达式如下:
;4556H 2334H × 3C4DH 1A2BH = 1055123F2BAF31BCH
;这个结果,可以用Windows中计算器,算出来
SY DW ? ;临时使用的变量空间
SB DW ?
DATA ENDS
;---------------------------------------------
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START:
MOV AX, DATA
MOV DS, AX
;---------------------------------------------
LEA DI, bata3 ;取乘积的起始地址
MOV [SY], DI
MOV [SB], DI ;保存
;---------------------------------------------
LEA SI, bata1 ;取被乘数的起始地址
MOV CH, [CONT] ;取字数
;---------------------------------------------
LL0:
LEA DI, bata2 ;取乘数的起始地址
MOV CL, [CONT] ;数的字数
;---------------------------------------------
LL1:
MOV AX, [SI] ;取出被乘数
MOV BX, [DI] ;取出乘数
MUL BX
CALL ADD_3W ;加到乘积中
;---------------------------------------------
INC DI ;转到下个乘数
INC DI
DEC CL
JNZ LL1 ;有几个乘数,就循环几次
;---------------------------------------------
INC SI ;转到下个被乘数
INC SI
MOV BX, [SB] ;取出上次乘积的起始地址
INC BX
INC BX
MOV [SB], BX ;保存
MOV [SY], BX ;做为下次乘积的起始地址
DEC CH
JNZ LL0 ;有几个被乘数,就循环几次
;---------------------------------------------
MOV AX, 4C00H
INT 21H
;---------------------------------------------
ADD_3W PROC NEAR
MOV BX, [SY]
ADD AX, [BX]
MOV [BX], AX
ADC DX, [BX + 2]
MOV [BX + 2], DX
XOR AX,AX
ADC AX, [BX + 4]
MOV [BX + 4], AX
INC BX
INC BX
MOV [SY], BX
RET
ADD_3W ENDP
;---------------------------------------------
CODE ENDS
END START
;---------------------------------------------
上述程序,用DEBUG进行调试运行,结果截图如下:
图片链接:http://hi.baidu.com/%D7%F6%B6%F8%C2%DB%B5%C0/album/item/69cc90267becb032908f9d2b.html
可以看出,这个结果和使用计算器算出的结果相同。
;========================================================
回答时间:2010-1-5 04:05
回答者: 做而论道 | 十二级 采纳率:33%
提问者对于答案的评价:谢谢啊
原文网址:http://zhidao.baidu.com/question/131524162.html
;========================================================