问答题 从STRIN单元开始有一字符串,以‘*’为结束标志。求该字符串长度,并统计其中含有大写英文字母的个数。
【正确答案】DATA  SEGMENT
   STRIN  DB    'ABjjilaJLHGl24hf*'    ;字符串STRIN
   SL     DB      0   存放字符串长度
   N      DB      0   ;存放大写英文字母个数
   DATA   ENDS
   CODE   SEGMENT
     ASSUME CS: CODE,DS: DATA
   START: MOV  AX,DATA
          MOV  DS,AX
          LEA  SI,STRIN
   NEXT:  MOV  AL,[SI]
          CMP  AL,'*'    ;判断是否为结束符'*'
          JZ   OV    ;是,则结束
          INC  SL    ;不是,字符串长度加1
          CMP  AL,'A'    ;判断是否大于'A'
          JB   A1  ;否,转到A1
          CMP  AL,'Z'    ;判断是否小于'Z'
          JA   A1   ;否,转到A1
          INC  N    ;是大写英文字母,N加1
   A1:    INC  SI    ;调整指针
          JMP  NEXT    ;未完,转到NEXT
   OV:    INC  SI,    ;是'*',字符串长度加1
          MOV  AL,SI,    ;显示字符串长度
          CALL ABC
          MOV  AL,N    ;显示大写英文字母个数
          CALL ABC
          MOV  AH,4CH
          INT  21H
          ABC  PROC    ;显示数字子程序
          CMP  AL,0   ;判断是否为0
          JZ   B1   ;是,转到B1
          MOV  AH,0   不是,除以10
          MOV  BL,10
          DIV  BL
          ADD  AX,3030H    ;转换为相应ASCⅡ码
          MOV  DL,AL
          MOV  DH,AH    ;保护AH
          MOV  AH,02H    ;显示商(十位)
          INT  21H
          MOV  DL,DH    ;显示余数(个位)
          INT  21H
          MOV  DL,''    ;显示空格
          INT  21H
          JMP  B2   ;转到B2
   B1:    MOV  DL,'0'    ;是0,显示'0'
          MOV  AH,02H
          INT  21H
   B2:    RET    ;返回主程序
          ABC  ENDP
   CODE    ENDS
   END     START
【答案解析】