问答题 完成下式压缩型BCD数乘法运算。
   X=845712×36
【正确答案】DATA SEGMENT
     A DB 84H,57H,12H    ;被乘数
     B DB 36H    ;乘数
     C DB 4DUP(?)    ;乘积单元
     D DB 4DUP(?)    ;暂存(B=4×A)
   DATA  ENDS
   CODE  SEGMENT
     ASSUME CS: CODE,DS: DATA
   SAT:  MOV  AX,DATA    ;装填段基址
         MOV  DS,AX
                     ;乘2运算
         MOV  DX,00H    ;清乘积单元
         MOV  AX,00H
         MOV  AL,A+2   ;取低2位BCD数
         ADD  AL,AL    ;AL×2
         DAA    ;组合BCD数加法调整
         MOV  C+3,AL    ;将结果存入C+3单元
         ADC  AH,A+1
         ADC  AH,A+1   ;AH×2
         DAA
         MOV  C+2,AH    ;存入C+2单元
         ADC  DL,A    ;DX存乘积,初值为0
         ADC  DL,A
         DAA
         MOV  C+1,DL    ;存入C+1单元
         ADC  DH,0
         ADC  DH,C
         DAA
         MOV  C,DH    ;存入C单元
         CALL  ADDBCD    ;调用B×4子程序
         MOV   AL,C+3   ;保存B×4
         MOV   D+3,AL
         MOV   AL,C+2
         MOV   D+2,AL
         MOV   AL,C+1
         MOV   D+1,AL
         MOV   AL,C+0
         MOV   D+0,AL
         CALL  ADDBCD    ;B×8
         CALL  ADDBCD    ;B×16
         CALL  ADDBCD    ;B×32
                  ;求B×36程序段,用B×32+B×4实现
         MOV   AX,00H
         MOV   DX,00H
         MOV   AL,C+3   ;取低2位BCD数
         ADD   AL,D+3   : 32+4=36
         DAA
         MOV   C+3,AL    ;存回C+3单元
         ADC   AH,C+2
         ADC   AH,D+2   ;32+4=36
         DAA
         MOV   C+2,AH    ;存回C+2单元
         ADC   DL,C+1   ;DX存乘积,初值为0
         ADC   DL,D+1   ;32+4=36
         DAA
         MOV   C+1,DL    ;存回C+1单元
         ADC   DH,0
         ADC   DH,C    : 32+4=36
         DAA
         MOV   C,DH    ;存回C单元
         MOV   AH,4CH
         INT   21H
   CODE  ENDS
       ;求B×4子程序
   ADDSUB    PROC
          XOR    AX,AX
          XOR    DX,DX
          MOV    AL,C+3   ;取低2位BCD数
          ADD    AL,AL    : AL×4
          DAA
          MOV    C+3,AL    ;存入C+3单元
          ADC    AH,C+2
          ADC    AH,C+2   : AH×4
          DAA
          MOV  C+2,AH    ;存入C+2单元
          ADC  DL,C+1   ;DX存乘积,初值为0
          ADC  DL,C+1   ;DL×4
          DAA
          MOV  C+1,DL    ;存入C+1单元
          ADC  DH,0
          ADC  DH,C    ;DH×4
          DAA
          MOV  C,DH    ;存入C单元
          RET
   ENDP
   END  SAT
   说明:程序中所使用加减法运算均为二进制数运算指令,要使用十进制调整指令,才能得到十进制数结果。所以在每个加、减指令后,都跟有十进制调整指令。
【答案解析】