📄 统计字符个数.asm
字号:
DATAAREA SEGMENT
STR DB 50H,?,50H DUP(?)
NUMS DB 0
UPCASES DB 0
LOWCASES DB 0
OTHERS DB 0
MSG DB "Enter your keyword:$"
CRLF DB 0AH,0DH,'$'
MSGN DB 0AH,0DH,"Number:$"
MSGU DB 0AH,0DH,"UpperCase:$"
MSGL DB 0AH,0DH,"LowerCase:$"
MSGO DB 0AH,0DH,"Others:$"
DATAAREA ENDS
STACKS SEGMENT
DW 50H DUP(?)
STACKS ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATAAREA,SS:STACKS
START:
PUSH DS
SUB AX,AX
PUSH AX
MOV AX,DATAAREA
MOV DS,AX
LEA DX,MSG
MOV AH,09H
INT 21H
LEA DX,STR
MOV AH,0AH
INT 21H
MOV CX,0
MOV NUMS,0
MOV UPCASES,0
MOV LOWCASES,0
MOV OTHERS,0
MOV CL,STR[SI+1]
INC SI
INC SI
COUNT:
MOV BL,STR[SI]
INC SI
CMP BL,'A'
JB NUMBER
CMP BL,'Z'
JNBE LOWER
UPPER:
INC UPCASES
LOOP COUNT
JMP PRINTS
NUMBER:
CMP BL,'0'
JB OTHERINC
CMP BL,'9'
JNBE OTHERINC
INC NUMS
LOOP COUNT
JMP PRINTS
LOWER:
CMP BL,'z'
JNBE OTHERINC
CMP BL,'a'
JB OTHERINC
INC LOWCASES
LOOP COUNT
JMP PRINTS
OTHERINC:
INC OTHERS
LOOP COUNT
PRINTS:
MOV BX,0
LEA DX,MSGN
MOV AH,09H
INT 21H
MOV BL,NUMS
CALL DISP
MOV BX,0
LEA DX,MSGU
MOV AH,09H
INT 21H
MOV BL,UPCASES
CALL DISP
MOV BX,0
LEA DX,MSGL
MOV AH,09H
INT 21H
MOV BL,LOWCASES
CALL DISP
MOV BX,0
LEA DX,MSGO
MOV AH,09H
INT 21H
MOV BL,OTHERS
CALL DISP
MOV AH,4Ch
INT 21H
RET
DISP PROC NEAR
MOV CL,4
MOV DL,BL
ROL DL,CL
AND DL,0FH
CMP DL,0AH
JB NEXT1
ADD DL,37H
JMP OK1
NEXT1:
ADD DL,30H
OK1:
MOV AH,02H
INT 21H
AND BL,0FH
MOV DL,BL
CMP DL,0AH
JB NEXT2
ADD DL,37H
JMP OK2
NEXT2:
ADD DL,30H
OK2:
MOV AH,02H
INT 21H
RET
DISP ENDP
CODE ENDS
END START
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -