通过键盘任意输入一个字符串,保存在数据段中STR2开始的区域并统计输入的字符串的数字字符、英文字符的个数分别存入变量NUM、ENG中汇编语言
时间: 2024-05-06 17:19:29 浏览: 88
数据段声明:
DATA SEGMENT
STR1 DB 100 DUP('$') ; 输入的字符串
STR2 DB 100 DUP('$') ; 存储字符串
NUM DW ? ; 数字字符个数
ENG DW ? ; 英文字符个数
DATA ENDS
代码实现:
ASSUME CS:CODE, DS:DATA
CODE SEGMENT
START:
MOV AX, DATA
MOV DS, AX ; 初始化数据段
; 输入字符串
LEA DX, STR1
MOV AH, 0Ah
INT 21h
; 复制字符串到STR2
MOV SI, OFFSET STR1+1 ; 跳过长度
MOV DI, OFFSET STR2+1 ; 跳过长度
MOV CL, [STR1] ; 获取长度
ADD CL, SI ; 计算结束位置
COPY_LOOP:
MOV AL, [SI]
MOV [DI], AL
INC SI
INC DI
CMP SI, CL
JBE COPY_LOOP
; 统计数字字符和英文字符个数
XOR AX, AX
MOV CX, OFFSET STR2+1 ; 从第一个字符开始扫描
COUNT_LOOP:
MOV AL, [CX]
CMP AL, '$' ; 字符串结束
JE COUNT_END
CMP AL, '0'
JB NEXT_CHAR
CMP AL, '9'
JA LETTER
INC NUM ; 数字字符
JMP NEXT_CHAR
LETTER:
CMP AL, 'a'
JB NEXT_CHAR
CMP AL, 'z'
JA CAPITAL
INC ENG ; 小写字母
JMP NEXT_CHAR
CAPITAL:
CMP AL, 'A'
JB NEXT_CHAR
CMP AL, 'Z'
JA NEXT_CHAR
INC ENG ; 大写字母
NEXT_CHAR:
INC CX
JMP COUNT_LOOP
COUNT_END:
; 显示结果
MOV AH, 09h
LEA DX, MSG1
INT 21h
MOV AH, 02h
MOV DL, '0'
ADD DL, NUM
INT 21h
LEA DX, MSG2
INT 21h
MOV DL, '0'
ADD DL, ENG
INT 21h
; 程序结束
MOV AH, 4Ch
INT 21h
CODE ENDS
MSG1 DB '数字字符个数:$'
MSG2 DB 0Dh, 0Ah, '英文字符个数:$'
说明:
- 输入的字符串保存在STR1中,长度保存在第一个字节中。
- 复制字符串到STR2中,长度不复制。
- 统计数字字符和英文字符个数,使用循环扫描字符串,每次比较一个字符。
- 显示结果,使用INT 21h中断调用显示数字字符个数和英文字符个数。
- 程序结束,使用INT 21h中断调用结束程序。
相关推荐
















