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

"CMPL" -> Based mode into indirect addressing mode

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

我已经做到了

movl [=11=], 0(%esp)

进入

addl [=12=], %esp
movl [=12=], (%esp)
addl $-0, %esp

适用于所有情况。

但是我不能用

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

我明白比较不等于移动。 但是有谁知道最后一行的简单版本会是什么样子? 提前致谢

虽然是同样的逻辑:

movl %esp, %eax
addl , %eax
cmpl , (%eax)

注意我临时使用 eax。您可以移动堆栈指针,但这是个坏主意,而且当您尝试恢复它时它也会弄乱标志。无论如何你都需要一个临时的,例如:

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

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