"CMPL" -> 模式转换为间接寻址模式



,所以我正在处理此文件。我必须将复杂的地址模式转换为简单的地址模式。

我已经设法做

movl $0, 0(%esp)

进入

addl $0, %esp
movl $0, (%esp)
addl $-0, %esp

在所有情况下都很好。

但是我不能用

做同样的事情
cmpl $4, 28(%esp)

我知道比较与动作不同。但是有人知道最后一行的简单版本如何?提前THX

它是相同的逻辑:

movl %esp, %eax
addl $28, %eax
cmpl $4, (%eax)

注意,我将eax用作临时性。您可以移动堆栈指针,但这是坏主意,当您尝试恢复时,它也会弄乱旗帜。无论如何,您都需要一个临时性,例如:

addl $28, %esp
movl (%esp), %eax
addl $-28, %esp
cmpl $4, %eax

您当然可以使用lea,因为这不会修改标志,但是显然您被禁止使用复杂的地址模式。您也不能使用pushf/popf,因为这些需要堆栈指针。

最新更新