多个字的2进制整数相乘

来源:互联网 发布:怎么看b超单子的数据 编辑:程序博客网 时间:2024/06/05 03:22

;两个多字数的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进行调试运行,结果截图如下:

多个字的2进制整数相乘 - 非著名博主 - 电子信息角落

图片链接: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
;========================================================

0 0
原创粉丝点击