0


操作系统之寄存器

  • 说到寄存器,首先我们需要知道寄存器是什么?- 寄存器就是CPU内部用来存储数据的小型存储区域,用来暂时存放参与运算的数据以及运算的结果、一些CPU运行所需要的信息。

  • 那我们又为什么需要用到寄存器呢?- 每一组CPU都有需要执行的特定指令集。因此X86的CPU不能执行ARM的程序,同样,ARM的CPU也不能执行X86的程序。- 此时,从内存获取访问的数据要比执行指令的时间长。- 因此所有的 CPU 内部都会包含一些寄存器来保存关键变量和临时结果

  • 那有了寄存器之后呢?- 指令集中通常会有一些指令用于把关键字从内存中加载到寄存器中,以及把关键字从寄存器存入到内存中。- 还有一些其他的指令会把来自寄存器和内存的操作数进行组合,例如 add 操作就会把两个操作数相加并把结果保存到内存中。

  • 为了跟上我们汇编大佬的脚步,当然需要了解一些寄存器- 首当其冲的就是通用寄存器- 这类寄存器是执行代码中最常用,也是最最基础的寄存器。- 程序在执行过程中,绝大部分时间都是操作这类寄存器来执行指令的,实现指令的功能的- 通用寄存器的长度取决于机器的字长- 16位cpu通用寄存器共有 8 个: - AX:累加器,可用于乘、除、输入/输出以及中间结果的缓存等操作,- BX:基址寄存器,用于存储器指针- CX:计数器,用于串操作、循环控制的计数器- DX- BP:基址寄存器/基指针- SP:堆栈指针- SI:变址寄存器- DI:变址寄存器- 32位cpu通用寄存器共有 8 个: EAX,EBX,ECX,EDX,EBP,ESP,ESI,EDI功能和上面差不多 - EAX: 通常用来执行加法,函数调用的返回值一般也放在这里面- EBX: 数据存取- ECX: 通常用来作为计数器,比如for循环- EDX: 读写I/O端口时,EDX用来存放端口号- ESP: 栈顶指针,指向栈的顶部- EBP: 栈底指针,指向栈的底部,通常用EDP+偏移量的形式来定位函数存放在栈中的局部变量- ESI:字符串操作时,用于存放数据源的地址- EDI: 字符串操作时,用于存放目的地址的,和ESI两个经常搭配一起使用,执行字符串的复制等操作- 然后就是标志寄存器(难哭,都是一些关于计算的问题)- “人如其名”,既然名字叫做标志寄存器,当然里面会有众多的标志位,这些标志位记录了CPU执行指令过程中的一系列状态在这里插入图片描述- 6个状态标志位- CF—进位标志,加法时的最高位(第7位或第15位)产生进位或减法时最高位出现借位,则CF=1,否则CF=0;- AF—辅助进位标志,供BCD码使用。当(第3位)出现进位或借位时AF=1,否则AF=0;- OF—溢出标志,带符号数进行算术运算时,其结果超出了8位或16位的表示范围,产生溢出,则OF=1,否则OF=0;- ZF—零标志,运算结果各位都为零,则ZF=1,否则ZF=0;- SF—符号标志,运算结果为负数时,即运算结果的最高位为1,则SF=1,否则SF=0;- PF—奇偶标志,反映操作结果中“1”的个数的情况,若有偶数个“1”,则PF=1,否则PF=0。- 3个控制标志位- DF—方向标志,用来控制数据串操作指令的步进方向;当设置DF=1时,将以递减顺序对数据串中的数据进行处理。当设置DF=0时,递增。- IF—中断允许标志,当设置IF=1,开中断,CPU可响应可屏蔽中断请求;当设置IF=0时,关中断,CPU不响应可屏蔽中断请求。- TF—陷阱标志,为程序调试而设的。当设置TF=1,CPU处于单步执行指令的方式;当设置TF=0时,CPU正常执行程序。- (这是别人写的一篇非常好的关于标志寄存器的文章(http://blog.csdn.net/wangkehuai/article/details/7337328) ,很惭愧本人学的不精)- 第三个指令寄存器- 又是一个“长得像名字一样的”,所以,指令寄存器,就是用于暂存当前正在执行的指令。- 根据指令在存贮器中的地址(由指令地址计数器给出),把指令从存贮器中取出来之后,放在专门用于存放指令的地方–指令寄存器,对指令进行分析和执行,同时指令寄存器继续指向下面一条指令,如此不断重复。- 第四个段寄存器- 16位的寄存器能寻址的范围是64KB,通过引入段的概念,将内存空间划分为不同的区域:分段,通过段基址+段内偏移段方式来寻址。- 段寄存器有6个 - CS: 代码段寄存器。存放当前正在运行的程序代码所在段的段基址,表示当前使用的指令代码可以从该段寄存器指定的存储器段中取得,相应的偏移量则由IP提供。- DS: 数据段寄存器。指出当前程序使用的数据所存放段的最低地址,即存放数据段的段基址。- SS: 栈段寄存器。指出当前堆栈的底部地址,即存放堆栈段的段基址。- ES: 扩展段寄存器。指出当前程序使用附加数据段的段基址,该段是串操作指令中目的串所在的段。- FS: 数据段寄存器- GS: 数据段寄存器

以上就是全部要介绍的寄存器了,需要说明一下的是,这并不是x86CPU全部所有的寄存器,除了这些,还存在调试寄存器、描述符寄存器、任务寄存器、模型特定寄存器等。


本文转载自: https://blog.csdn.net/m0_51343267/article/details/122087261
版权归原作者 阿桑同学. 所有, 如有侵权,请联系我们删除。

“操作系统之寄存器”的评论:

还没有评论