【正确答案】NAME EX—5—11
DATA SEGMENT
A DB 9,5,6,7,2,3 ;十进制被除数956723
B DB 8 ;十进制除数8
C DB 6DUP(O) ;商值单元
N EQU 6 ;被除数位数
DATA ENDS
CODE SEGMENT
ASSUME CS: CODE,DS: DATA,ES: DATA CSEG
START: MOV AX,DATA
MOV DS,AX
MOV ES,AX
CLD
LEA SI,A ;置被除数地址指针
LEA DI,C ;商值地址指针
MOV CX,N ;单位除法次数计数器
MOV AH,0 ;清AH
LP1: LODSB ;取高位被除数,送入AL
AAD ;对AX做十进制调整,AL←AH×10+AL,AH←0
DIV B ;AX/B→AL(商)、AH(余)
STOSB ;存商高位
LOOP LP1 ;对被除数各位除操作
MOV CX,N ;显示除运算结果
LEA DI,C
LP2: MOV DL,[D]
MOV AH,02H
INT 21H
DEC DI
LOOP LP2
MOV AH,4CH ;退出DOS
INT 21H
CODE ENDS
END START
【答案解析】可以把被除数分解为各单独位,从高位开始分别用除数去除。如先除被除数的高位(8÷6=1余2),其商存入商值存储单元的高位中,而余数做下次运算的被除数的高位。巧妙利用AAD指令的特点,可以完成非压缩多字节BCD数与单字节BCD数的除法运算。如此循环,除完被除数的所有位后,其结果商值就存放在商的存储区了。