“CMPL” - >基于模式进入间接寻址模式

时间:2015-05-14 14:06:54

标签: assembly x86 cmp addressing

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

我成功了

movl $0, 0(%esp)

进入

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

对所有情况都很好。

但是我不能用

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

我理解比较与移动不一样。 但有谁知道最后一行的简单版本会是什么样子? Thx提前

1 个答案:

答案 0 :(得分:1)

但它的逻辑是相同的:

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,因为那些需要堆栈指针。