zoukankan      html  css  js  c++  java
  • 一文理解CPU进行简单加法(计算机组成原理5.1CPU的功能和基本结构)

    这篇文章真的是千呼万唤始出来!总结这部分知识点花了不少时间。
    对不起好兄弟萌,我写得这么垃圾还拖更。

    5.1.1CPU的功能

    5.1.1.1 CPU的基本功能

    指令控制:完成取指令,分析指令和执行指令的操作,即程序的顺序控制。
    操作控制:一条指令由若干操作信号组成。CPU管理并产生由内存取出的每条指令的操作信号,把各种操作信号送往相应部件,从而控制这些部件按指令的要求进行动作。
    时间控制:对各种操作加以时间上的控制。时间控制要为每条指令按时间顺序提供相应的控制信号。
    数据加工:对数据进行算术和逻辑运算。
    中断处理:对计算机运行过程中出现的异常情况和特殊请求进行处理。

    5.1.1.2 运算器的功能

    对数据进行加工。

    5.1.1.3 控制器的功能

    控制器协调并控制计算机个部件执行程序的指令序列,基本功能有取指令、分析指令、执行指令。
    取指令:取指令时CPU自动形成下一条指令的存放地址,即PC + 1;每一条指令执行完毕CPU自动发出取指令的命令。
    分析指令:对取得指令进行操作码译码,分析指令的要进行什么操作,以及对分析地址码,根据不同的数据寻址方式取得操作数有效地址。
    PC指向加法程序的某一条指令
    执行指令:根据分析指令得到的操作命令和操作数地址,形成操作信号控制序列。每条指令由多个不同的微操作执行,每个微操作对应一个控制信号,因此执行指令即为形成操作信号控制序列,控制设备完成相应操作的过程。每执行完毕一条指令,CPU会检查是否有中断信号需要处理,此时控制器对总线进行处和IO设备进行处理,如处理异常情况和特殊请求。
    中断处理:管理总线和IO,处理异常情况和特殊请求。

    5.1.2 CPU的基本结构

    在这里插入图片描述

    5.1.3 运算器的基本结构

    在这里插入图片描述
    算术逻辑单元:ALU,主要进行算术/逻辑运算。
    暂存寄存器:暂存从主存读取来的数据,暂存寄存器对程序员是透明的。
    累加寄存器:ACC,是一个通用寄存器,暂存ALU的运算结果,可以作为加法运算的一个输入端。
    通用寄存器:上图中R0,R1,R2,R3即为通用寄存器,X86计算机中,名为AX、BX、CX、DX、SP。上图中的AH和AL,BH和BL等,意为AX,BX的高位和低位。通用寄存器保存操作数和各种地址信息。SP是堆栈指针,操作系统会给每个正在运行的程序分配一个堆栈来存放该程序产生的数据,SP作为该堆栈的栈顶指针。SP也被单独划分为特殊的专用寄存器
    关于堆栈指针,可以与数据寻址中堆栈寻址联系起来:如下图,假设堆栈寄存器里存放的是某进程产生的返回值和参数等数据。寻址得到的操作数被输送到ALU参与加法运算,再返回到堆栈寄存器中。
    在这里插入图片描述

    程序状态字寄存器:PSW,也称为状态寄存器或者有的题目叫做标志寄存器,保留由算术逻辑运算或者测试指令产生的结果而建立的状态信息,如溢出标志OF,符号标志SF等。
    移位器:对操作数或者运算结果进行移位。
    计数器:控制乘除运算的操作步数。

    运算器内部传送流动的两种方式
    专用数据通路方式

    根据指令执行过程中的数据和地址的流动方向安排连接线路。
    在这里插入图片描述
    假设R0,R1,R2,R3为一组通用寄存器,每个通用寄存器都有若干条专用数据通路与ALU连接,如假设R0可以存放16bit数据,则R0有16条数据通路与ALU连接。R0两侧都有数据通路与ALU连接,意为可以从A或B端输入数据。后续R1,R2,R3同理。
    上图可以看出四个寄存器是同时向ALU输入数据的,因此在运算时会有数据冲突,为了解决这个问题。
    解决专用数据通路方式中多个寄存器同时向ALU输送数据的问题:
    方法一:使用多路选择器
    在这里插入图片描述
    假设C1的控制信号是00,C2的控制信号是01,则意为R0从左侧输入数据,R1从右侧输入数据,其余两个不输入数据。在ALU与一组通用寄存器之间使用多路选择器以达到控制寄存器内数据是输入的效果。

    方法二:使用三态门
    在这里插入图片描述
    使用三态门以及不同的电信号以控制和选择寄存器内数据的输入。每一个数据通路使用一个三态门,三态门一侧输入端连接通用寄存器,另一侧输出端连接ALU的,还有一侧端口连接释放电信号的控制器,如寄存器R0out的三态门的电信号为高电平1时,三态门就可以通电,意味着R0的数据可以传送到ALU内参与运算,若三态门电信号为低电平0时,意味着寄存器R0的数据无法输入到ALU。

    采用专用数据通路的方式传输数据,性能较高,不存在数据冲突的现象,但是实现需要付出代价较大。

    CPU内部单总线方式:

    将所有寄存器的输入端和输出端都连接到一条公共的通路上。
    在这里插入图片描述
    这种通过CPU内部总线的方式,由于参与计算的通用寄存器同时向ALU传输数据会产生数据冲突,因此在ALU其中一端设置暂存寄存器,暂存从寄存器读取来的数据。
    假设需要寄存器R0和R1的数据参与运算,且运算结果放回R0,则
    (1)先把R0out的三态门打开使它的数据传输到ALU输入端暂存寄存器,然后关闭R0的输出有效信号,打开R1的三态门使它的数据传输到ALU。
    (2)接下来,ALU内部进行加法运算,在这个过程中,ALU持续计算且需要等待R0与R1输入的电信号稳定后才可输出计算结果返回到R0,因此,为了防止ALU在电信号稳定前输出错误的运算结果,还要在ALU输出端设置一个暂存寄存器以一个及三态门。
    (3)电信号稳定后导通ALU输出端三态门,运算结果输出到内部总线,此时接通R0输入端三态门,运算结果返回R0。至此,一次运算完毕。
    上述运算的过程,可以通过增加一个累加寄存器(ACC)和标志寄存器(PSW)来实现优化。ACC用来暂存ALU每次运算的结果,PSW用来保存每次运算结果的状态,如是否产生了进位,或者预算暖是否溢出等。

    5.1.4 控制器的基本结构(与运算器一起理解)

    在这里插入图片描述
    图中控制单元CU包括:指令译码器,时许系统,微操作信号发生器。其余PC和IR,MAR,MDR都如上图所示构成。灰色为用户不可见的寄存器(不可编成),棕色为用户可见寄存器(可编程,如汇编语言)。
    运行一次加法过程,假设操作数b在寄存器,操作数a在主存
    (1)PC从内部总线中取得由MDR传输的指令A,PC取出的指令放到IR中,由IR解析获得操作码和地址码,地址码输出到内部总线,操作码传输到指令译码器,PC + 1。
    (2)译码器解析的结果指挥微操作信号发生器,判断对应的微操作信号序列,同时由时序系统判断执行顺序,执行同时由PSW判断执行状态。
    (3)假设操作码解析后意为从主存中取出操作数进行加法操作,则地址码是下一条指令的存放地址B。该地址码传输到MAR里,PSW判断操作无误,MAR的数据传输到地址总线,从主存单元中取出下一条指令B,并经过数据总线放入MDR。
    (4)PSW判断操作无误,MDR中存放的指令传输到内部总线,经过内部总线,由PC取得指令B。
    (5)PC取得指令B,PC + 1,并将指令B放入IR进行解析,IR解析完毕把操作码放入译码器,译码器解析意为从主存取得操作数a,地址码放入内部总线,等待MAR获取。
    (6)MAR获取操作数a的存放地址并将该地址传输到地址总线,从主存单元取得操作数a,经过数据总线把a放入MDR,等待PSW判断。
    (7)PSW判断无误,MDR中的操作数a放入内部总线,PSW判断无误,把a放入暂存寄存器,等待执行加法运算。
    (8)三态门连通,把操作数b放入ALU,a和b进行运算,运算结果暂存到ACC。
    (9)至此,一次加法运算完毕。
    CPU执行指令的过程,均可通过这张图来帮助理解。
    一次加法的基本运算
    上述过程可以举个例子类比理解:
    比如,工人甲在流水线上加工货物,甲收到通知信息A,A指示货物在某个仓库,需要甲去仓库取得货物B并进行加工,甲会去仓库取得货物B,然后带回流水线进行加工。
    甲收到A消息的过程就是取得PC取得指令A以及IR进行译码操作的过程。
    甲去仓库取货物B就是PC去主存寻得指令B的过程。
    甲将B带回流水线加工,则是操作数a被放到MDR,以及进行加法运算的过程。

    本想画漫画解释例子帮助理解,但是手残党表示心累....

  • 相关阅读:
    Python的subprocess子进程和管道进行交互
    python UnicodeEncodeError: 'ascii' codec can't encode characters 解决办法
    如何创建,增加swap
    nginx.conf配置
    15个极好的Linux find命令示例(二)
    15个实用的Linux find命令示例(一)
    vmware 虚拟机 mount :no medium found解决方法
    服务器上的iptables
    源码编译安装MySQL
    ORACLE参数文件
  • 原文地址:https://www.cnblogs.com/kevibglaser/p/14817417.html
Copyright © 2011-2022 走看看