cpu中的寄存器与内部寻址方式

cpu中的寄存器

在CPU中至少要有六类寄存器:指令寄存器(IR)、程序计数器(PC)、地址寄存器(AR)、数据寄存器(DR)、累加寄存器(AC)、程序状态字寄存器(PSW)。这些寄存器用来暂存一个计算机字,其数目可以根据需要进行扩充。

  1. 数据寄存器

数据寄存器(Data Register,DR)又称数据缓冲寄存器,其主要功能是作为CPU和主存、外设之间信息传输的中转站,用以弥补CPU和主存、外设之间操作速度上的差异。

数据寄存器用来暂时存放由主存储器读出的一条指令或一个数据字;反之,当向主存存入一条指令或一个数据字时,也将它们暂时存放在数据寄存器中。

数据寄存器的作用是 :

(1)作为CPU和主存、外围设备之间信息传送的中转站;

(2)弥补CPU和主存、外围设备之间在操作速度上的差异;

(3)在单累加器结构的运算器中,数据寄存器还可兼作操作数寄存器。

  1. 指令寄存器

指令寄存器(Instruction Register,IR)用来保存当前正在执行的一条指令。

当执行一条指令时,首先把该指令从主存读取到数据寄存器中,然后再传送至指令寄存器。

指令包括操作码和地址码两个字段,为了执行指令,必须对操作码进行测试,识别出所要求的操作,指令译码器(Instruction Decoder,ID)就是完成这项工作的。指令译码器对指令寄存器的操作码部分进行译码,以产生指令所要求操作的控制电位,并将其送到微操作控制线路上,在时序部件定时信号的作用下,产生具体的操作控制信号。

指令寄存器中操作码字段的输出就是指令译码器的输入。操作码一经译码,即可向操作控制器发出具体操作的特定信号。

  1. 程序计数器

程序计数器(Program Counter,PC)用来指出下一条指令在主存储器中的地址。

在程序执行之前,首先必须将程序的首地址,即程序第一条指令所在主存单元的地址送入PC,因此PC的内容即是从主存提取的第一条指令的地址。

当执行指令时,CPU能自动递增PC的内容,使其始终保存将要执行的下一条指令的主存地址,为取下一条指令做好准备。若为单字长指令,则(PC)+1àPC,若为双字长指令,则(PC)+2àPC,以此类推。

但是,当遇到转移指令时,下一条指令的地址将由转移指令的地址码字段来指定,而不是像通常的那样通过顺序递增PC的内容来取得。

因此,程序计数器的结构应当是具有寄存信息和计数两种功能的结构。

  1. 地址寄存器

地址寄存器(Address Register,AR)用来保存CPU当前所访问的主存单元的地址。

由于在主存和CPU之间存在操作速度上的差异,所以必须使用地址寄存器来暂时保存主存的地址信息,直到主存的存取操作完成为止。

当CPU和主存进行信息交换,即CPU向主存存入数据/指令或者从主存读出数据/指令时,都要使用地址寄存器和数据寄存器。

如果我们把外围设备与主存单元进行统一编址,那么,当CPU和外围设备交换信息时,我们同样要使用地址寄存器和数据寄存器。

  1. 累加寄存器

累加寄存器通常简称累加器(Accumulator,AC),是一个通用寄存器。

累加器的功能是:当运算器的算术逻辑单元ALU执行算术或逻辑运算时,为ALU提供一个工作区,可以为ALU暂时保存一个操作数或运算结果。

显然,运算器中至少要有一个累加寄存器。

  1. 程序状态字寄存器

程序状态字(Program Status Word,PSW)用来表征当前运算的状态及程序的工作方式。

程序状态字寄存器用来保存由算术/逻辑指令运行或测试的结果所建立起来的各种条件码内容,如运算结果进/借位标志(C)、运算结果溢出标志(O)、运算结果为零标志(Z)、运算结果为负标志(N)、运算结果符号标志(S)等,这些标志位通常用1位触发器来保存。

除此之外,程序状态字寄存器还用来保存中断和系统工作状态等信息,以便CPU和系统及时了解机器运行状态和程序运行状态。

因此,程序状态字寄存器是一个保存各种状态条件标志的寄存器。

“cpu内部寻址方式部分”

Cpu中的寻址方式:

前端总线分为:地址总线;数据总线;控制总线。

地址总线(其位宽决定了cpu的寻址范围能力,地址总线越多,其寻址范围也就越大。)
数据总线(其位宽决定了一次可以传输多少个bite位回来,一般为8bite。)
控制总线(告诉cpu是读还是写,一般情况下内存只有一根控制总线,因为内存就是读和写)

