x86架构CPU寄存器介绍

8086CPU组成(16位)

CPU包括三个部分,运算单元、数据单元和控制单元。

  • 运算单元
    运算单元只管算,例如做加法、做位移等等。但是,它不知道应该算哪些数据,运算结果应该放在哪里。
  • 数据单元
    数据单元包括CPU内部的缓存和寄存器组,空间很小,但是速度飞快,可以暂时存放数据和运算结果。
    AX、BX、CX、DX、SP、BP、SI、DI。共8个16位通用寄存器
    这些寄存器主要用于在计算过程中暂存数据。
    其中AX、BX、CX、DX可以分成两个8位的寄存器来使用,分别是AH、AL、BH、BL、CH、CL、DH、DL,其中H就是High(高位),L就是Low(低位)的意思。
  • 控制单元
    控制单元是一个统一的指挥中心,它可以获得下一条指令,然后执行这条指令。这个指令会指导运算单元取出数据单元中的某几个数据,计算出个结果,然后放在数据单元的某个地方。
    IP寄存器就是指令指针寄存器(Instruction Pointer Register),指向代码段中下一条指令的位置。CPU会根
    据它来不断地将指令从内存的代码段中,加载到CPU的指令队列中,然后交给运算单元去执行。
    4个16位的段寄存器,分别是CS、DS、SS、ES
    CS和DS中都存放着一个段的起始地址。代码段的偏移量在IP寄存器中,数据段的偏移量会放在通用寄存
    器中。
    8086的地址总线地址是20位。怎么凑够这20位呢?方法就是“起始地址*16+偏移量”,也就是把CS和DS中的值左移4位,变成20位的,加上16位的偏移量,这样就可以得到最终20位的数据地址。
    一个段最大的大小是2^16=64k
  • 工作过程
    CPU的控制单元里面,有一个指令指针寄存器,它里面存放的是下一条指令在内存中的地址。控制单元会不停地将代码段的指令拿进来,先放入指令寄存器。
    当前的指令分两部分,一部分是做什么操作,例如是加法还是位移;一部分是操作哪些数据。
    要执行这条指令,就要把第一部分交给运算单元,第二部分交给数据单元。
    数据单元根据数据的地址,从数据段里读到数据寄存器里,就可以参与运算了。运算单元做完运算,产生的结果会暂存在数据单元的数据寄存器里。最终,会有指令将数据写回内存中的数据段。

32位CPU组成

在这里插入图片描述

  • 对比16位的区别
    ① 通用寄存器和指令指针寄存器IP,扩展成32位的,同样也兼容16位的。
    ② 段寄存器(Segment Register)不兼容。CS、SS、DS、ES仍然是16位的,但是不再是段的起始地址。段的起始地址放在内存的某个地方。这个地方是一个表格,表格中的一项一项是段描述符(Segment Descriptor)。这里面才是真正的段的起始地址。而段寄存器里面保存的是在这个表格中的哪一项,称为选择子(Selector)。这样,将一个从段寄存器直接拿到的段起始地址,就变成了先间接地从段寄存器找到表格中的一项,再从表格中的一项中拿到段起始地址。
    ③ 我们将前一种模式称为实模式(Real Pattern),后一种模式称为保护模式 (Protected Pattern),通过切换模式来实现兼容.
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值