汇编语言实现字符串单词和数字统计
这里提供 x86 汇编语言的代码,可以在 Windows 上使用 MASM 汇编器编译运行。
.model flat, stdcall
option casemap:none
include \masm32\include\kernel32.inc
includelib \masm32\lib\kernel32.lib
include \masm32\include\msvcrt.inc
includelib \masm32\lib\msvcrt.lib
.data
prompt db '请输入字符串: ',0
buffer db 256 dup(0)
word_count dd 0
number_count dd 0
is_word db 1 ; 标记当前字符是否为单词
is_number db 0 ; 标记当前字符是否为数字
.code
start:
; 输出提示信息
invoke StdOut, addr prompt
; 读取输入字符串
invoke gets, addr buffer
; 遍历字符串
mov esi, offset buffer
mov ecx, 0
mov word_count, 0
mov number_count, 0
mov is_word, 1
loop_start:
mov al, byte ptr [esi]
cmp al, 0 ; 判断是否到字符串结尾
je loop_end
; 判断当前字符类型
cmp al, '0'
jl is_word_char
cmp al, '9'
jle is_number_char
is_word_char:
cmp is_word, 0
je continue_loop
mov is_word, 0
inc word_count
jmp continue_loop
is_number_char:
cmp is_word, 1
je continue_loop
mov is_word, 1
inc number_count
jmp continue_loop
continue_loop:
inc esi
jmp loop_start
loop_end:
; 输出结果
invoke StdOut, addr buffer
invoke crt_printf, addr buffer, word_count
invoke StdOut, addr buffer
invoke crt_printf, addr buffer, number_count
invoke ExitProcess, 0
end start
这个程序会先输出一个提示信息,要求用户输入一个字符串。然后它会遍历输入的字符串,并根据空格分隔出单词和数字,分别统计它们的个数。最后输出结果。
需要注意的是,这个程序只能处理长度不超过 256 个字符的输入字符串,如果需要处理更长的字符串,需要修改代码以支持动态内存分配。
原文地址: https://www.cveoy.top/t/topic/ol0E 著作权归作者所有。请勿转载和采集!