Intel 64/x86_64/x86/IA-32处理器的指令指针(IP/EIP/RIP)

Instruction Pointer

指令指针IP/EIP/RIP的基本功用是指向要执行的下一条地址。在8080 8位微处理器上的寄存器名称是PC(program counter,程序计数器),从8086起,被称为IP(instruction pointer,指令指针)。主要区别在与PC指向正在执行的指令,而IP指向下一条指令。

指令指针EIP寄存器包含了当前代码段中的一个偏移量,通过CS:EIP联合指向了即将执行的下一条指令。对于顺序执行的指令,EIP从前一条指令边界移到下一条指令边界上;对于控制转移指令,例如JMP,Jcc,CALL,RET和IRET指令,EIP会向前或先后跳跃数条指令。

软件不能直接访问(即读取/修改)EIP寄存器;但是可以隐式地通过控制转移指令(JMP,Jcc,CALL和RET),中断,和异常来间接控制EIP。要想读取到EIP寄存器的值,唯一的手段是执行CALL指令,然后从程序栈中读取返回指令指针。通过修改程序栈中返回指令指针的值,然后执行RET或IRET指令,可以间接的加载EIP寄存器。

所有的IA-32处理器都预取指令。指令预取过程中,通过总线读取的指令地址并不一定等于EIP寄存器的值。尽管各代处理器都有各自的预取机制,但是EIP寄存器用于控制程序流这个基本功能在各代处理器间保持了完全的兼容性。

Instruction Pointer in 64-Bit Mode

在64位模式下,指令指针是RIP寄存器。这个寄存器保持着下一条要执行的指令的64位地址偏移量。64位模式支持一种新的寻址模式,被称为RIP相对寻址。使用这个模式,有效地址的计算方式变为RIP(指向下一条指令)加上位移量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值