精华内容
下载资源
问答
  • 数字电路系统工作过程中,把正在处理的二进制数据或代码暂时存储起来的操作叫做寄存,寄存器电路就是实现寄存功能的电路,是数字逻辑电路的基础模块。[1]中文名寄存器电路外文名register circuit拼音jì cún qì ...

    在数字电路系统工作过程中,把正在处理的二进制数据或代码暂时存储起来的操作叫做寄存,寄存器电路就是实现寄存功能的电路,是数字逻辑电路的基础模块。[1]

    中文名

    寄存器电路

    外文名

    register circuit

    拼    音

    jì cún qì diàn lù定    义

    实现寄存功能的电路

    属    性

    数字逻辑电路的基础模块

    应用学科

    计算机

    寄存器电路概述

    编辑

    语音

    任何现代的数字电路系统,特别是一些大型的数字处理系统,往往不可能一次性地把所有的数据都处理好,因此在处理的过程中都必须把需要处理的某些数据、代码先寄存起来,以便在需要的时候随时取用。

    在数字电路系统工作过程中,把正在处理的二进制数据或代码暂时存储起来的操作叫做寄存,实现寄存功能的电路称为寄存器。寄存器是一种最基本的时序逻辑电路,在各种数字电路系统中几乎是无所不在,使用非常广泛。常用的集成电路寄存器按能够寄存数据的位数来命名,如4位寄存器、8位寄存器、16位寄存器等。

    寄存器按它具备的功能可分为两大类:数码寄存器和移位寄存器。若按照寄存器内部组成电路所使用的晶体管不同种类来区分,可以分成如晶体管一晶体管逻辑(TTL)、互补场效应晶体管逻辑(CMOS)等许多种类,目前使用最多的就是TTL寄存器和CMOS寄存器,它们都是中、小规模的集成电路器件。[1]

    14d966bbde9c93cc5939c6005482e576.png

    图1寄存器电路是数字逻辑电路的基础模块。寄存器用于寄存一组二值代码,它被广泛地用于各类数字系统和数字计算机中。由于一个触发器能够存储一位二值代码,所以用N个触发器能够存储N位二值代码。对于寄存器中的触发器,只要求它们具有置高电平1、置低电平0的功能就可以了,因此,无论是用同步R-S结构触发器,还是用主从结构或边沿触发结构的触发器,都可以组成寄存器电路。

    在计算机 CPU 中,为配合全加器的算术运算, N 个触发器串联可组成移位寄存器。例如,由四位D触发器组成的向有数据移位的移位寄存器以及移位波形图如图1所示。[2]

    寄存器电路基本寄存器电路

    编辑

    语音

    寄存器电路定义

    65b094887da72797b56375bc2c9b39f4.png

    图2基本寄存器是由触发器组成的,一个触发器就是一个寄存器,它可以储存一位二进制数码。需要存储四位二进制数码时,只要把四个触发器并联起来,就可以组成一个四位二进制寄存器,它能接受和存储四位二进制数码。图2是由4个D触发器构成的基本寄存器逻辑电路,每个触发器的cP端并联起来作为控制端。需要存储的数码加到触发器的D输入端。四个触发器的CP端接在一起,成为寄存器的控制端,需要存储的数码加到触发器的D输入端。

    寄存器电路特点

    根据D触发器的性质,上述的寄存器有以下基本特点。

    (1)CP=0

    当CP=0时,触发器保持原状态不变,即:bc08d0108a0b8dedf07cc5252edb1d3c.svg

    (2)CP=1

    当CP=1(上升沿)时,触发器的状态为D输入端的状态,即:8ab2222fe0ce5c2dfd305e7fd0228c05.svg

    由此可见,D触发器只在CP=1(上升沿)时,才会接收和存储数码。

    另外,由于4个触发器的9bff704fe8d75e5fab25e1eb058fc1f1.svg端也并联在一起。因此,如果在瓦D端加上负脉冲,就可将全部触发器均置为0态,通常将这一过程称为清零,也叫置0端。

    寄存器电路工作原理

    如果要存储二进制数1001,它们被分别加到触发器的D输入端。当时钟脉冲CP到来时,由于D触发器的特性是在CP=1时,62ba0a7193563c4d690930c9e3e4d8a2.svg,所以在CP脉冲的上升沿时,4个触发器的状态从高位到低位被分别置为1001,只要不出现清零脉冲或新的接收脉冲和数码,寄存器将一直保持这个状态不变,即输入的二进制码1001被存储在该寄存器中。 如果想从寄存器中取出1001数码,则只要从寄存器的各个Q输出端就可以获得。[3]

    寄存器电路移动寄存器电路

    编辑

    语音

    寄存器电路定义

    移位寄存器电路和锁存器电路一样,都是暂时存放数据的部件。数字电路中常要进行加减乘除运算,加法和减法运算通常是用加法器和减法器来完成,而乘除运算则是用移位以后再加减的方法完成的。数字信号在传送时,将数码一位一位按顺序传送的方式叫串行传送,将几位数码同时传送的叫并行传送。因此,对于寄存器电路除要求它能接收、存储和传送数码外,有时还要求它把数码进行移位,这种寄存器电路被称为移位寄存器电路。

    寄存器电路适用场合

    移位寄存器是数字系统中的一个重要部件,应用很广泛。例如在串行运算中,需要用移位寄存器把二进制的数据—位一位依次送入,再用全加器进行运算。运算的结果又一位一位依次存入移位寄存器中。在有些数字装置中,要将并行传送的数据转换成串行传送,或者将串行传送的数据转换成并行传送,要完成这些转换也霈要使用移位寄存器。

    寄存器电路电路特征

    从逻辑结构上看,移位寄存器电路有以下2个显著特征。

    (1)由相同寄存单元组成

    移位寄存器是由相同的寄存单元组成的。一般来说,寄存单元的个数就是移位寄存器的位数。为了完成不同的移位功能,每个寄存单元的输出与其相邻的下一个寄存单元输入之间的连接方式也不同。

    (2)公用时钟

    所有寄存单元公用一个时钟,在公共时钟作用下,各个寄存单元的工作是同步的。每输入一个时钟脉冲,7寄存器的数据就顺序伺左或向右移动一位。寄存单元一般是主从结构的触发器。

    寄存器电路移位寄存器类型

    CMOS移位寄存器属子中规模集成电路,通常可按数据传输方式的不同进行分类,从数据输入方式看,移位寄存器有串行输入和并行输入之分。串行输入就是在时钟脉冲作用下,把要输入的数据从一个输入端依次一位一位地送入寄存器。并行输入就是把要输入的数据从几个输入端同时送入寄存器。

    在CMOS移位寄存器中,有的品种只具有1种输入方式,例如只具有串行输入方式,但也有些品种同时兼有并行和串行2种方式。串行输入的数据加到第一个寄存单元的输入端,在时钟脉冲的作用下输入;数据传送速度较慢。并行输入的数据一般由寄存单元的R、S端送入,传送速度较快。[3]

    寄存器电路寄存器电路建模

    编辑

    语音

    寄存器和组合逻辑是数字逻辑电路的两大基本要素。寄存器一般和同步时序逻辑关联,其特点为仅当时钟的沿(上升沿或下降沿)到达时,才有可能发生输出的改变。根据实现目标不同,寄存器的建模结构略有不同,需要注意如下要点:

    ①寄存器信号声明:寄存器定义是reg型。但是请注意,这个命题的反命题不一定成立。某些信号虽然被定义为reg型,但是最终综合实现结果并不是寄存器,如“cnt—out—plus”虽然被指定为reg型,但是实现时是纯组合逻辑。只有定义为reg型,且always的敏感表为posedge或negedge沿敏感操作时,该信号才是寄存器。

    ②时钟输入:在每个时钟的正沿或负沿对数据进行处理。数据的正沿或负沿起作用,是在always的敏感表中通过posedge和negedge指定的。

    ③异步复位/置位:绝大多数目标器件的寄存器模型都包含异步复位/置位端。异步复位/置位是指无论时钟沿是否有效,当复位/置位信号有效沿到达时,复位/置位立即发挥功能。指定异步复位/置位时,只需在always的敏感表中加入复位/置位信号的有效沿即可。下例描述的异步复位电路是最常用的寄存器复位形式之一。

    ④同步复位/置位:任何寄存器都可实现同步复位/置位功能。指定同步复位/置位时,always的敏感表中仅有时钟沿信号,当同步复位/置位信号变化时,同步复位/置位并不立即发生,仅仅当时钟沿采到同步复位/置位的有效电平时,才会在时钟沿到达时刻进行复位/置位操作。

    ⑤同时使用时钟上升和下降沿的问题:有时因为数据采样或调整数据相位等需求,设计者会在一个always的敏感表中同时使用时钟的posedge和negedge,或者在两个always的敏感表中分别使用时钟的posedge和negedge对某些寄存器电路操作。在这两种描述下,当时钟上沿或下沿到达时,该寄存器电路都会做相应的操作。这个双沿电路往往可以等同于使用了原时钟的倍频时钟的单沿操作电路。对于实现在PLD的设计而言,同时使用时钟的上、下沿往往是不推荐的,因为PLD内嵌的PLL/DLL和一些时钟电路往往只能对时钟的一个沿保证非常好的指标,而另一个沿的抖动、偏斜、斜率等指标不见得非常优化,有时同时使用时钟的正负沿会因时钟的抖动、偏斜、占空比、斜率等问题造成一定的性能恶化。因此推荐的做法是:将原时钟通过PLL/DLL倍频,然后使用倍频时钟的单沿(如上升沿)进行操作。但是电路设计不可一概而论,如果必须使用时钟的双沿对同一个寄存器操作时,请设计者明确此时相当于使用了倍频时钟。[4]

    词条图册

    更多图册

    参考资料

    1.

    穆克.电子电路识读一本通:化学工业出版社,2011-03:120

    2.

    孙一林.微型机系统与接口技术:清华大学出版社,2015-09:18

    3.

    孙余凯.电子电路分析与实践:人民邮电出版社,2010-08

    4.

    EDA先锋工作室.轻松成为设计高手:VERILOG HDL实用精解:北京航空航天大学出版社,2012-06

    展开全文
  • 看似简单的三种门电路却是组成了整个逻辑电路的根基 真值表--其实就是根据输入输出状态枚举罗列出来的所有可能 比如有一台设备,他有两个输入A和B 无论何时,他们都有电或者都没有电的时候是正常,任何一个有电就是不...

    现代计算机的各个部件到底是如何通过逻辑电路构成的呢

     

    半加器

    我们说过了门电路

    看似简单的三种门电路却是组成了整个逻辑电路的根基

    真值表--其实就是根据输入输出状态枚举罗列出来的所有可能

    比如有一台设备,他有两个输入A和B

    无论何时,他们都有电或者都没有电的时候是正常,任何一个有电就是不正常

    那么他的真值表就是这样子的

    AB表示输入  F表示输出

    第一步:找到F=1的行

    第二步:把表达式写成数理逻辑的形式,如果是0写成非的形式

             

    第三步:各个逻辑"加"起来

    继续翻译成逻辑电路的话那就是

    A与B的非门连接到一个与门

    A的非门与B连接到一个与门

    然后再把这两个连接到一个或门

    符号

    是不是很简单?

    就好似摩天大楼由砖头(与) 水泥(或) 钢筋(非)组成一样

    一块砖和另一块砖叠在一起很简单,但是组成摩天大楼就会很复杂

    其实这个电路不就是一个异或门

    a⊕b = (¬a ∧ b) ∨ (a ∧¬b)

    如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0。

    再回头看一下上面的真值表

    A和B经过这个设备,输出为F,是不是可以这样描述

    0⊕0=0

    0⊕1=1

    1⊕0=1

    1⊕1=0

    设想一下二进制的加法是什么样子的?

    0+0=0

    0+1=1

    1+0=1

    1+1=0(此处应该有进位1)

    这不就是没有进位的二进制加法运算设备吗?

    所以说

    异或也叫半加运算

    --之所以说是半,是因为他没有进位机制

     

    全加器

    想要计算加法,很显然我们需要一个全加器,就是有进位的,对吧,这是很自然的逻辑思维

    百度百科中如是说:

    全加器是能够计算低位进位的二进制加法电路。

    是用门电路实现两个二进制数相加并求出和的组合线路.

    与半加器相比

    全加器不只考虑本位计算结果是否有进位,也考虑上一位对本位的进位,

    可以把多个一位全加器级联后做成多位全加器.

    用现在的概念去解释描绘历史,好像不是那么合适,但是我觉得会更有利于理解

    全加器不只考虑本位计算结果是否有进位,也考虑上一位对本位的进位

    如果不理解的话,可以拿出纸笔来计算,比如

    前一个进位1 显然就是上一位对本位的进位

    后一个进位1 显然就是本位计算结果是否有进位

    每一次的计算,都有三个输入,加数被加数,以及来自上一位的进位

    每一次的运算,则会产生当前位的结果,以及向下一位的进位

    所以一次计算会有5个变量

    我们用A,B分别表示两个输入 加数和被加数

    Ci表示来自前一列的进位

    S是加数A被加数B以及Ci的和,和并不太准确,也就是求和后当前位的值

    C0表示本位计算结果对下一位的进位

    显然,A,B,Ci都可能有不同的值

    我们列一下S的真值表 表示当前位计算的结果

    三位的组合,每位可能两个值,所以总共8种可能

    按照之前的步骤,找出来S为1的行,0用非来表示,最后求和

    C0的真值表   表示当前计算结果是否有进位

    也是三位的组合,每位可能两个值,所以总共8种可能

    我们转换成电路

    不要问我怎么画,你就按照我们上面的两条逻辑对着电路图走一遍

    看看是不是这么回事就好了,反正我自己只是要理解计算机,而不是去设计电路

    你要想搞得很明白,你可以去研究下

    数字逻辑与数字系统设计或者数字逻辑XXX与XX设计一类的书名的书籍

    我们可以把上面的式子简化下

    可以简化为

    我们之前已经知道对于  异或电路半加器

    a⊕b = (¬a ∧ b) ∨ (a ∧¬b)  也就是a与b的异或就是 

     

    简化为

    根据:

    就可以得到下面的电路图

    根据输入输出的变量情况

    我们可以用下面的图来表示一位全加器

    有了一位全加器,我们自然可以组合出来更多位的全加器

    看三位的全加器有了

    S3  S2   S1   S0   的排列就是计算出来的结果,不是吗

    我们继续抽象一下,一个加法计算器就出来了

    根据之前提到过的一些知识理论,我们可以很容易想得到

    对于左侧的输入,我们完全可以根据电路的闭合和联通来确定是0 还是 1

    对于右侧的输出,我们可以接上小灯泡,用亮和灭来记录结果

     

    反馈电路  振荡器 -计算机的心跳

    之前提到过,继电器的常用场景之一就是用作控制电路

    如下图所示

    想想我们之前的非门

    带电源的常闭式(就是右侧电路默认是闭合)的继电器就是一个非门

    刚已经说过,上面是用作控制电路,左侧电路控制右侧,右侧也是有电源的

    如果共用电源

    可以很明显的看得出来

    开关本身是闭合的,一旦接通电源

    吸引衔铁开关,断开电路然后失去磁性,然后电路闭合

    吸引衔铁开关,断开电路然后失去磁性,然后电路闭合

    .....

    他是一种特殊的非门

    把自身的输出结果拿过去作为输入

    把一个非门的输出拿出来一部分作为它的自身的输入这叫做反馈

    那也就是说一个非门加上一个反馈

    就构成了这样子的一个装置,可以反复的在两种结果中跳转,并且无限持续

    这就是 振荡器

    能够产生一连串无限(只要有电)交替变化的输出

    可以想象得到,振荡器的变化形式类似下面的形式

    也就是高低交替的(不要去纠结到底是横线多长间距多大两行之间有多高~)

    电流的切换速度是极快的

    所以我们直接忽略时间,认为他是瞬间就可以达到,否则他肯定是斜线

    上升沿:电压从0到最大值的上升的竖线叫做上升沿

    下降沿:电压从最大值到0的下降的竖线叫做下降沿

     

    触发器-记忆

    然后又有两个人才研究出来了一个更加特殊的连线方式

    电路上下对称,分别都是一个或门连着一个非门

    他们各自的输出又分别是对方的输入

    两个或非门首尾相连形成两个反馈

    再次强调不要纠结这到底是啥,我相信最初肯定是瞎弄的,科学不就是尝试么

    然后发现了有些有意思的地方,然后就被加深研究了

    如果左侧加上电源 右侧接上两个灯泡的话

    根据开关闭合与断开 以及灯泡的情况

    研究出来了触发器的原理

    工作状态依赖于两个开关R S 

    闭合一个断开另一个,总是会得到两个相反的输出Q和Q~

    要是全部断开,那么取决于Q和Q~刚才是什么状态,也就是有记忆功能

    最早的一种触发器,称之为R-S触发器

    Q和Q~总是以相反的状态出现

    0 1 或者1 0

    触发器截然相反的两个输出,不过多数情况下仅仅使用一个

    触发器的记忆功能被应用到计算机的存储上

    使用Q来记忆一个比特,另外一个就不用了,因为本来他们就相反

    要想使用Q保存一个比特,自然离不开R  S

    想要Q=0   S=0 且R=1

    想要Q=1   S=1 且R=0

    两个输入可以用非门表示

    当电路刚接好(还没有按下开关),S为0 R=1  Q=0  灯泡不亮

    当按下开关后,S为1 R=0  Q=1  灯泡亮了

    但是一旦开关断开,灯泡立刻又灭了,因为又回到了刚才的状态

    显然,虽然可以保存1比特,但是并不能维持他的存在,因为R和S作为输入发生了变化

    所以很自然的,想到在R和S外加一层控制

    然后又发明了带控制的触发器  D触发器

    CP作为控制线路

    Cp=0 时,通过与门,自然不管D上是什么,S和R都为0,触发器保持原有内容不变

    CP=1 时,如果D=0 那么 S=0 R=1  Q=0

    CP=1 时,如果D=1 那么 S=1 R=0  Q=1

    也就是说CP作为控制线路控制是否可写

    在可写的情况写,D控制写入的内容

    这种触发器会在CP=1期间都可以进行写,只要D改变了,保存的值就会发生改变

    所以想要准确的保存一个比特,你需要保持住D的值,持续经过CP从0~1然后再到0的过程

    所以,又发明了一种新的触发器,仅仅是在CP从0变成1  或者从1变成0  的时候才会触发

    -也就是接受D的输入

    两个D触发器首尾相连而成,前一个触发器的输出是后一个触发器的输入

    这两个触发器不会同时工作

    这个触发器是上升沿D触发器

    也就是不管控制端是0 还是1   还是从1到0的下降沿,都不能保存

    只有0到1的上升沿才能保存

    如果把若干个上升沿D触发器连接起来

    最初开关是断开的,所有的触发器都不工作

    因为CP都是0

    如果你不停的按开关,最初闭合开关瞬间的这个比特1 就会在触发器间顺序传递,从左到右

    手动按动开关自然是无聊的,所以振荡器就被应用其中了,而且速度是可调节的

    这种走马灯的电路就是 循环移位寄存器

    寄存,是临时存放的意思

    当若干个触发器组合在一起,可以同时保存多个比特时就成为寄存器

     

    计数器

    T触发器   Q~作为输入到D

    假设最初Q=1 Q~=0  灯泡是亮着的

    反复按动开关(按键开关),灯泡会在亮灭之间交替变化

    每当一个脉冲到达CP时,触发器的输出就会发生翻转,原先是0 则变成1  原先是1 则变成0

    Q~也是这样,只不过值刚好相反

    他有一个神器的作用就是用于计数

    简化一下(隐藏了Q~到D的连线,但是他是存在的)

    5个连接在一起,从右往左看,每个触发器的输出端Q~都连接下一个触发器的CP

    先把每一个触发器清零 使得 Q43210   的值为00000,这表示0  

    随着振荡器脉冲的输入,会不断计数

    显然,一个触发器表示一个比特,8个触发器组成计数器,就是可以累积255个脉冲 11111111

    试想一下如果计数器已经达到最大了,此时又来了一个脉冲,是什么效果?这不就是溢出的基本原理么

     

    寄存器

    试想一下如果多个数通过全加器进行计算,需要解决什么问题?

    之前我们说到过半加器到全加器的进化,需要记录处理进位的情况类似

    多个数相加,自然需要处理中间结果,所以你需要保存下来

    寄存器的符号(就是触发器组成 多个触发器可以构成寄存器)

    上升沿才会工作

    把加法器换一种形式描绘

    如果你还记得到话,之前是这样子的

    我们把寄存器连接到加法器上

    你应该可以看得懂

    当按键开关KRA按下时,开关输入的数值会通过寄存器,输出到加法器,作为他的一个加数

    为了简化电路图,使用同一组开关提供加数和被加数

    这样,通过开关送进来的数可以先到到寄存器RA ,同时也被送到加法器另一个输入端

    如果你想要保存到寄存器RA就按一下按键开关

    如果你想要用它和寄存器中的数相加,就什么也不用做,结果自动从加法器的输出端

    所以当你输入第一个数字,按一下KRA开关,寄存器保存了加数

    输入第二个数字,寄存器的值就和他相加  立刻得出结果

    然而此时的寄存器还没有保存中间结果

    一种很显然的方案就是加法器的输出,同寄存器的输入端直接相连接

    很显然,共用电路带来了很多麻烦

    比如加法器计算出来的结果不仅会达到寄存器还会进入自己的输入端

    所以说要么就是想办法电路分开,要么就是轮流共用线路

    大家共用的线路,就是我们常说的总线

     

    轮流使用总线 传输门

    继电器的作为控制电路的理论再次被应用

    这种结构就叫做传输门---开关闭合,信号可以通过,开关断开,信号就中断

    名字很形象

    所以可以使用传输门来控制总线上数据的传输

     

    上图中都是按键开关,不是闸刀开关

    左边通过传输门GA接入总线

    右边加法器输出通过GB接入

    而且还多了一个临时寄存器TR 临时保存加法器的计算结果

    计算过程是这样子的:

    比如 1+2+3+4+5

    第一步:开关拨出来第一个数 ->按住KGA打开传输门->按下KRA,数据保存在寄存器RA中,松开KGA,关闭传输门

    虽然此时这个数据已经也到了加法器的另一个输入,加法器也会进行运算,但是GB关闭的,TR也不会进行保存

    第二步:开关拨出来第二个数

    ->按住KGA打开传输门,这样第二个数被加数会进入加法器的另一个输入端,加法器会自动运行

    ->按一下KTR,保存计算结果到临时寄存器

    ->松开KGA

    ->然后就是按住KGB,让临时寄存器TR的数据达到RA

    ->按一下KRA寄存器保存中间结果

    虽然也会输入到加法器的另一个输入端,也会进行加法,但是TR会屏蔽掉数据不会保存

    梳理简化下步骤:

    按住KGA   按一下下KRA 松开KGA===>保存了加数

    按住KGA===>计算结果

    按一下KTR    松开KGA  按住KGB 按一下KRA===>保存中间结果

     

    译码器

    你可以去设想可能的电路,找到输入输出,然后列出真值表

    然后设计逻辑电路,这是通用的解决问题的思路

    比如我们设想

     

    经过这样子一个电路,我们可以更方便的操作,图中假定设置加数 是装载   设置被加数求和 是相加

    再次优化

     

    RR是循环移位寄存器,两个输出t0  t1 替代了K0 K1

    这样子就是最开始的时候需要装载,此后都是开关拨数,按两次K,开关拨数按两次K..

    这就是控制器的基础原型

    上面的这个新电路其实就是译码器,译码器就是用于输入的转换,把一种输入转换为另外的一种输出

    如同名字一样,翻译

    至此,我们已经可以通过相对比较简便的操作进行连续累加

    但是每次不断地拨弄开关进行数据输入,仍旧是比较繁琐的

     

    存储器

    存储器按照我们的理解,他像一个容器一样,有一个口可以进行 存 / 放 数据

    之前说过想要存储数据那就是触发器-上升沿D触发器

    G是传输门,控制Q与外部世界的连通性

    默认W和R都为0  G是断开的

    写入时,DB输入数据,W从0变成1 上升沿   R继续为0,G是断开的

    读取时,R=1 打开传输门,W仍旧为0

    作为一个基本单元,可以构造容量更大的存储器

    使用几个就是可以保存几个比特的二进制数

    默认读写均为0

    D0~D4准备好数据 写从0~1上升沿,写0  写入数据

    写0 读1 读取数据到D0~D4

    想要保存多个二进制数,只需要垂直方向增加

     

    显然,随着可以保存的数据的增多,此时就面临着你到底要保存到哪里的问题

    你要保存到哪里,就要控制指定的W和R的状态

     

    地址译码器

     

    相信你完全可以理解他的逻辑,给定比如01 表示对应的W1 和R1

    W和R表明读写情况

    这就是地址译码器,找到具体存储单元的门牌号

    简化后的存储器就是这样子的,

    5个D 数据输出总线,表示这是一个可以保存5个比特的存储器

    也就是一次可以读取或者写入一个5比特的二进制数

    A表示寻址空间的范围 四位就是0000~1111  16个单元

     

    磁芯存储器

    磁芯是容易被磁化的东西一个圆环,磁芯中穿过一根电线

    根据电磁学的原理,电流方向不同,磁化后的南北两极是相反的

    磁场又可以反过来产生电流

    也就是说可以把一个状态看做0 一个状态看做1

    这样就可以通过这跟驱动线写入数据

    写入数据比较简单

    读取还需要穿另一根线,读取线  

    静止的导体不会发生什么变化

    所以读出数据时,用驱动线写入 0  

    如果本来就是0 不会有太大变化,读取线上电流很小

    如果本来是1 磁场发生变化,直接翻转,那么读取线电流会比较强烈,表示读出是1

    但是显然具有破坏性,所以如果读出来的是1  需要重新写入1

    和触发器不同,磁芯存储器断电之后仍旧能够维持写入的数据

    有了存储器就可以从存储器中读取数据,然后进行累加运算

    一种很自然的方式就是这样子的

    其中我们假定,数据连续存放

    从0000 开始 存放五个数比如 1+2+3+4+5

    AC最初是0000   每按一次Kac地址加1  进行读取下一个地址

    AR是寄存器,临时存放存储器的地址

    Krd用来控制读取

    数据寄存器DR暂存读取的数据

    这样就完成了从存储器顺序读取的功能

    初始时AC为0

    按一下KAR AC写入地址寄存器,提供给存储器

    按住KRD,在按一下KDR,数据被DR保存,最后松开KRD

    再按一下KAC 地址计数器指向下一个地址

    又遇到优化电路的事情了,我们可以根据之前的译码器 再次简化

     

    此时仅仅需要一个按键开关即可控制连续取数

    将存储器 译码器加法器连接起来就是下面的样子

    可以通过三个按键的配合进行半自动的结果计算

     

    如何才能更加优化上面的电路

    这就需要用到指令的概念,因为相加  装载本身就是一种命令

    一种命令自然对应着 固定的执行路径

    所有的指令都有一个操作码开始指示出指令的功能

    比如装载,表示下一个存储单元是需要装载的数据,目标是寄存器RA

    相加表示,第一个加数位于寄存器RA 第二个加数位于下一个存储单元,最终结果保存到RA

    有了指令的概念模型,我们就可以把指令和数据融入到一起,指令本身也是二进制数据

    一条完整的指令总是以操作码开始

    有的指令可能不需要操作数,只有操作吗即可

    有的可能需要不止一个操作数

    这就出现了一个新的问题,那就是译码,翻译操作码

    简洁高效的翻译出操作码,就可以替代装载和相加指令了不是么

    而且也应该想得到,如果行得通,还可以表达更多的指令

    再次使用译码器来模拟开关,使用一个开关开控制将所有的数据从存储器依次取出

    并且逐个相加

     

    循环移位寄存器,向走马灯一样,将会呈现出周期性

    0~2阶段 取指令 地址计数器AC自动加1  取指令阶段

    第一个操作码位于DR中

    3阶段 IR地址寄存器将操作码保存起来  IR输出直接指向译码电路EC,解析操作码  指令译码阶段

    4~8依次执行下面的任务

    从下一个存储单元里取数,地址计数器AC加一,把取出来的数装载到寄存器RA中

    至此第一条指令执行结束,循环移位寄存器也已经经过一次完整循环(假定第一条指令是装载 也就是加载 加数)

    第二个也是0~2取指令3 译码  4~8取数数据与RA相加

    至此想要五个数相加怎么办?

    编写5条指令,按动9次开关(0~8)

    还是有点麻烦

    其实反复按动开关,不就是振荡器的工作原理么

    不过你要知道,你需要严格控制,什么时候振荡器停止,也就是不在一直按开关

    所以需要增加一个新的指令   停机指令

    放到所有你想要执行的指令的后面,当然你需要重新设计译码电路EC

     

    现在我们的自动加法器已经具备了以下元素:

    存储器 运算器 控制器 驱动控制器的振荡器

    SRAM/DRAM/ROM

    晶体管来做大容量的存储器也变为现实(此处不是说超大规模集成电路时代才可以)

    晶体管可以构建触发器,触发器又可以形成大容量的存储器

    这就是静态存储器SRAM Static Random Access Memory

    不过使用触发器构建存储器需要集成很多晶体管

    后来又发现,要想存储一个比特,只用一个晶体管和一个电容就可以

    最早的电容器 是18世纪发明的莱顿瓶

    电容的特点:

    那就是把它接到电源上,一个金属板的电子会被拉倒另一个金属板上

    电源撤走,两块金属板会保持着一块电子多余,一块电子缺乏的状态,以至于他们之间产生了电压,看起来就是储存了电

    不过他会通过两极间的空气或者其他介质放电

    只用一个晶体管和一个电容应用到存储器上的话,因为会泄露,所以要定时重写

    这就是刷新,所以这种叫做动态存储器 DRAM  Dynamic Random Access Memory

    除了RAM还有ROM, Read Only Memory,也就是只能读取

    只读存储器最大的优势在于可以一直维持所保存的内容,即使断电

    再后来又发展出来 可编程只读存储器 再后来 可擦除可编程只读存储器

    我们知道逻辑电路可以根据不同的输入产生不同的输出

    我们知道这些输出是固定的组合,是有限的序列

    那我们是不是可以把这些结果全部都枚举出来?

    也就是数学上经常用到的查表法,就好像你不记得乘法口诀,你拿到两个数去乘法表中查找

    ROM一个颠覆性的作用就是可以作为这种查表法的媒介,只不过他代表的是逻辑电路的运算

    他的好处很显然,逻辑电路一旦组成就没办法改变,但是ROM可以按照需要进行改写~

    也就是一定程度上完成了硬件的改变,不是么

     

    微处理器

    再后来随着工艺的进步,进一步的把 运算器 控制器集成在一起

    就成了芯片,也就是微处理器

    也叫作CPU  中央处理单元

    微处理器都需要存储器以及其他辅助设备才能工作

    需要向外部提供一些地址引线和数据引线,还有一些控制信号线

    他需要从外部获得电源能量

    需要外部引入时钟信号(振荡器)

    微处理器的另个特点是有各自的指令集

    随着技术的发展,振荡器的时钟频率也来越快,也侧面反映了处理器的速度

    处理器所执行的工作是大致固定的,取指令 译码 读写操作数 运算等

    中间涉及到数据的传输

    当处理器的处理速度高于数据的传输速度的时候

    或者说并不是每一个时钟周期内处理器都在干活,可能在等待数据

    处理器的性能就被拉低了

    SRAM最快,但是成本高

    DRAM由于要刷新,而且刷新时无法读取数据所以慢了一些

    但是DRAM高密度低成本

    高速缓存

    可以使用SRAM作为缓存,也就是处理器和内存的一个中间地带

    也即是常说的cache

    不过你要尽可能的保障你想要的数据会存在cache中,这称为命中

    如果不能命中还是去再次的加载高速缓存,速度很差

    流水线

    假设说需要两个步骤完成输出

    如果每个步骤需要1个单位的时间  那么将会需要2个单位的总时间

    在第一个步骤结束之后,其实他还是被占用的,直到2个周期结束后才能释放

    增加寄存器就可以解决这个问题

    在第一个步骤结束后计算结果保存到中间寄存器,然后进行第二个步骤

    那么第一个步骤可以用来进行新的计算

    这就是流水线式的处理逻辑

    但是流水线式也有他自身的问题

    比如跳转指令,开始执行的时候后面两条指令已经进入了流水线,这种情况,只能清空流水线

    解决办法是增加分支预测功能

     

    计算机同外部的接口

    为了使外部设备和计算机核心之间进行数据传送,需要连线,也就是构造逻辑电路

    在逻辑电路里面会有一些寄存器,通常叫做I/O端口,或者直接叫做端口

    端口作为计算机核心与外部设备的中间人

    大家都把数据放到端口上,无外乎是谁放谁取(存储/读取)

    端口是交流的窗口,计算机可能有很多不同的输入输出设备,你总不能轮流使用

    所以端口需要有多个,至于每个端口怎么用,跟计算机本身没有关系

    外部设备决定了怎么使用这些端口

    在处理器上运行的软件,决定了如何解释端口上的数据

    也就是说,设备的物理输入运行指令的逻辑解释是对应的

    计算机只负责读取执行,并不关注到底是什么

    如果没有与外部设备对应的软件,就没办法解释使用这些数据

    计算机同外部交互,只能识别二进制

    需要将模拟信号转换为数字信号

    比如对着话筒讲话,或者播放音乐时,产生强弱随时间变化的电流

    这时候就需要模拟-数字的转换,也就是采样

    如果一秒钟仅仅观察2次或者10次,得到2个或者10个二进制数,可能会丢失很多数据

    所以现在的标准而言,高品质是44.1kHz 也就是44100次/秒

    计算机数据的输出,又需要转换为模拟信号

    可以将端口的地址并入内存地址空间,就好像门牌号分段

    比如小于100的是内存地址编号大于100的就是端口号

    更好的方式是使用专门的指令进行I/O端口的访问

     

    不同的外部设备通常有不同的接口方式,可以理解为插头的样式,这是厂家决定的

    不过很多东西也慢慢地都是有标准规范的

    另外就是说插头里面的信号,比如话筒的是快速变化的声音电流

    所以要有这么一个东西:

    可以保留已有的外部设备插头规格,也即是适配现有的

    然后还需要能够进行模拟数字信号的转换

    但是有一些设备还需要做一些额外的处理,计算机又不懂得,只是提供统一的端口

    这些额外的处理由被称为扩展卡的部件实现比如网卡 声卡 视频卡

    简易图就是这样子

    简言之就是计算机同外部设备进行交互需要端口

    端口需要与外部设备进行通信

    进行通信就需要与原有插头连接并且进行信号转换

    另外还可能需要多一些额外的处理,计算机并不懂得这些额外的处理,也就是比如声卡 网卡的功能

    后来发现有些东西是大家都需要的,比如鼠标键盘显示器,所以干脆就直接集成了这些东西

    也就是通过这些接口比如HDMI,计算机可以进行更多的数据处理

    每一个接口功能复杂一些的一般也都有自己的微处理器

    比如声卡,可以与麦克风与扬声器进行通信

    声卡微处理器需要执行自己的指令,指令固化到只读存储器了

     

    这就有一个问题,当声卡开始工作,比如录音时,二进制数据放到约定的端口上

    那么在这中间,处理器将一直读取数据,也就没办法做其他的事情了

    为了充分发挥处理器的性能,设计了中断

    也就是可以暂停手上的工作,进行其他的工作

    这是一项很好的设计,否则处理器只能串行的工作效率将是极低的

    为此需要设计中断相关的线路,传送中断信号

    每个外部设备有不同的中断号,一旦有了中断,计算机就可以同时处理多个程序了

    有了中断,还需要有  保护现场的能力  以及 返回的能力中断返回指令

    否则之前的工作不就丢弃了么

    DMA

    但是数据经过端口到寄存器到内存再到中央处理器内部,数据的传输是很慢的

    所以不能一点点的传输,这就又用到了缓存的概念

    声卡可以有自己的本地存储器,到了一定时候,启动一个存储器到存储器之间的高速直接传送

    称为直接存取 Direct Memory Access

    键盘

    键盘的原理也是类似的,他也并不是直接接到CPU上,也是通过"键盘控制器"功能同声卡的东西

    与端口进行数据交换

    cpu并不认识键盘的

    键盘有自己的微处理器,通过线路,他知道到底是哪个键被按下

    键盘被按下,传送数据到中央处理器

    到底应该传送什么数据呢?

    其实他发送的是代表这个按键的二进制代码

    为了使用同一种编码在不同的计算机设备间传输数据,1967年出台的ASCII

    就是现在键盘使用的一种编码方式

    ps;二进制数是串行的方式的传输的,一个比特一个比特送到主板上的键盘的IO接口

    当然,到底如何解读这个键盘的输入,取决于当前运行的软件

     

    展开全文
  • 寄存器

    2014-07-29 20:55:00
    寄存器 寄存器是CPU内部用来存放数据的一些小型存储区域,用来暂时存放参与运算的数据和运算结果。其实寄存器就是一种常用的时序逻辑电路,但这种时序逻辑...寄存器是中央处理器内的组成部份。寄存器是有限...

    寄存器

    (图)寄存器

    寄存器是CPU内部用来存放数据的一些小型存储区域,用来暂时存放参与运算的数据和运算结果。其实寄存器就是一种常用的时序逻辑电路,但这种时序逻辑电路只包含存储电路。寄存器的存储电路是由锁存器或触发器构成的,因为一个锁存器或触发器能存储1位二进制数,所以由N个锁存器或触发器可以构成N位寄存器。寄存器是中央处理器内的组成部份。寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和位址。在中央处理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序计数器(PC)。在中央处理器的算术及逻辑部件中,包含的寄存器有累加器(ACC)。

    纠错 编辑摘要

    寄存器 - 特点及原理

    寄存器
    寄存器又分为内部寄存器与外部寄存器,所谓内部寄存器,其实也是一些小的存储单元,也能存储数据。但同存储器相比,寄存器又有自己独有的特点:

    ①寄存器位于CPU内部,数量很少,仅十四个; ②寄存器所能存储的数据不一定是8bit,有一些寄存器可以存储16bit数据,对于386/486处理器中的一些寄存器则能存储32bit数据; ③每个内部寄存器都有一个名字,而没有类似存储器的地址编号

    寄存器的功能十分重要,CPU对存储器中的数据进行处理时,往往先把数据取到内部寄存器中,而后再作处理。外部寄存器是计算机中其它一些部件上用于暂存数据的寄存器,它与CPU之间通过“端口”交换数据,外部寄存器具有寄存器和内存储器双重特点。有些时候我们常把外部寄存器就称为“端口”,这种说法不太严格,但经常这样说。

    外部寄存器虽然也用于存放数据,但是它保存的数据具有特殊的用途。某些寄存器中各个位的0、1状态反映了外部设备的工作状态或方式;还有一些寄存器中的各个位可对外部设备进行控制;也有一些端口作为CPU同外部设备交换数据的通路。所以说,端口是CPU和外设间的联系桥梁。CPU对端口的访问也是依据端口的“编号”(地址),这一点又和访问存储器一样。不过考虑到机器所联接的外设数量并不多,所以在设计机器的时候仅安排了1024个端口地址,端口地址范围为0--3FFH。

    寄存器 - 主要技术

    (图)寄存器寄存器
    1.重命名技术

    寄存器重命名,是CPU在解码过程中对寄存器进行重命名,解码器把“其它”的寄存器名字变为“通用”的寄存器名字,本质上是通过一个表格把x86寄存器重新映射到其它寄存器,这样可以让实际使用到的寄存器远大于8个。这样做的好处除了便于前面指令发生意外或分支预测出错时取消外,还避免了由于两条指令写同一个寄存器时的等待。

    2.乱序执行技术

    采用乱序执行技术使CPU内部电路满负荷运转并相应提高了CPU运行程序的速度。这好比请A、B、C三个名人为春节联欢晚会题写横幅“春节联欢晚会”六个大字,每人各写两个字,如果这时在一张大纸上按顺序由A写好“春节”后再交给B写“联欢”,然后再由C写“晚会”,那么这样在A写的时候,B和C必须等待,而在B写的时候C仍然要等待而A已经没事了。但如果采用三个人分别用三张纸同时写的做法,那么B和C都不必等待就可以同时各写各的了,甚至C和B还可以比A先写好也没关系(就像乱序执行),但当他们都写完后就必须重新在横幅上按“春节联欢晚会”的顺序排好(自然可以由别人做,就象CPU中乱序执行后的重新排列单元)才能挂出去。

    寄存器 - 技术规范

    寄存器
    寄存器通常都用来意指由一个指令之输出或输入可以直接索引到的寄存器群组。更适当的是称为“架构寄存器”。x86指令及定义八个32位元寄存器的集合,但一个实作x86指令集的CPU可以包含比八个更多的寄存器。共有以下几类的寄存器:

    (1)资料寄存器:用来储存整数数字(参考以下的浮点寄存器)。在某些简单/旧的CPU,特别的资料寄存器是累加器,作为数学计算之用。 (2)位址寄存器-持有内存位址,以及用来存取内存。在某些简单/旧的CPU里,特别的位址寄存器是索引寄存器(可能出现一个或多个)。 (3)通用目的寄存器(GPRs)-可以保存资料或位址两者,也就是说他们是结合资料/位址寄存器的功用。 (4)浮点寄存器(FPRs)-用来储存浮点数字。 (5)常数寄存器-用来持有只读的数值(例如0、1、圆周率等等)。 (6)向量寄存器-用来储存由向量处理器执行SIMD(SingleInstruction,MultipleData)指令所得到的资料。 (7)特殊目的寄存器-储存CPU内部的资料,像是程式计数器(或称为指令指标),堆栈寄存器,以及状态寄存器(或称微处理器状态字组)。 (8)指令寄存器(instructionregister)-储存现在正在被执行的指令 (9)索引寄存器(indexregister)-是在程式执行实用来更改算子位址之用。在某些架构下,模式指示寄存器(也称为“机器指示寄存器”)储存和设定跟处理器自己有关的资料。由于他们的意图目的是附加到特定处理器的设计,因此他们并不被预期会成微处理器世代之间保留的标准。

    (图)寄存器寄存器
    随机存取内存提取资讯的寄存器与CPU(位于不同芯片的储存寄存器集合):
    (1)内存缓冲寄存器(Memorybufferregister)
    (2)内存资料寄存器(Memorydataregister)
    (3)内存位址寄存器(Memoryaddressregister)
    (4)内存型态范围寄存器(MemoryTypeRangeRegisters)

    寄存器 - 具体分类

    (图)寄存器寄存器
    1、数据寄存器
    数据寄存器主要用来保存操作数和运算结果等信息,从而节省读取操作数所需占用总线和访问存储器的时间。32位CPU有4个32位的通用寄存器EAX、EBX、ECX和EDX。对低16位数据的存取,不会影响高16位的数据。这些低16位寄存器分别命名为:AX、BX、CX和DX,它和先前的CPU中的寄存器相一致。

    4个16位寄存器又可分割成8个独立的8位寄存器(AX:AH-AL、BX:BH-BL、CX:CH-CL、DX:DH-DL),每个寄存器都有自己的名称,可独立存取。程序员可利用数据寄存器的这种“可分可合”的特性,灵活地处理字/字节的信息。寄存器AX和AL通常称为累加器(Accumulator),用累加器进行的操作可能需要更少时间。累加器可用于、输入/输出等操作,它们的使用频率很高;寄存器BX称为基地址寄存器(BaseRegister)。它可作为存储器指针来使用;寄存器CX称为计数寄存器(CountRegister)。在循环和字符串操作时,要用它来控制循环次数;在位操作中,当移多位时,要用CL来指明移位的位数;
    寄存器DX称为数据寄存器(DataRegister)。在进行乘、除运算时,它可作为默认的操作数参与运算,也可用于存放I/O的端口地址。在16位CPU中,AX、BX、CX和DX不能作为基址和变址寄存器来存放存储单元的地址,但在32位CPU中,其32位寄存器EAX、EBX、ECX和EDX不仅可传送数据、暂存数据保存算术逻辑运算结果,而且也可作为指针寄存器,所以,这些32位寄存器更具有通用性。
    2、变址寄存器
    32位CPU有2个32位通用寄存器ESI和EDI。其低16位对应先前CPU中的SI和DI,对低16位数据的存取,不影响高16位的数据。寄存器ESI、EDI、SI和DI称为变址寄存器(IndexRegister),它们主要用于存放存储单元在段内的偏移量,用它们可实现多种存储器操作数的寻址方式,为以不同的地址形式访问存储单元提供方便。变址寄存器不可分割成8位寄存器。作为通用寄存器,也可存储算术逻辑运算的操作数和运算结果。它们可作一般的存储器指针使用。在字符串操作指令的执行过程中,对它们有特定的要求,而且还具有特殊的功能。

    寄存器寄存器
    3、指针寄存器
    32位CPU有2个32位通用寄存器EBP和ESP。其低16位对应先前CPU中的SBP和SP,对低16位数据的存取,不影响高16位的数据。寄存器EBP、ESP、BP和SP称为指针寄存器(PointerRegister),主要用于存放堆栈内存储单元的偏移量,用它们可实现多种存储器操作数的寻址方式,为以不同的地址形式访问存储单元提供方便。指针寄存器不可分割成8位寄存器。作为通用寄存器,也可存储算术逻辑运算的操作数和运算结果。
    它们主要用于访问堆栈内的存储单元,并且规定: (1)BP为基指针(BasePointer)寄存器,用它可直接存取堆栈中的数据; (2)SP为堆栈指针(StackPointer)寄存器,用它只可访问栈顶。
    寄存器寄存器
    4、段寄存器
    段寄存器是根据内存分段的管理模式而设置的。内存单元的物理地址由段寄存器的值和一个偏移量组合而成 的,这样可用两个较少位数的值组合成一个可访问较大物理空间的内存地址。 CPU内部的段寄存器: CS——代码段寄存器(CodeSegmentRegister),其值为代码段的段值; DS——数据段寄存器(DataSegmentRegister),其值为数据段的段值; ES——附加段寄存器(ExtraSegmentRegister),其值为附加数据段的段值; SS——堆栈段寄存器(StackSegmentRegister),其值为堆栈段的段值; FS——附加段寄存器(ExtraSegmentRegister),其值为附加数据段的段值; GS——附加段寄存器(ExtraSegmentRegister),其值为附加数据段的段值。

    在16位CPU系统中,它只有4个段寄存器,所以,程序在任何时刻至多有4个正在使用的段可直接访问;在32位微机系统中,它有6个段寄存器,所以,在此环境下开发的程序最多可同时访问6个段。32位CPU有两个不同的工作方式:实方式和保护方式。在每种方式下,段寄存器的作用是不同的。有关规定简单描述如下:
    实方式:前4个段寄存器CS、DS、ES和SS与先前CPU中的所对应的段寄存器的含义完全一致,内存单元的逻辑地址仍为段值:“偏移量”的形式。为访问某内存段内的数据,必须使用该段寄存器和存储单元的偏移量。保护方式:在此方式下,情况要复杂得多,装入段寄存器的不再是段值,而是称为”选择子”(Selector)的某个值。

    (图)寄存器寄存器
    5、指令指针寄存器
    32位CPU把指令指针扩展到32位,并记作EIP,EIP的低16位与先前CPU中的IP作用相同。指令指针EIP、IP(InstructionPointer)是存放下次将要执行的指令在代码段的偏移量。在具有预取指令功能的系统中,下次要执行的指令通常已被预取到指令队列中,除非发生转移情况。所以,在理解它们的功能时,不考虑存在指令队列的情况。在实方式下,由于每个段的最大范围为64K,所以,EIP中的高16位肯定都为0,此时,相当于只用其低16位的IP来反映程序中指令的执行次序。

    寄存器 - intel 80X06系列寄存器简介

    以Intel 80x86 CPU为例,80x86 CPU的寄存器组包括若干个8位、16位和32位寄存器,其中,32位寄存器是从80386 CPU开始才引入的。这些寄存器可以被分为4类,它们是通用寄存器、段寄存器、专用寄存器及其他寄存器。通常,应用程序主要使用前3类寄存器。

    1. 通用寄存器

    80x86 CPU的通用寄存器包括8个8位通用寄存器,它们是AL、AH、BL、BH、CL、CH、DL、DH;8个16位通用寄存器,它们是AX、BX、CX、 DX、SI、DI、BP、SP;8个32位通用寄存器,它们是EAX、EBX、ECX、EDX、ESI、EDI、EBP、ESP。80x86 CPU的通用寄存器构成如图5-11所示。其中,AL与AH、BL与BH、CL与CH、DL与DH分别对应于AX、BX、CX和DX的低8位与高8位,L 即Low(低)之意,H即High(高)之意。AX、BX、CX、DX、SI、DI、BP和SP分别对应于EAX、EBX、ECX、EDX、ESI、 EDI、EBP和ESP的低16位,EAX、EBX、ECX、EDX、ESI、EDI、EBP和ESP都是32位的。EAX(含AX、AH和AL)、 EBX(含BX、BH和BL)、ECX(含CX、CH和CL)和EDX(含DX、DH和DL)统称为数据寄存器;ESI(含SI)和EDI(含DI)统称为变址寄存器; EBP(含BP)和ESP(含SP)统称为指针寄存器。
    在对8/16位寄存器进行操作时,相应的16/32位寄存器的其他位不会受到影响。例如,EAX是一个32位通用寄存器,如果我们对AX进行了访问(即访问了EAX的低16位),那么EAX的高16位并不会改变。同理,我们可以使用AL来对AX的低8位进行访问,使用AH对AX的高8位进行访问,AL被修改时会影响AX,但不会影响AH,反之亦然。
    通用寄存器可以作为指令的操作数,用于存储那些需要被经常访问的数据。下面对这些寄存器进行简要的说明。
    EAX(累加器)
    EAX 中的A即Accumulator(累加、累积之意)。EAX、AX、AL分别被称为32位、16位和8位累加器,它们是使用频率最高的通用寄存器。如图5-6所示的汇编代码中就出现了EAX寄存器。一般来说,使用累加器使指令的机器代码更短,执行速度更快。
    EBX(基址寄存器)
    EBX中的B即Base(基址之意)。EBX与BX常用来表示内存地址,现在所使用的PC中地址都是较大的整数,一般不会是8位,所以BL就不常使用了。
    ECX(计数寄存器)
    ECX中的C即Count(计数之意)。在许多指令中,ECX、CX、CL被用作计数器。例如,循环指令以ECX或CX作为隐含的循环次数,移位指令用CL作为移位次数等。
    EDX(数据寄存器)
    EDX中的D即Data(数据之意)。在进行乘法等运算时,常用EDX与EAX或DX与AX的组合来存放一个4字数或双字数。此外,DX也用来存放I/O端口地址。
    注意:以上作用的说明仅仅表示这些寄存器的一般用法,作为通用寄存器,它们也可以被用来存储那些并非符合设计初衷的数据。例如,我们可以使用ECX存储一个普通的用来参与加法或乘法运算的数据。
    ESI(源变址寄存器,Source Index)
    ESI或SI在串指令中表示源数据串的地址。
    EDI(目的变址寄存器,Destination Index)
    EDI或DI在串指令中表示目的数据串的地址。
    EBP(基址指针,Base Pointer)
    EBP和BP常用来存放内存地址,它们在默认情况下指向堆栈段中的存储单元。
    ESP(堆栈指针,Stack Pointer)
    ESP或SP用来指示堆栈段中的栈顶地址。一般情况下不使用ESP或SP做算术运算。

    2. 专用寄存器

    Intel 80x86 CPU有两个32位的专用寄存器,它们分别是指令指针EIP(Instruction Pointer)和标志寄存器EFLAGS(Flags Register)。标志寄存器也称为程序状态寄存器或状态寄存器。指令指针和标志寄存器不能用作指令的操作数,它们是由CPU直接操纵的。特别地,EIP和EFLAGS的低16位分别由IP和FLAGS标识。 在标志寄存器EFLAGS(或FLAGS)中有若干标志位,这些标志位用来表示CPU当前的操作方式和状态信息,用来反映指令执行结果并控制指令的执行方式。与普通的应用程序有关的主要是FLAGS中的9个标志位(或称条件码标志),包括6个状态寄存器和3个控制标志,每个标志各占一位。 状态寄存器(有时也称为条件码寄存器,简称为CCR)中存储的是状态标志,它们通常是由CPU根据指令执行结果自动设置的,用来反映指令执行结果的特征。 Intel 80x86 CPU将状态标志作为条件判断的依据,以控制程序的执行流程。在本章后面,读者会看到在汇编语言中条件跳转语句就是利用这些状态标志来进行跳转的,这也反映了机器底层的一种深刻的工作机制,现在请读者稍留一点印象,后面我们还会对此做更加深入的介绍。此外,这些标志也可以由指令来设置。其中,最常用的4个状态标志是CF、OF、SF和ZF。
    现在对上述状态标志进行简要的介绍。
    OF(溢出标志,Overflow Flag)
    溢出标志的基本规则是溢出时置1,否则置0。即如果带符号数的运算结果超出了补码表示的范围,则OF=1,否则OF=0。
    SF(符号标志,Sign Flag)
    符号标志的基本规则是若运算结果为负数,则SF=1,否则SF=0。即SF取结果的最高位。
    ZF(零标志,Zero Flag)
    零标志的基本规则是若运算结果为0,则ZF=1,否则ZF=0。
    CF(进位标志,Carry Flag)
    进位标志的基本规则是若加法时结果最高位向前有进位或减法时最高位向前有借位,则CF=1,否则CF=0。
    AF(辅助进位标志,Auxiliary carry Flag)
    辅助进位标志也称为半进位标志,它的基本规则是若加法时结果低4位(半个字节)向前有进位或减法时结果低4位向前有借位,则AF=1,否则AF=0。该标志主要由CPU内部使用,用于BCD码调整指令。
    PF(奇偶标志,Parity Flag)
    奇偶标志的基本规则是若结果最低字节中1的个数为偶数,则PF=1,否则PF=0。
    标志寄存器中除了有状态标志以外,还有3个控制标志,控制标志是由程序根据需要用指令来设置的,以控制某些指令的执行方式。
    DF(方向标志,Direction Flag)
    方向标志在串处理指令中控制信息的方向,若DF=0,则每次串操作后内存地址自动递增,否则自动递减。
    IF(中断标志,Interrupt Flag)
    中断标志用于控制CPU是否响应外部可屏蔽中断请求,若IF=1,则允许中断,否则禁止中断。
    TF(跟踪标志,Track Flag)
    跟踪标志用于控制CPU是否进入单步调试方式,当TF=1时,CPU以单步方式执行指令,即在每条指令执行结束后,产生中断1,以便对程序进行检查。特别需要说明的是,Intel 80x86 CPU没有提供直接修改该标志的指令。
    专用寄存器中的指令指针EIP(或IP)与代码段寄存器CS共同作用来指示将要执行的下一条指令的内存地址。关于CPU如何确定接下来需要执行哪条指令这个话题,将在本章稍后的内容中做进一步讲述。

    3. 段寄存器

    Intel 80x86 CPU采用分段内存管理机制,该机制允许程序员将程序划分为相对独立的多个地址空间,每个地址空间被称作一个段(Segment),一个程序可以拥有多个代码段、多个数据段,甚至多个堆栈段。Intel 80x86 CPU中主要包括以下几种类型的段。
    代码段(Code Segment):用来存放程序的指令序列。
    数据段(Data Segment):用来存放程序的数据。
    堆栈段(Stack Segment):作为堆栈使用的内存区域。堆栈用于存储过程返回地址、过程参数和局部变量等(这个话题在第6章的函数调用中还将继续深入研究)。
    Intel 80x86 CPU提供了6个16位的段寄存器,它们是CS、DS、ES、SS、FS和GS。其中FS和GS是从Intel 80386 CPU才开始引入的。
    一般来说,CS、DS和SS分别用来确定当前代码段、数据段和堆栈段的段地址。ES(Extra Segment)、FS和GS常被称为附加段寄存器,它们也用来存放数据段的段地址。此外,在串操作指令中,ES用来表示目的串所在数据段的段地址。
    需要说明的是,尽管可以使用段寄存器来存放普通数据,但其主要用途是指向内存段。因此为了避免不必要的麻烦,我们建议尽量不要将段寄存器用作其他目的。

    4. 其他寄存器

    除了以上三类寄存器以外,Intel 80x86 CPU还包括下列寄存器(8086除外):4个内存管理寄存器、5个控制寄存器和8个调试寄存器,以及用于系统测试的测试寄存器。 [1]

     

                                                                                                                                                                    
     
                                                                            
     
                                                                            
    来自:Jimmy Booker > 

    转载于:https://www.cnblogs.com/lirong21/p/3876468.html

    展开全文
  • CPU 寄存器

    2019-09-27 01:41:10
    寄存器是中央处理器内的组成部分,是有限存贮容量的高速...集成电路设计中,寄存器可分为电路内部使用的寄存器和充当内外部接口的寄存器这两类。内部寄存器不能被外部电路或软件访问,只是为内部电路的实现存储...

      寄存器是中央处理器内的组成部分,是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和地址。在中央处理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序计数器(PC)。

      寄存器是集成电路中非常重要的一种存储单元,通常由D触发器组成。在集成电路设计中,寄存器可分为电路内部使用的寄存器和充当内外部接口的寄存器这两类。内部寄存器不能被外部电路或软件访问,只是为内部电路的实现存储功能或满足电路的时序要求。而接口寄存器可以同时被内部电路和外部电路或软件访问,CPU中的寄存器就是其中一种,作为软硬件的接口,为广泛的通用编程用户所熟知。

      寄存器拥有非常高的读写速度,所以在寄存器之间的数据传送非常快。寄存器是内存阶层中的最顶端,也是系统获得操作资料的最快速途径。寄存器通常都是以他们可以保存的位元数量来估量,举例来说,一个“8位元寄存器”或“32位元寄存器”。

    16位寄存器

    以8086(16位处理器,14个寄存器)为例。按其用途可分为:

    • 通用寄存器(8个):

      • 数据寄存器

        AH&AL=AX(accumulator):累加寄存器,常用于运算;在乘除等指令中指定用来存放操作数,另外,所有的I/O指令都使用这一寄存器与外界设备传送数据。

        BH&BL=BX(base):基址寄存器,常用于地址索引。

        CH&CL=CX(count):计数寄存器,常用于计数,常用于保存计算值。如在移位指令,循环(loop)和串处理指令中用作隐含的计数器。

        DH&DL=DX(data):数据寄存器,常用于数据传递。

        这4个16位的寄存器可以分为高8位:AH,BH,CH,DH。以及低八位:AL,BL,CL,DL。这2组8位寄存器可以分别寻址,并单独使用。

      • 指针寄存器和变址寄存器:

        SP(Stack Pointer):堆栈指针,与SS配合使用,可指向目前的堆栈位置。BP(Base Pointer):基址指针寄存器,可用作SS的一个相对基址位置。SI(Source Index):源变址寄存器,可用来存放相对于DS段之源变址指针。DI(Destination Index):目的变址寄存器,可用来存放相对于ES 段之目的变址指针。

        这4个16位寄存器只能按16位进行存取操作,主要用来形成操作数的地址,用于堆栈操作和变址运算中计算操作数的有效地址。

    • 指令指针(1个):

      指令指针IP是一个16位专用寄存器,它指向当前需要取出的指令字节,当BIU从内存中取出一个指令字节后,IP就自动加(取出该字节的长度,如:BIU从内存中取出的是1个字节,IP就会自动加1,如果BIU从内存中取出的字节数长度为3,IP就自动加3),指向下一个指令字节。注意,IP指向的是指令地址的段内地址偏移量,又称偏移地址(Offset Address)或有效地址(EA,Effective Address)。

      BIU是80x86微处理系统芯片中的两个基本功能部件之一,中文为总线接口部件(Bus Interface Unit)。BIU是和总线打交道的接口部件,它根据执行单元(Execution Unit)的请求,执行8086 CPU 对存储器或 I/O 接口的总线操作,完成数据传送,BIU由指令队列缓冲器,16位指令指针寄存器CS、DS、SS和ES,地址产生器和段寄存器,总线控制逻辑等部分构成。

    • 标志寄存器(1个):

      标志寄存器(Flags Register,FR)又称程序状态字(Program Status Word,PSW)。这是一个存放条件标志、控制标志寄存器,主要用于反映处理器的状态和运算结果的某些特征及控制指令的执行。

      在FR中有意义的有9位,其中6位是状态位,3位是控制位。

    标志描述
    CF(carry flag) 进位标志,主要用来反映无符号数运算是否产生进位或借位。如果运算结果的最高位产生了一个进位或借位,那么,其值为1,否则其值为0。
    PF(parity flag) 奇偶标志,用于反映运算结果中“1”的个数的奇偶性。如果“1”的个数为偶数,则PF的值为1,否则其值为0。
    AF(adjust flag) 辅助进位标志,存在下列情况值被置为1,否则其值为0:在字操作时,发生低字节向高字节进位或借位时;在字节操作时,发生低4位向高4位进位或借位时。
    ZF(zero flag) 零标志,用来反映运算结果是否为0。如果运算结果为0,则其值为1,否则其值为0。在判断运算结果是否为0时,可使用此标志位。
    SF(sign flag) 符号标志,用来反映运算结果的符号位,它与运算结果的最高位相同。在微机系统中,有符号数采用补码表示法,所以,SF也就反映运算结果的正负号。运算结果为非负数时,SF的值为0,否则其值为1。当运算结果没有产生溢出时,运算结果等于逻辑结果(即应该得到的正确的结果),此时SF表示的是逻辑结果的正负,当运算结果产生溢出时,运算结果不等于逻辑结果,此时的SF值所表示的正负情况与逻辑结果相反,即:SF=0时,逻辑结果为负,SF=1时,逻辑结果为非负。
    TF(trap flag) 跟踪标志,可用于程序调试。TF标志没有专门的指令来设置或清除。如果TF=1,则CPU处于单步执行指令的工作方式,此时每执行完一条指令,就显示CPU内各个寄存器的当前值及CPU将要执行的下一条指令。如果TF=0,则处于连续工作模式。
    IF(interrupt enable flag) 中断允许标志,用来决定CPU是否响应CPU外部的可屏蔽中断发出的中断请求。但不管该标志为何值,CPU都必须响应CPU外部的不可屏蔽中断所发出的中断请求,以及CPU内部产生的中断请求。具体规定如下:当IF=1时,CPU可以响应CPU外部的可屏蔽中断发出的中断请求;当IF=0时,CPU不响应CPU外部的可屏蔽中断发出的中断请求。
    DF(direction flag) 方向标志,用来决定在串操作指令执行时有关指针寄存器发生调整的方向。
    OF(overflow flag) 溢出标志,用于反映有符号数加减运算所得结果是否溢出。如果运算结果超过当前运算位数所能表示的范围,则称为溢出,OF的值被置为1,否则,OF的值被清为0。
    • 段寄存器(4个):

      • CS(Code Segment):代码段寄存器

      • DS(Data Segment):数据段寄存器 

      • SS(Stack Segment):堆栈段寄存器
      • ES(Extra Segment):附加段寄存器

    当一个程序要执行时,就要决定程序代码、数据和堆栈各要用到内存的哪些位置,通过设定段寄存器CS,DS,SS来指向这些起始位置。通常是将DS固定,而根据需要修改CS。所以,程序可以在可寻 址空间小于64K的情况下被写成任意大小。所以,程序和其数据组合起来的大小,限制在DS所指的64K内,这就是COM文件不得大于64K的原因。8086以内存作为战场,用寄存器做为军事基地,以加速工作。

    备注:由于所讲的是16位cpu,IP寄存器的位数为16,即:偏移地址为16位,2的16次幂就是64K,所以16位段地址不能超过64K,超过64K会造成64K以上的地址找不到。

    32位寄存器

    32位CPU 寄存器及数据结构图:

    • 通用寄存器(8个):EAX、EBX、ECX、EDX、ESP、EBP、ESI、EDI

      • 尽管这8个通用寄存器大多时候是通用的,可以用作任何用途,但是在某些情况下,他们也有隐含的用法。比如ECX、ESI和EDI在串循环操作中分别用作计数器、源和目标。EBP和ESP主要用来维护栈,ESP通常指向栈的顶部,EBP指向当前栈帧的起始地址。

      • EAX, EBX, ECX, EDX都可以作为32位寄存器、16位寄存器或者8位寄存器使用。用法类似16位数据寄存器。

      • EBP和ESP是32位寄存器,也可作为16位寄存器BP, SP使用,常用于椎栈操作。

      • EDI和ESI常用于串操作,EDI用于寻址目标数据串,ESI用于寻址源数据串。

    • 标志寄存器(1个):EFLAGS

      控制任务状态和模式切换、中断处理、指令追踪和访问权限控制.寄存器中的标志位需要特权指令代码才可以修改(特权指令:运行在内核态下的代码)

      在16位标志寄存器的基础上增加了几个标志:

     

    标志描述
    IOPL(I/O privilege level field) 指示当前运行任务的I/O特权级(I/O privilege level),正在运行任务的当前特权级(CPL)必须小于或等于I/O特权级才能允许访问I/O地址空间。这个域只能在CPL为0时才能通过POPF以及IRET指令修改。
    NT(Nested task flag) 控制中断链和被调用任务。若当前任务与前一个执行任务相关则置1,反之则清零。
    RF(Resume flag) 控制处理器对调试异常的响应。
    VM(Virtual-8086 mode flag) 置1以允许虚拟8086模式,清除则返回保护模式。
    AC(Alignment check flag) 该标志以及在CR0寄存器中的AM位置1时将允许内存引用的对齐检查,以上两个标志中至少有一个被清零则禁用对齐检查。
    VIF(Virtual interrupt flag) 该标志是IF标志的虚拟镜像(Virtual image),与VIP标志结合起来使用。使用这个标志以及VIP标志,并设置CR4控制寄存器中的VME标志就可以允许虚拟模式扩展(virtual mode extensions)
    VIP(Virtual interrupt pending flag) 该位置1以指示一个中断正在被挂起,当没有中断挂起时该位清零。(Software sets and clears this flag; the processor only reads it)与VIF标志结合使用。
    ID(Identification flag) 程序能够设置或清除这个标志指示了处理器对CPUID指令的支持。

     

    • 控制寄存器(5个):CR0-CR4

    控制寄存器决定处理器的操作模式和当前执行任务的一些特征。

      • CR0:控制系统的工作模式和处理器的状态;x86_32的CR0为32bit。X86_64下为64bit,其中低32bit与x86_32的CR0保持一致,高32bit没有定义,作保留使用,除了bit4其他所有位都是可读可写的。

     

    标志描述
    PE(Protected-Mode Enable) PE=0,表示CPU处于实模式;PE=1表CPU处于保护模式,并使用分段机制。
    MP 协处理器监视标志位
    EM 该位表明是否需要仿真协处理器的功能
    TS 每当任务切换时就设置该位,并且在解释协处理器指令之前测试该位
    ET 扩展类型。设置有效位时,支持 ntel 387 DX 数学协处理器指令
    NE 数字错误标志位(与浮点协处理器共同使用)
    WP 写保护
    AM 对齐功能屏蔽(与EFLAGS寄存器中 AC标志位一同使用)
    NW 直写无效(直写:高速缓存中的数据始终保持与主存储器中数据匹配,也叫做通写 )
    CD cache 缺失设置位
    PG(Paging Enable) 控制分页机制,PG=1,启动分页机制;PG=0,不使用分页机制。
      • CR1:保留
      • CR2:存放发生页错误时的虚拟地址

     

      • CR3:用来存放最高级页目录地址(物理地址),各级页表项中存放的也是物理地址。

     

    标志描述
    PWT(Page-Level Writethrough) 控制cache采取直写还是回写的策略。当设置清空时,回写有效。当置位时,直写有效
    PCD(Page-Level Cache Disable) PCD=1,表示最高目录表不可缓存,PCD=0,相反
    • Figure 3-4中,不使用PAE技术,有两层页表。最高层为页目录有1024项,占用4KB。page_directory_table base address为物理地址,指向4KB对齐的页目录地址。
    • Figure 3-5中,使用PAE技术,三层页表寻址。最高层为页目录指针,4项,占用32B空间。所以  page_directory_table base address为27位,指向32B对齐的页目录指针表。
      • CR4:一些结构的扩展。表明对于特定的处理器和操作系统执行支持。

     

    标志描述
    VME(virtual 8086 mode extension) 虚拟8086模式扩展位。VME=1,允许虚拟8086扩展,即允许8086模式和虚拟8086中断。VME=0,禁止虚拟8086模式扩展。
    PVI(protected mode virtual interrupts) 保护模式虚拟中断位。PVI=1,允许保护模式虚拟中断。PVI=0,禁止保护模式虚拟中断。
    TSD(time stamp disable) 禁止RDTSC指令位。TSD=0,则允许RDTSC(读时间标志计算器)指令在任何特权级上执行。TSD=1,仅允许RDTSC指令在0级特权级上执行,否则将发生一般保护模式异常。
    DE(debugging extensions) 调试扩展位。DE=1,允许输入/输出断点。DE=0,不支持输入/输出断点。
    PSE(page size extensions) 允许页容量大小扩展位。PSE=1,允许每页容量为4MB。PSE=0,只允许每页容量为4KB。
    PAE(physical address extension) 允许物理地址扩展位。PAE=1,允许采用32位以上的物理地址(包括32位和64位地址)。PAE=0,只允许采用32位物理地址。
    MCE(machine check exception) 允许机器检查异常位。MCE=1,允许机器检查异常。MCE=0,不允许机器检查异常。
    PGE(Page-Global Enable) 将PGE设置为1可启用全局页面机制。将该位清除为0将禁用该机制。当启用PGE时,系统软件可以将页面转换层级的最低级别的全局页面(G)位设置为1,表示页面翻译是全局的。当页面翻译表基地址(CR3)更新时,标记为全局的页面翻译在TLB中不会失效。
    PCE(Performance-Monitoring Counter Enable) 将PCE设置为1允许在任何权限级别运行的软件使用RDPMC指令。软件使用RDPMC指令读取性能监视MSRs PerfCtrn。 将PCE清除为0仅允许最特权的软件(CPL = 0)使用RDPMC指令。
    OSFXSR(FXSAVE/FXRSTOR Support) 设置为1,以使能256位和128位媒体指令。当该位设置为1时,它还指示系统软件使用FXSAVE和FXRSTOR指令来保存和恢复x87,64位介质和128位介质指令的处理器状态。
    OSXMMEXCPT(Unmasked Exception Support) 当系统软件支持SIMD浮点异常(#XF)来处理未屏蔽的256位和128位媒体浮点错误时,系统软件必须将OSXMMEXCPT位设置为1。将OSXMMEXCPT位清除为0表示不支持#XF处理程序。 当OSXMMEXCPT = 0时,未屏蔽的128位媒体浮点异常会导致无效操作码异常
    OSXSAVE(XSAVE and Extended States) 设置为1,则操作系统支持XGETBV,XSETBV,XSAVE和XRSTOR指令。处理器也将能够执行XGETBV和XSETBV指令,以读写XCR0。
    • 调试寄存器(8个):DR0-DR7

     

    调试寄存器主要作用是调试应用代码、系统代码、开发多任务操作系统.来监视代码的运行和处理器的性能。

    DR0-DR3:保留32位断点的线性地址。

    DR4-DR5:保留。

    DR6:

    标志描述
    B0-B3 断点状态的监测
    BD 调试寄存器访问监测。置位,表明在指令流中,下一条指令将访问其中的一个调试寄存器
    BS 单步执行标志位
    BT 任务转换标志位

    DR7:

    标志描述
    L0-L3 局部断点使能标志位
    G0-G3 全局断点使能标志位
    LE GE 置位,表明处理器可以监测导致数据断点的指令。推荐置位为1
    GD 通用监测使能标志位。表明是否开启调试寄存器保护
    LEN0 - LEN3 用来表明相应断点地址寄存器内存位置的大小
    R/W0 - R/W3 相应断点的状态
    • 系统地址寄存器(4个):GDTR、IDTR、LDTR和TR

      GDTR:全局描述符表寄存器,是一个48位寄存器,用来存放全局描述符表GDT的32位线性基地址和16位的界限值。在全局描述符表中不仅包括有操作系统使用的描述符,而且还有所有任务使用的公用描述符。

      IDTR:中断描述符表寄存器,是一个48位寄存器,用来存放中断描述符表IDT的32位线性基地址和16位的界限值。

      LDTR:局部描述符表寄存器,是一个16位寄存器,用来存放局部描述符表LDT的16位选择符。另外还有一个隐含的描述符高速缓冲寄存器,用来存放LDT表描述符。

      TR:任务状态寄存器,是一个16位寄存器,用来存放任务状态段TSS的16位选择符。与之相应,也有一个隐含的描述符高速缓冲寄存器,用来存放任务状态段TSS的描述符。

    • 16位段寄存器(6个):CS、DS、ES、FS、GS、SS

      段寄存器有两部分,一部分是编程可见的选择器寄存器,为6个16位寄存器,对应在另一部分有6个64位的描述符寄存器,后一部分是编程不可见的。

      在实地址方式或虚拟8086方式,描述符寄存器不起作用,选择器寄存器退化成16位CPU的段寄存器功能,存放内存段的段基址——段首地址的高16位,其中CS对应于代码段、SS对应于堆栈段,DS对应于数据段,ES对应于附加数据段,在串操作时,DS和ES分别对应于源数据段和目的数据段。FS和GS没有定义。

    • 其他寄存器:EIP、TSC等

      • 指令指针指示器--EIP

        32位寄存器,低16位称为IP,用与兼容16位CPU,其内容是下一条要取入CPU的指令在内存中的偏移地址。当一个程序开始运行时,系统把EIP清零,每取入一条指令,EPI自动增加取入CPU的字节数目。所以称EIP为指令指针。

      • 时间戳寄存器--TSC

        每个时钟周期时其值加1,重启时清零。通过RDTSC指令读取TSC寄存器,只有当CR4寄存器的TSD位为0时,才可以在任何优先级下执行该指令,否则只能在特权级下执行该指令。

      • 浮点寄存器

        由于在80486微处理器内部设有浮点运算器,因此在其内部有相应的寄存器,其中包括8个80位通用数据寄存器、1个48位指令指针寄存器、1个48位数据指针寄存器、1个16位控制字寄存器、1个16位状态字寄存器和1个16位标记字寄存器。

    主要技术

    重命名技术:寄存器重命名,是CPU在解码过程中对寄存器进行重命名,解码器把“其它”的寄存器名字变为“通用”的寄存器名字,本质上是通过一个表格把x86寄存器重新映射到其它寄存器,这样可以让实际使用到的寄存器远大于8个。这样做的好处除了便于前面指令发生意外或分支预测出错时取消外,还避免了由于两条指令写同一个寄存器时的等待。

    乱序执行技术:采用乱序执行技术使CPU内部电路满负荷运转并相应提高了CPU运行程序的速度。类似多个CPU同步执行。

    特点

    寄存器又分为内部寄存器与外部寄存器,所谓内部寄存器,其实也是一些小的存储单元,也能存储数据。但同存储器相比,寄存器又有自己独有的特点:

    1. 寄存器位于CPU内部,数量很少,仅十四个

    2. 寄存器所能存储的数据位数根据处理器类型不同而不同(8bit、16bit及32bit)

    3. 每个内部寄存器都有一个名字,而没有类似存储器的地址编号

    参考资料

    80X86寄存器详解

    寄存器(百度百科)

    Intel X86 CPU系列的寄存器

    CR0-4寄存器介绍

    转载于:https://www.cnblogs.com/chengqian90/p/7475531.html

    展开全文
  • 微型计算机的基本组成电路 2.1 算术逻辑单元 2.2 触发器 2.3 寄存器 2.4 三态输出电路 2.5 总线结构 2.6 存储器 习题 任何一个复杂的电路系统都可以划分为若干电路,这些电路大都由一些典型的电路组成。...
  • 寄存器是由触发器组成的,一个触发器...1缓冲寄存器它是用来暂存某个数据,以便适当的时间节拍和给定的计算步骤将数据输入或输出到其它记忆单元中去,下图是一个并行输入、并行输出的4位缓冲器的电路原理图,它由...
  • 寄存器,寄存器是什么意思寄存器定义寄存器是中央处理器内的组成部分。寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和位址。中央处理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序计数器...
  • 寄存器的概念

    2018-10-19 11:27:00
    寄存器,是集成电路中非常重要的一种存储单元,通常由触发器组成。 +++++++++++++++++++++++++++++++++++++++++++++++++++ 寄存器的分类: 寄存器可分为电路内部使用的寄存器和充当内外部接口的寄存器这两类。 ...
  • 寄存器和内存的区别1、寄存器是中央处理器内的组成部份。它跟CPU有关。...2、内存既专业名的内存储器,内存是由内存芯片、电路板、金手指等部分组成的。它包涵的范围也很大,一般分为只读存储器和随...
  • 彻底理解锁存器,让你不再为锁存器头疼! 锁存器(latch):是电平触发的存储单元,数据存储的动作(状态转换)取决于输入时钟(或者使能)信号的电平值...实际的数字系统中,为了协调各部分的工作,往往需要有一...
  • 后知后觉-寄存器

    2019-09-04 18:22:17
    寄存器是中央处理器内的组成部分。寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和地址。...集成电路设计中,寄存器可分为电路内部使用的寄存器和充当内外部接口的寄存器这两类。内...
  • 时序逻辑电路由两个部分组成,组合电路和存储电路,其中存储电路是必不可少的,并且存储电路的输出必须反馈到组合电路的输入端,与输入信号一起决定组合逻辑的输出。 而根据时序逻辑电路的输出信号的特点,又将其...
  • 寄存器和存储器

    万次阅读 多人点赞 2018-04-12 12:43:48
    它是为众多应用程序提供对计算机硬件的安全访问的一部分软件,这种访问是有限的,并且内核决定一个程序什么时候对某部分硬件操作多长时间。内核的分类可分为单内核和双内核以及微内核。严格地说,内核并不是计算机...
  • 寄存器和GPIO

    2020-09-27 17:34:36
    2、GPIO就是芯片的引脚(芯片的引脚有些不是GPIO,只有一部分是),作为GPIO的这类引脚,他的功能和特点是可以被编程控制它的工作模式,也可以编程控制他的电压高低等。 3、嵌入式系统中,经常需要控制许多结构...
  • 锁存器、触发器和寄存器的比较锁存器(latch):是电平触发的存储单元,数据存储的动作(状态转换)取决于输入时钟(或者使能)信号的电平值,尽当锁存器处于使能状态时,输出才会随着数据输入发生变化。 分为普通...
  • 寄存器的分类及作用

    千次阅读 多人点赞 2021-01-14 11:01:55
    目录 一、存储器与寄存器 ...寄存器是中央处理器内的组成部份。它跟CPU有关。 内存和寄存器是为了解决存储器读写速度而产生的多级存储机制。 寄存器亦称缓存,一般是指由基本触发器结构衍生出来的D触发..
  • Linux_CPU寄存器简介

    2013-03-30 14:24:00
    寄存器 寄存器是CPU内部用来存放数据的一些小型存储区域,用来暂时存放参与运算的数据和运算结果。...寄存器是中央处理器内的组成部份。寄存器是有限存贮容量的高速存贮部件,它们可用来暂...
  • 1.一个典型的CPU由运算器,控制器,寄存器等器件组成。 内部总线实现CPU内部各个器件之间的联系。 外部总线实现CPU和主板其它器件的联系。 2.8086是Intel系列中16位微处理器,地址总线20位。 8086有14个16位...
  • 1、寄存器是中央处理器内的组成部份。它跟CPU有关。寄存器是有限存贮容量的...2、内存既专业名的内存储器,内存是由内存芯片、电路板、金手指等部分组成的。它包涵的范围也很大,一般分为只读存储器和随即存储器,
  • 寄存器 和 存储器

    2019-08-10 17:55:14
    它是为众多应用程序提供对计算机硬件的安全访问的一部分软件,这种访问是有限的,并且内核决定一个程序什么时候对某部分硬件操作多长时间。内核的分类可分为单内核和双内核以及微内核。严格地说,内...
  • X86汇编常见的寄存器

    千次阅读 2019-08-03 11:52:39
    X86汇编常见的寄存器 4个数据寄存器(EAX、EBX、ECX和EDX) 2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP) 6个段寄存器(ES、CS、SS、DS、FS和GS) 1个指令指针寄存器(EIP) 1个标志寄存器(EFlags) AH&AL...
  • 1、寄存器是中央处理器内的组成部份。它跟CPU有关。...2、内存既专业名的内存储器,内存是由内存芯片、电路板、金手指等部分组成的。它包涵的范围也很大,一般分为只读存储器和随即存储器,以及最...
  • 2 初识STM32——寄存器

    2020-04-19 12:36:33
    补充:触发器,数字电路系统中的存储器,需要同一时刻接收到一个脉冲(CLK)作为控制信号,只有CLK到来时电路才被触发产生动作,并根据输入型号改变输出状态。这种时钟型号触发的存储电路单元称为触发器,以区别...
  • 寄存器 存储器 锁存器

    千次阅读 2016-03-06 10:56:21
    21个特殊功能寄存器(52系列是26个)不连续地分布128个字节的SFR存储空间中,地址空间为80H-FFH,这片SFR空间中,包含有128个位地址空间,地址也是80H-FFH,但只有83个有效位地址,可对11个特殊功能寄存器的某些...
  • 寄存器和RAM之间的区别

    千次阅读 2020-06-23 00:02:07
    寄存器和RAM之间的区别概述寄存器CPU的通用寄存器外围功能的控制寄存器RAM可以放入任意数据可以按顺序保存大量数据逻辑构成与C编译器的关系 ...安装CPU的通用寄存器(或累加器)和控制微型计算机外围功能的控
  • 第四章_寄存器

    2020-12-20 13:27:33
    1 存储器的分类(各类存储体的特点、主要用途) 2 存储系统的层次结构 3 主存储器的概念及基本组成框图 4 高速缓冲存储器的概念 5 利用高速缓存提高系统运行速度所基于的原理 6 高速缓存与主存之间的映射方式和方法 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,313
精华内容 4,525
关键字:

寄存器在电路组成上的特点