📄 统计字符串中字符类型.asm
字号:
DATAS SEGMENT
;此处输入数据段代码
INKEY LABEL BYTE
MAX DB 80
CAP DB ?
SENTENCE DB 80 DUP(?)
LETTER DB 0
DIGIT DB 0
OTHER DB 0
SHOWSENTENCE DB 'INPUT SENTENCE:','$'
SHOWDIGIT DB 'DIGIT:',10,13,'$'
SHOWLETTER DB 'LETTER',10,13,'$'
SHOWOTHER DB 'OTHER',10,13,'$'
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
MAIN PROC FAR
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
;此处输入代码段代码
LEA DX,SHOWSENTENCE;显示要求用户输入关键字
MOV AH,09H
INT 21H
LEA DX,INKEY;输入关键字
MOV AH,0AH
INT 21H
MOV CH,0
MOV CL,CAP;将关键字个数放进CL
MOV BX,0
LOOP1: MOV AL,SENTENCE[BX]
CMP AL,30H;当ASCLL小于30时候,OTHER加1
JBE OTHERCOUNT
CMP AL,39H
JBE DIGITCOUNT;当ASCLL大于30H小于39 H时候DIGIT加1
CMP AL,40H;当ASCLL大于39H小于40H时候 OTHER加1
JBE OTHERCOUNT
CMP AL,5BH;当小于5B时候LETTER加1
JB LETTERCOUNT
CMP AL,60H;大于5BH小60时候 OTHER加1
JB OTHERCOUNT
CMP AL,7AH;大于7A时候OTHER加1
JA OTHERCOUNT
LETTERCOUNT: INC LETTER
JMP NEXT
OTHERCOUNT:INC OTHER
JMP NEXT
DIGITCOUNT:INC DIGIT
NEXT: INC BX
LOOP LOOP1
;;;;;
MOV DL,0AH;换行
MOV AH,02H
INT 21H
LEA DX,SHOWLETTER
MOV AH,09H
INT 21H
MOV DL,LETTER
CALL SHOW
MOV DL,0AH;换行
MOV AH,02H
INT 21H
LEA DX,SHOWOTHER
MOV AH,09H
INT 21H
MOV DL,OTHER
CALL SHOW
MOV DL,0AH
MOV AH,02H
INT 21H
LEA DX,SHOWDIGIT
MOV AH,09H
INT 21H
MOV DL,DIGIT
CALL SHOW
MOV AH,4CH
INT 21H
MAIN ENDP
;16进制显示;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SHOW PROC NEAR
MOV DH,DL
MOV CX,2
LOOPP:
ROL DH,1
ROL DH,1
ROL DH,1
ROL DH,1
MOV BH,DH
AND BH,0FH
ADD BH,30H
CMP BH,39H
JBE LOP
ADD BH,07H
LOP:MOV DL,BH
MOV AH,02H
INT 21H
LOOP LOOPP
RET
SHOW ENDP
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CODES ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -