gpt4 book ai didi

assembly - 如何使用 FASM 比较 x86 汇编中的两个字符串?

转载 作者:行者123 更新时间:2023-12-02 21:36:38 27 4
gpt4 key购买 nike

我想将寄存器 si 中存储的用户输入与另一个字符串进行比较。
顺便说一句,我正在使用 FASM。这是用户输入后到目前为止我的代码。
如果我使用 repe cmpsb 命令,我知道我必须使用额外的段,但我不知道如何使用。 repe cmpsb 命令不适用于此代码。

.input_done:
cmp si, 0
je no_input
jmp short .compare_input


.compare_input:
mov cx, 20 ;For the repe cmpsb command.
cld
mov di, info ;The string I want to compare.
mov es, di
mov di, info
repe cmpsb
cmp cx, 0
je showinfo
.showinfo:
... ;The output string if both string are the same.

info db "info", 0

最佳答案

mov di, info ;The string I want to compare.
mov es, di

对于一个简单的程序来说,两个字符串可能会存储在同一个内存段中。只需将 DS 中的值放入 ES 即可。

...
push ds
pop es
mov di, info
...
<小时/>

And the repe cmpsb command doesn't work with this code.

您已将计数器 CX 设置为固定数字 20,其中至少一个字符串(“info”)只有 4 个字符。难怪比较失败。

<小时/>

由于您想要比较相等性,因此第一步是查看两个字符串是否具有相同的长度。如果没有,您已经知道答案了。
如果它们的长度相同,则将其用作计数器CX

; String1 pointer in DS:SI, length in CX
; String2 pointer in ES:DI, length in DX

cmp cx, dx
jne NotEqual
repe cmpsb
jne NotEqual
Equal: ; .showinfo:
... ; The output string if both string are the same.
; Don't fall through here!!!
NotEqual:
...

关于assembly - 如何使用 FASM 比较 x86 汇编中的两个字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47366160/

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