【发布时间】:2018-08-07 22:40:01
【问题描述】:
pushlY86 指令将堆栈指针减 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
【问题讨论】:
-
我记得这在 8086 的步进之间发生了变化,但与 y86 无关。