Y86 指令将pushl
堆栈指针减 4 并将寄存器值写入内存。所以不清楚处理器在执行指令时应该做什么pushl %esp
,因为被推送的寄存器正在被同一条指令改变。可能发生两种可能的事件:
(1) 推动 的原始值%esp
,或 (2) 推动 的减量值%esp
。
鉴于此,我们如何修改此代码等效项pushl REG
以解释和适应这些歧义(因为 REG 可以是 %esp 以及任何其他寄存器)?:
subl $4,%esp Decrement stack pointer
movl REG,(%esp) Store REG on stack
类似地,指令popl %esp
可以设置%esp
为从内存中读取的值,也可以设置为递增的堆栈指针。如何更改此代码以适应这些歧义?:
movl (%esp),REG Read REG from stack
addl $4,%esp Increment stack pointer