在 x86 中,IP 寄存器(英特尔的 PC 名称)没有明确定义的值,除了
- 当它通过调用、中断或故障写入堆栈时,在这种情况下,它具有完成执行的最后一条指令之后的指令的地址。
- 当它用于 IP 相对寻址时,在这种情况下,它具有包含 IP 相对地址的指令后面的指令的地址。
- 其他我不会在这里讨论的情况,例如任务切换。
由于流水线,在任何情况下都与获取的最后一条指令无关。事实上,可以同时执行多个具有 IP 相对地址的指令,并且每个指令在其地址计算中使用不同的 IP 值。
(我认为 MIPS 也是如此,但我不能说。)