问答题 在字单元A、B址起分别有一个32位(两个字单元)被乘数与乘数,求其乘积存于C址起的字单元中。
【正确答案】DATA  SEGMENT
     A DW    7684H,5712H    ;被乘数
     B DW    2507H,3436H    ;乘数
     C DW    4DUP(0)    ;乘积单元
     DATA  ENDS
   CODE  SEGMENT
     ASSUME CS: CODE,DS: DATA
   SATRT: MOV    AX,DATA
          MOV    DS,AX
                  ;乘2运算
          MOV    DX,A    ;取被乘数高16位
          MOV    DX,A    ;取被乘数高16位
          MOV    AX,A+2   ;取被乘数低16位
          MOV    SI,0
          MOV    DI,00
          MOV    BX,B    ;取乘数高16位
          MOV    CX,B+2   ;取乘数低16位
   ADD1:  ADD    C+6,AX    ;低32位的低16位数相加
          ADC    C+4,DX    ;低32位的高16位数相加,含低位的进位
          ADC    C+2,SI    ;高32位的低16位数相加,含低位的进位
          ADC    C+0,DI    ;高32位的高16位数相加,含低位的进位
          SUB    SI,1   ;每加一次被乘数,乘数减1
          SBB    DI,0   ;只有从高16位借位,DI才减1,D1=0为结束条件
          JNZ    ADD1
          MOV    AH,4CH    ;返回DOS
          INT    21H
   CODE  ENDS
   END    START
【答案解析】两个分别为32位的数相乘,结果有可能达到64位。由于8086/8088没有对应的32位乘法指令,因此需要用多字节加法来完成32位乘法运算。例如A×4相当于对A进行4次加法,即A×4=A+A+A+A。