【正确答案】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
说明:程序中所使用加减法运算均为二进制数运算指令,要使用十进制调整指令,才能得到十进制数结果。所以在每个加、减指令后,都跟有十进制调整指令。
【答案解析】