栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 软件开发 > 后端开发 > Java

x86架构CPU寄存器介绍

Java 更新时间:发布时间: 百科书网 趣学号
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),通过切换模式来实现兼容.
转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/281698.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号