问答题 在A地址起有6位非压缩型BCD被除数,在B地址有1位非压缩型BCD除数,实现除法运算。商数存于C起的单元中,余数存D单元中。并将商值显示在屏幕上。
【正确答案】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数的除法运算。如此循环,除完被除数的所有位后,其结果商值就存放在商的存储区了。