问答题 试编一个程序,把AX中的十六进制数转换成ASCⅡ码,并将对应的ASCⅡ码依次存放到MEM数组中的四个字节中。
【正确答案】DATA  SEGMENT
   MEM  DB 4DUP(?)
   DATA  ENDS
   CODE    SEGMENT
     ASSUME CS: CODE,DS: DATA
   START: MOV  AX,DATA
          MOV  DS,AX
          MOV  CL,4
          MOV  DH,AH
          SHR  DH,CL    ;DH为AX最高位
          CMP  DH,9   ;判断是否大于9
          JB   A1   ;不是,转到A1
          ADD  DH,7   ;是,先加7
   A1:    ADD  DH,30H    ;加30H转换为ASCⅡ码
          MOV  MEM,DH    ;将最高位转换好的ASCⅡ码存到MEM第一个单元中
          AND  AH,0FH    ;取AH低四位
          CMP  AH,9   ;判断是否大于9
          JB   A2   ;不是,转到A2
          ADD  AH,7   ;是,先加7
   A2:    ADD  AH,30H    ;加30H转换为ASCⅡ码
          MOV  MEM+1,AH    ;将AH低四位存入MEM第二个单元中
          MOV  DH,AL    ;取AL高四位
          SHR  DH,CL
          CMP  DH,9   ;判断是否大于9
          JB   A3   ;不是,转到A3
          ADD  DH,7   ;是,先加7
   A3:    ADD  DH,30,H    ;加30H转换为ASCⅡ码
          MOV  MEM+2,DH    ;将AL高四位存入MEM第三个单元中
          AND  AL,0FH    ;求AL低四位
          CMP  AL,9   ;判断是否大于9
          JB   A4   ;不是,转到A4
          ADD  AL,7   ;是,先加7
   A4:    ADD  AL,30H    ;加30H转换为ASCⅡ码
          MOV  MEM+3,AL    ;将AL低四位存放于MEM第四个单元中
          LEA  SI,MEM
          MOV  CX,4
   NEXT:  MOV  DL,[SI]    ;显示AX
          MOV  AH,02H
          INT  21H
          INC  SI
          LOOP NEXT
          MOV  AH,4CH
          INT  21H
   CODE  ENDS
   END   START
【答案解析】