问答题 利用DOS系统功能调用,从键盘输入一串字符,分别统计字母、数字和其他字符的个数,并显示统计结果,编写实现这一功能的汇编源程序。
【正确答案】程序如下:
DATA       SEGMENT
MAXSTRING  DB 100
INACT      DB?
STRING     DB 100
DISMESS    DB'PLEASE ENTER A STRING:',0AH,0DH,'$'
DIGITAL    DB'DIGITAL IS:','$'
LETTER     DB'LETTER IS:','$'
OTHERCHAR  DB'OTHER IS:','$'
CRLF       DB 0AH,0DH,'$'
DATA       ENDS
CODE       SEGMENT
          ASSUME CS:CODE,DS:DATA
MAIN       PROC FAR
          MOV AX,DATA
          MOV DS,AX
          MOV BL,0
          MOV BH,0
          MOV CH,0
DISPSTRING MACRO
          MOV AH,9
          INT 21H
          ENDM
DISPCHAR   MACRO
          MOV AH,2
          INT 21H
          ENDM
          LEADX,DISMESS
          DISPSTRING
BEGIN:    LEA DX,MAXSTRING
          MOV AH,0AH
          INT 21H
          MOV DL,INACT
          MOV DH,0
          INC DX
          LEASI,STRING
REPEAT:   DEC DX
          JZ ENDCHE
          MOV AL,[SI]
          INC SI
          CMP AL,'0'
          JB OTHER
          CMP AL,'9'
          JA NEXT1
          INC BL
          JMP REPEAT
NEXT1:    OR AL,20H
          CMP AL,'a'
          JB OTHER
          CMP AL,'z'
          JA OTHER
          INC BH
          JMP REPEAT
OTHER:    INC CH
          JMP REPEAT
ENDCHE:   LEA DX,DIGITAL
          DISPSTRING
          MOV CL,BL
          CALL DISP
          LEA DX,LETTER
          DISPSTRING
          MOV CL,BH
          CALL DISP
          LEA DX,OTHERCHAR
          DISPSTRING
          MOV CL,CH
          CALL DISP
          MOV AH,4CH
          INT 21H
MAINE      NDP
DISP       PROCNEAR
          MOV AL,CL
          MOV AH,0
          MOV CL,100
          DIV CL
          MOV CL,AH
          MOV DL,AL
          ADD DL,30H
          DISPCHAR
          MOV AL,CL
          MOV AH,0
          MOV CL,10
          DIV CL
          MOV CL,AH
          MOV DL,AL
          ADD DL,30H
          DISPCHAR
          MOV DL,CL
          ADD DL,30H
          DISPCHAR
          LEA DX,CRLF
          DISPSTRING
          RET
DISP       ENDP
CODE       ENDS
          END MAIN
【答案解析】