汇编统计字符串中个数
时间: 2023-07-16 09:17:03 浏览: 52
以下是 x86 架构的汇编代码,实现统计字符串中每个字符出现的次数:
```
section .data
str db "hello, world!", 0
count db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
section .text
global _start
_start:
mov ecx, 0 ; ecx 存储当前字符
mov esi, str ; esi 存储字符串地址
mov edi, count ; edi 存储计数数组地址
count_loop:
cmp byte [esi], 0 ; 比较当前字符是否为字符串结尾符号
je exit
movzx ecx, byte [esi] ; 将字符转换成整数
inc byte [edi + ecx] ; 对应计数数组加 1
inc esi ; 指向下一个字符
jmp count_loop
exit:
; 输出计数数组
mov ecx, 16
mov esi, count
print_loop:
movzx edx, byte [esi]
push ecx
push edx
mov ecx, msg
call printf
add esp, 8
dec ecx
cmp ecx, 0
jne print_loop
; 退出程序
mov eax, 1
xor ebx, ebx
int 0x80
section .data
msg db "%c: %d\n", 0
```
以上代码会将字符串 "hello, world!" 中每个字符出现的次数存储在计数数组中,然后逐个输出每个字符及其出现次数。需要注意的是,计数数组中每个元素都需要初始化为 0。