用汇编语言写一个程序,它先接收一个字符串,然后显示其中数字符的个数、英文字母的个数和字符
时间: 2024-02-12 18:06:26 浏览: 164
以下是 x86 汇编语言的示例代码,实现了接收一个字符串并显示其中数字符、英文字母和其他字符的个数:
```
section .data
str db 1000 ; 存储输入的字符串
digits db 0 ; 存储数字符个数
letters db 0 ; 存储英文字母个数
others db 0 ; 存储其他字符个数
prompt db "请输入一个字符串:", 0
digit_msg db "数字个数:", 0
letter_msg db "字母个数:", 0
other_msg db "其他字符个数:", 0
newline db 10, 0 ; 换行符
section .text
global _start
_start:
; 输出提示信息
mov eax, 4
mov ebx, 1
mov ecx, prompt
mov edx, 17
int 0x80
; 读取输入的字符串
mov eax, 3
mov ebx, 0
mov ecx, str
mov edx, 1000
int 0x80
; 统计字符个数
xor eax, eax
xor ebx, ebx
mov bl, byte [str + eax]
count_loop:
cmp bl, 0
je count_done
cmp bl, '0'
jl count_letter
cmp bl, '9'
jg count_letter
inc byte [digits]
jmp count_next
count_letter:
cmp bl, 'A'
jl count_other
cmp bl, 'Z'
jg count_lower
inc byte [letters]
jmp count_next
count_lower:
add bl, 32
inc byte [letters]
jmp count_next
count_other:
inc byte [others]
count_next:
inc eax
mov bl, byte [str + eax]
jmp count_loop
count_done:
; 输出统计结果
mov eax, 4
mov ebx, 1
mov ecx, digit_msg
mov edx, 12
int 0x80
mov eax, 4
mov ebx, 1
mov ecx, digits
mov edx, 1
int 0x80
mov eax, 4
mov ebx, 1
mov ecx, newline
mov edx, 1
int 0x80
mov eax, 4
mov ebx, 1
mov ecx, letter_msg
mov edx, 13
int 0x80
mov eax, 4
mov ebx, 1
mov ecx, letters
mov edx, 1
int 0x80
mov eax, 4
mov ebx, 1
mov ecx, newline
mov edx, 1
int 0x80
mov eax, 4
mov ebx, 1
mov ecx, other_msg
mov edx, 16
int 0x80
mov eax, 4
mov ebx, 1
mov ecx, others
mov edx, 1
int 0x80
; 退出程序
mov eax, 1
xor ebx, ebx
int 0x80
```
该程序使用 Linux 系统调用来实现输入输出。它首先输出提示信息,然后使用 `read` 系统调用读取输入的字符串。接下来,程序遍历字符串中的每个字符,判断其是否为数字、字母或其他字符,并分别更新计数器的值。最后,程序使用 `write` 系统调用输出统计结果,并使用 `exit` 系统调用退出程序。
阅读全文