使用8086汇编语言输入一组字符串,统计该字符串中的大写字母、小写字母和数字的个数,保存在内存变量中,并在屏幕上显示
时间: 2023-06-12 12:03:38 浏览: 1062
以下是使用8086汇编语言实现输入字符串并统计的代码:
```
.MODEL SMALL
.STACK 100H
.DATA
STR_INPUT DB 100 DUP ('$') ; 输入的字符串
STR_LEN DB 0 ; 字符串长度
UPPER_COUNT DB 0 ; 大写字母个数
LOWER_COUNT DB 0 ; 小写字母个数
DIGIT_COUNT DB 0 ; 数字个数
.CODE
MAIN PROC
MOV AX, @DATA
MOV DS, AX
; 读取用户输入的字符串
LEA DX, STR_INPUT
MOV AH, 0Ah
INT 21h
; 计算字符串长度
MOV CX, 0
MOV SI, OFFSET STR_INPUT + 1
MOV AL, [SI]
CMP AL, '$'
JZ CALC_COUNT
COUNT_LEN:
INC CX
INC SI
MOV AL, [SI]
CMP AL, '$'
JNZ COUNT_LEN
MOV STR_LEN, CL
CALC_COUNT:
; 统计大写字母、小写字母、数字的个数
MOV CX, 0
MOV SI, OFFSET STR_INPUT + 2
MOV BL, 'A'
MOV BH, 'Z'
UPPER_LOOP:
MOV AL, [SI]
CMP AL, '$'
JE DISPLAY_COUNT
CMP AL, BL
JB UPPER_NEXT
CMP AL, BH
JA UPPER_NEXT
INC UPPER_COUNT
UPPER_NEXT:
INC SI
JMP UPPER_LOOP
MOV CX, 0
MOV SI, OFFSET STR_INPUT + 2
MOV BL, 'a'
MOV BH, 'z'
LOWER_LOOP:
MOV AL, [SI]
CMP AL, '$'
JE DISPLAY_COUNT
CMP AL, BL
JB LOWER_NEXT
CMP AL, BH
JA LOWER_NEXT
INC LOWER_COUNT
LOWER_NEXT:
INC SI
JMP LOWER_LOOP
MOV CX, 0
MOV SI, OFFSET STR_INPUT + 2
MOV BL, '0'
MOV BH, '9'
DIGIT_LOOP:
MOV AL, [SI]
CMP AL, '$'
JE DISPLAY_COUNT
CMP AL, BL
JB DIGIT_NEXT
CMP AL, BH
JA DIGIT_NEXT
INC DIGIT_COUNT
DIGIT_NEXT:
INC SI
JMP DIGIT_LOOP
DISPLAY_COUNT:
; 在屏幕上显示统计结果
MOV AH, 09h
LEA DX, MSG_UPPER
INT 21h
MOV AL, UPPER_COUNT
ADD AL, '0'
MOV AH, 02h
INT 21h
MOV DL, ',' ; 分隔符
MOV AH, 02h
INT 21h
MOV AH, 09h
LEA DX, MSG_LOWER
INT 21h
MOV AL, LOWER_COUNT
ADD AL, '0'
MOV AH, 02h
INT 21h
MOV DL, ','
MOV AH, 02h
INT 21h
MOV AH, 09h
LEA DX, MSG_DIGIT
INT 21h
MOV AL, DIGIT_COUNT
ADD AL, '0'
MOV AH, 02h
INT 21h
MOV AH, 4ch
INT 21h
.DATA
MSG_UPPER DB '大写字母个数:$'
MSG_LOWER DB '小写字母个数:$'
MSG_DIGIT DB '数字个数:$'
END MAIN
```
在这段代码中,我们首先使用 `INT 21h` 的 `0Ah` 功能读取用户输入的字符串,并计算出字符串的长度。然后,我们使用 `MOV` 指令将字符串的内存地址和长度分别赋值给 `SI` 和 `CX` 寄存器,依次遍历字符串中的每个字符,并根据 ASCII 码值判断是否是大写字母、小写字母或数字。统计完成后,使用 `INT 21h` 的 `09h` 功能在屏幕上显示结果。
注意:由于输入的字符串末尾包含 `$` 符号,因此在遍历字符串时需要先跳过该字符。
阅读全文