【发布时间】:2015-09-29 18:44:28
【问题描述】:
对于这个看似无害且简单的问题,我很难找到答案。我希望使用 cmp 或其衍生物之一(cmpl、cmpb 等)来比较 GAS 汇编程序中的两个值。问题是,当我进行多次比较时,结果应该不同,它们的结果是一样的。我相信这涉及我对如何将数据与 cmp 操作进行比较的误解。
情况如下:
我有一个填充变量来接受这样的输入,用一个 equ 来保存大小:
buff: .fill 20
.equ bufLen, .-buff
然后我把bufLen变量放到一个寄存器里,比较值放到另一个寄存器里:
movl $bufLen, %eax
movl $0x03, %ebx
最后,我比较,如果比较相等,跳转到另一行:
cmpl %eax, %ebx
je anotherplace
但是,当我比较长度为 2 和 4 的输入时,它们都小于(我将 je 更改为 jl 以进行快速调试)。谁能告诉我我做错了什么或指出我错过的问题可能会告诉我我是如何搞砸的?
提醒一下,这是 GAS 组装架构。
非常感谢所有帮助。
【问题讨论】:
-
你能发布你的整个代码吗?至少MCVE...
-
@DanielKamilKozar 我最初也怀疑这一点,但是因为当我尝试“je”时它不起作用,这与它们的顺序无关,我倾向于相信操作顺序不正确。此外,我对操作顺序的理解与您的解释相符。
-
@Enzo Ferber 这是完整的相关代码。创建缓冲区大小变量,然后将其与 3 进行比较。唯一缺少的是通常的形式,例如 .globl _start 和 .section .data 顶部。
-
@MichaelPetch 你能详细说明一下吗?恐怕我还很陌生,很难完全理解装配。我被告知您可以使用带 $ 或不带 $ 的变量名,但有什么区别?
-
其实我看错了你的代码,忘了你看到我的评论