//内存是由很多个内存单元组成的,每个内存单元占8个bit位(1字节),也就是说内存中有多少个内存单元就意味着可以存储多少个字节,下面是一个只有两个内存单元的内存概念图:
在这里插入图片描述
//注意上图只是根据CPU通过前端总线与北桥和内存之间进行交互画的概念图,并非真正PCB设计图,这里只是讲解CPU是如何与内存单元通讯的。

地址总线:

地址总线的位宽决定了CPU的寻址范围能力,地址总线越多CPU能寻址的范围也就越大,地址总线就相当于计数器,告诉我们寻址范围,地址总线是连接在内存的电路接口处的,地址总线的位宽以2的次方来算。

上图是一个有两个内存单元的RAM,所以一根地址总线就可以表示,2的1次方为2,所以CPU的寻址最大范围是2,对应的编号就是00,01,内存中的存储顺序是以0开始的,这也是为什么数组下标都是以0开始。

数据总线

数据总线决定了内存中有多少bit位,当通过地址总线找对应的内存单元时可以通过与指定内存单元连接的数据总线将数据传送回来! 数据总线的位宽决定了一次可以传送多少个bit 位回来,一般均为8bit!

位宽不能代表有多少根数据总线.位宽决定了数据总线一次传输bit 位的能力,比如上图有两个内存单元,CPU 通过地址总线找到了第二个内存单元的地址,此时的数据总线位宽为:位; 那么一次可以将第二个内存单元里的bit 全部读取出来,那么倘若将第一个内存单元和第二个内存单元全部读取出来,那么需要分两次来读,如果数据总线的位宽是16 位,那么可以一次读完,数据总线的位宽是和地址总线直接挂钩的,假如说数据总线的宽度是32 位,

每一次读取数据都会动用32 根数据总线来读取,也就是一次可以读取4 字节,同时地址总线一次寻址范围也必须能够满足4字节,也就是说每一次寻址都需要2根地址总线!

如果地址总线不满足要求则会出现硬件中断等,还有就是如果地址总线的一次寻址范围是4字节倘若数据总线跟不上的话则会分开读取!不过一般情况下数据总线的位宽是和地址总线的位宽成正比例的,这也是为什么C语言和很多编程软件会有内存对齐机制!

控制总线:
加粗样式
控制总线告诉CPU对这块内存单元做怎样的操作,读还是写,同样控制总线也是接在电路接口处的,控制总线的位宽决定了CPU能对电子元件有多少种控制方法,一般情况下内存中只有一根控制总线,因为一般情况下内存就是读与写!

上面介绍的是地址总线,数据总线,控制总线都属于前端总线,前端总线是将CPU与北桥芯片和内存连接起来的通讯线路,因为内存不属于CPU内部结构单元,内存是在主板上的所以CPU是不能直接操作内存的,需要通过前端总线与北桥交互,北桥芯片通过外部总线将内存中的数据送到一级缓存中去,CPU在通过内部总线将其取到寄存器中!

当然除此之外还有其他总线:

外部总线:

用来连接各种外设控制芯片,如主板上的I/O控制器,(如硬盘接口控制器、软盘驱动控制器、 串行/并行接口控制器等),和键盘控制器,包括外部地址线(XAB),外部数据线(XMB)和外部控制线(XCB)。

内部总线

将处理器的所有结构单元内部相连,它的宽度可以是8,16,32,或64位。如在CPU内部,寄存器之间和算术逻辑部件ALU与控制部件之间传输数据所用的总线称为内总线即芯片内部的总线),内部总线也分地址总线(AB),数据总线(MB),控制总线(CB)

系统总线:

前端总线,外部总线都属于系统总线,系统总线就是连接CPU,存储器,和一切外部设备的通路,内部总线不属于系统总线,因为内部总线是CPU内部用于连接内部结构单元的通讯线路!

这里要说一下北桥与内存连接的前端总线是内存上的,与CPU连接的前端总线是北桥与CPU连接的前端总线,北桥与CPU连接的前端总线的位宽决定CPU内部的一级缓存的寻址范围,北桥先通过数据总线取出值,然后通过与CPU连接的前端总线将数据送往一级缓存中,送入一级缓存时会顺序的写入!倘若一级缓存爆满,则会等待CPU处理完毕在写入!

CPU要往内存中写数据的话也是如此,通过与北桥连接的前端总线将要寻址的地址通过地址总线传输过去,然后通过数据总线将数据发送过去,在通过控制总线告诉北桥芯片往内存里写数据,最后在由北桥通过与内存连接的前端总线将数据写到内存中的指定内存单元里!

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值