"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
,因为它们需要堆栈指针。
所以我正在处理这个文件。我必须将复杂的寻址模式转换为简单的寻址模式。
我已经做到了
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
,因为它们需要堆栈指针。