使用8086汇编语言,输入一个字符串,再输入一个字符,统计该字符在字符串里出现的次数在屏幕上输出。
时间: 2024-11-04 22:09:56 浏览: 4
使用汇编语言,输入字符串,统计其总字符数、字母数、数字数、其他数并输出
在8086汇编语言中,我们可以使用指令如MOV (用于数据移动)、CMP (比较)、IN (从输入设备读取)、OUT (向输出设备写入)以及ALU指令(如ADD,用于计数)来完成这个任务。下面是一个简化的示例程序,它使用循环结构遍历字符串并计数:
```assembly
section .data
str db 'Hello, World!', 0 ; 定义一个字符串常量
char db '?' ; 用户要查找的字符
count dw 0 ; 初始化计数器
section .bss
input resb 1 ; 用户输入的字符暂存区
section .text
global _start
_start:
; 提示用户输入字符
mov ah, 09h
lea dx, [msg_input]
int 21h
; 读取用户输入
mov ah, 01h
int 21h
mov [input], al
loop_string:
; 比较当前字符与目标字符
mov al, [str] ; 取出字符串中的字符
cmp al, [input] ; 与用户输入的字符做比较
jne not_found ; 如果不相等,跳过计数并继续下一位
inc byte [count] ; 相同则增加计数
jmp next_char ; 继续检查下一个字符
not_found:
; 字符不在字符串中,跳出循环
jmp end_loop
next_char:
inc si ; 移动到下一个字符的位置
end_loop:
cmp si, str+strlen(str) ; 判断是否已遍历完字符串
jl loop_string ; 如果未到达字符串结尾,继续循环
; 输出结果
mov ah, 02h ; 显示计数值
lea dx, [msg_count]
int 21h
; 退出程序
mov ah, 4Ch
xor al, al
int 21h
msg_input db '请输入一个字符:', 0Dh, 0Ah, '$'
msg_count db '字符', char, '在字符串中出现了', count, '次.', 0Dh, 0Ah, '$'
strlen proc near
; 计算字符串长度的子例程
xor cx, cx
mov cl, byte [esi]
loop strlen
ret
strlen endp
```
此程序首先提示用户输入一个字符,然后逐个比较字符串中的每个字符,如果找到相同的,就增加计数器。最后,显示计数结果并退出。
阅读全文