那些突然想到的问题---EIP和PC的区别

我们都知道PC指针是指程序计数器(Program Counter),也称为指令指针(Instruction Pointer),是一种寄存器,用于存储计算机正在执行的指令的地址。在CPU执行程序时,PC指针会不断地更新,以指向下一条要执行的指令的地址。在程序执行过程中,PC指针的值决定了程序的执行顺序。那么我在读Linux0.11的代码的时候发现eip好像和pc有着一样的功能,那么他们两个的区别是什么呢。

首先eip是什么:

EIP是指扩展指令指针(Extended Instruction Pointer),也称为指令指针寄存器(Instruction Pointer Register),是x86架构CPU中的一个寄存器。它的作用和PC指针类似,用于存储当前正在执行的指令的地址。在32位操作系统中,EIP是32位的,而在64位操作系统中,EIP被扩展为RIP寄存器,是64位的。

EIP的值会在CPU执行指令时不断地更新,以指向下一条要执行的指令的地址。与PC指针不同的是,EIP还可以用于存储函数调用的返回地址。当函数调用时,EIP会被保存到堆栈中,函数执行完毕后,EIP会被弹出堆栈并跳转到该地址,继续执行调用该函数的指令。

在x86架构的计算机中,
程序计数器(PC)一般用于存储当前正在执行的指令的地址,
它是CPU中的一个寄存器,通常是一个32位的寄存器。
在函数调用时,PC指针可以被保存到堆栈中,
以便在函数返回时恢复现场,
但是它本身并不是专门用于存储函数返回地址的寄存器。

相对地,x86架构中的函数调用返回地址通常是存储在堆栈中的,
而不是存储在PC指针中。
在函数调用时,返回地址会被压入堆栈中,当函数执行完毕时,
程序会从堆栈中弹出返回地址,并跳转到该地址,继续执行原来的代码。
因此,堆栈在函数调用和返回过程中扮演了非常重要的角色,
用于存储函数调用的参数、局部变量和返回地址等信息。

其次是两者之间的区别和相同点:

EIP和PC都是指令指针寄存器,用于存储下一条要执行的指令的地址。它们的区别在于它们所处的体系结构和操作系统环境不同。

EIP是x86架构中的指令指针寄存器,用于存储下一条要执行的指令的地址。在x86架构的操作系统中,EIP寄存器的值可以通过调试器来查看和修改,这样就可以实现调试程序的功能。

PC是指PowerPC架构中的指令计数器,用于存储下一条要执行的指令的地址。在PowerPC架构的操作系统中,PC寄存器的值不能直接被修改,只能通过跳转指令、函数调用等方式来改变其值。

因此,EIP和PC的区别在于它们所处的体系结构和操作系统环境不同,以及它们的可修改性不同。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值