当前位置:首页 > 技术学院 > 基础知识科普站
[导读]指令指针寄存器IP(X86型CPU)相当于ARM型CPU中的程序计数器PC,用于控制程序中指令的执行顺序。正常运行时,IP中含有BIU要取的下一条指令(字节)的偏移地址,一般情况下,每从内存中存取一次指令码,IP就自动加1,从而保证指令的顺序执行。IP实际上是指令机器码存放内存单元的地址指针,IP的内容可以被转移类指令(如JMP)强迫改写,以改变程序执行的顺序。注意!我们编制的程序不能直接访问IP,即不能用指令去取出IP的值或给IP设定值(如不能用mov指令给IP赋值)。

指令指针寄存器EIP中存放下一条将要执行指令的偏移量(offset ),这个偏移量是相对于目前正在运行的代码段寄存器CS而言的。偏移量加上当前代码段的基地址,就形成了下一条指令的地址。EIP中的低16位可以分开来进行访问,给它起名叫指令指针IP寄存器,用于16位寻址。

指令指针寄存器ip,里面放置的是不是指令,而是一个指向下一个将要去获取的指令的内存地址(所以它是一个指针)。

它们的关系就是,CPU从指令指针寄存器ip 获得指令的内存地址,然后取出指令,放置到指令寄存器IR。接下来,指令指针寄存器ip自己加1(也就是指向下一条指令)。

指令指针寄存器和指针寄存器的差异

指令指针寄存器

指令指针寄存器及其与指针寄存器的关系

32位CPU把指令指针扩展到32位,并记作EIP,EIP的低16位与先前CPU中的IP作用相同。

指令指针EIP、IP(InstrucTIon Pointer)是存放下次将要执行的指令在代码段的偏移量。在具有预取指令功

能的系统中,下次要执行的指令通常已被预取到指令队列中,除非发生转移情况。所以,在理解它们的功能

时,不考虑存在指令队列的情况。

在实方式下,由于每个段的最大范围为64K,所以,EIP中的高16位肯定都为0,此时,相当于只用其低16位

的IP来反映程序中指令的执行次序。

指针寄存器

32位CPU有2个32位通用寄存器EBP和ESP。其低16位对应先前CPU中的SBP和SP,对低16位数据的存取,不影

响高16位的数据。

寄存器EBP、ESP、BP和SP称为指针寄存器(Pointer Register),主要用于存放堆栈内存储单元的偏移量,

用它们可实现多种存储器操作数的寻址方式,为以不同的地址形式访问存储单元提供方便。

指针寄存器不可分割成8位寄存器。作为通用寄存器,也可存储算术逻辑运算的操作数和运算结果。

它们主要用于访问堆栈内的存储单元,并且规定:

BP为基指针(Base Pointer)寄存器,用它可直接存取堆栈中的数据;

SP为堆栈指针(Stack Pointer)寄存器,用它只可访问栈顶。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读
关闭