【正确答案】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。