gpt4 book ai didi

assembly - 在汇编 x86 中查找字符串中的出现

转载 作者:行者123 更新时间:2023-12-01 09:17:22 31 4
gpt4 key购买 nike

我一直在做这个程序,我必须输入一个字符串,然后显示该字符串中的字符分布。

例如:
如果输入是“minecode”,则输出应该是

C – 1
O – 1
D – 1
E – 2
I – 1
M – 1
N – 1

这是我尝试做的,但我真的不知道如何遍历循环并检查相似的字符,然后增加计数。汇编器是在 32 位机器上运行的 MASM 615。

.686
.MODEL flat, stdcall
.STACK
INCLUDE Irvine32.inc
.DATA
msg0 BYTE "Enter a string of characters: ",0
msg1 BYTE "Character Distribution: ",0
MainArray dword 10000 dup (?)
UniqueChar dword 10000 dup (?)
CharCount dword 10000 dup (?)
.CODE
MAIN PROC
lea edx, msg0
call WriteString
call dumpregs ; 1
call ReadString
mov MainArray, eax
call dumpregs ; 2
mov MainArray, ebx
call dumpregs ; 3
call CRLF
lea edx, msg1
call WriteString
call CharDist ; Calls the procedure
call dumpregs ; 5
exit
MAIN ENDP
CharDist PROC
mov ecx, lengthof MainArray
mov esi, OFFSET MainArray
L1:
; what to do here??
Loop L1:
CharDist ENDP
END MAIN

最佳答案

一种可能的方法:创建一个由 256 个计数器组成的数组,将其基地址存储在 ebx 中,然后对于字符串中的每个字节,将计数器从 ebx 的偏移量处递增>。然后,循环遍历您的计数器数组并打印非零计数。

你永远不会说这是一个以 0 字节结尾的字符串(C 风格),一个以它的长度开头的字符串(Pascal 风格),还是一个长度作为第二个传入的字符串参数,但这将决定您何时终止循环。如果您正在寻找终止零,请测试您刚刚读取的字节,如果您正在计算特定数量的字节,请保留 ecx 中剩余的字节数并进行测试。 (如果 ecx 不为零,则有条件分支的特殊说明,如果您喜欢使用它们。)

如果您将指向字符串的指针保留在 esi 中,则可以使用 lodsb 指令将下一个字节加载到 al 中。或者,您可以从 [esi] 中的 mov,然后是 inc esi。如果在将每个字节存储到 al 之前将 eax 清零,这将在 eax 中为您提供一个索引,您可以将其与计数器数组一起使用.

关于assembly - 在汇编 x86 中查找字符串中的出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40797133/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com