计算机组成.就是它在运算.处理器CPU

本文深入探讨了处理器的组成与功能,包括处理器的组成、指令集、流水线技术和指令级并行。介绍了处理器的基本组件,如ALU、控制单元、寄存器以及它们在指令执行过程中的作用。此外,还讲解了指令的格式、寻址方式和指令集设计,对比了CISC和RISC架构。最后,讨论了流水线技术的概念、分类和性能评价,以及如何通过指令级并行提高处理器效率。
摘要由CSDN通过智能技术生成
  • 处理器是要好好复习了,毕竟考试重点
  • 主要的内容感觉还是在指令方面,包括指令的格式、指令集的设计、指令流水线、指令级并行。
  • 东西慢慢整理吧,如果一边在网上搜索的估计会找到很多资料,但是耗费的时间太多了
  • 国内的教材虽然有一定的局限性,但是tm的要考试啊
  • 我觉得需要考试的人不止我一个,,,,,,

处理器的组成与功能

先给一张处理器的概念图,未必很严谨,而且各种处理器的实现方式也不尽相同,但基本的原理其实都在图里可以体现

处理器

组成
  • 大规模集成电路技术的发展,使得芯片的密集程度越来越高,处理器内部的各个结构甚至可以集成到一个半导体芯片上,体积那么小所以称为“微处理器”
  • 微处理器外观上CPU有着密密麻麻的“针脚”,这些针脚就是用来数据传输的,一般一个针脚传送1位的数据,大概是根据有电没电来判断1或0?

CPU

  • 内部是硅晶片,上面有数以百万计的晶体管。由晶体管就可以构成基本的门电路结构,进一步构成ALU等等基本的元件,再进一步就组成了CPU。
  • 针脚
    • 电源针脚VCC和接地针脚GND,除此之外的针脚都用于信号传输
    • 数据总线DB(Data Bus)针脚,用于传输数据
    • 地址总线AD(Address Bus)针脚,用于传输地址
      • 也有通过总线复用技术,让数据和地址共用一套总线,也就是这些针脚既可以传输数据也可以传输地址,用时序信号来控制当前的是数据还是地址
    • 控制总线CB(Control Bus)针脚,用于传输各种控制信号,常见的有
      • 时钟信号CLK
      • 复位Reset
      • 总线请求HRQ
      • 总线允许HLDA
      • 读RD
      • 写WR
      • ……
  • 根据冯诺依曼的模型,计算机的基本组成是
    • CU控制单元、ALU运算器、存储器、输入单元、输出单元
  • 在实现的时候通常把CU和ALU集成在一起构成PU(Processing Unit),PU也被称为“处理器”(Processo)
    • 通常计算机只拥有一个PU,而PU又作为计算机的核心部件,所以又被称为CPU(Central Processing Unit)中央处理器
    • PU由ALU、CU以及一些暂存单元寄存器Register组成
    • ALU的内部有不同的电路可以完成不同的运算
      • 加法器完成算数运算
      • 逻辑运算器完成逻辑运算
      • 移位器完成移位运算
      • 求补器完成取反运算
    • CU是控制单元,作用是接受指令并进行译码,生成微程序来控制CPU内的各个部件那个需要工作那个不需要工作,来完成指令的执行;其实就是一个能读懂指令并可以指挥处理器的各个部件来完成这条指令的指挥重心。基本组成如下
      • 程序计数器PC,用于存放下一跳指令的地址
      • 当前指令寄存器IR
      • 指令译码器ID
      • 控制信号发生器CSG
    • 寄存器Register一般分为
      • 存放数据的数据寄存器
      • 存放地址的地址寄存器
      • 存放各种标志的标志寄存器FR(Flag Register)
        • 零标志ZF(Zero Flag),1表示运算结果为零
        • 符号表示SF(Sign Flag),1表示运算结果为负
        • 奇偶标志PF(Parity Flag),1表示运算结果中1的个数为偶
        • 进位标志CF(Carry Flag)
        • 溢出标志OF(Overflow Flag)
        • ……
  • 然而寄存器只能存储很少量的数据用来辅助处理器的运算,真正的数据都存在主存里,主存对应冯诺依曼模型中的存储器,所以处理器与主存之间的数据交换是十分频繁的。
    • 处理器访问一次主存,无论是从主存读取数据还是往主存写入数据,都称为一次“访存”
    • 访存地址寄存器MAR(Memory Access Register)
    • 交换数据寄存器MDR(Memory Access Register),也有称为MBR(Memory Buffer Register),大概是觉得的MAR和MBR比较顺口吧…
      • 读取:把主存地址写入MAR,启动读命令,目标数据就会从主存的相应位置传输到MDR中
      • 写入:把主存地址写入MAR,把数据写入MDR,启动写命令,目标数据就会从MDR写入到主存的相应位置
    • 注意MAR和MDR是“用户(汇编程序员)透明的寄存器”,也就是没有一条指令可以读写MAR。实际上你写一条从主存取数据的指令,就需要主存地址作为操作数,而这条指令的执行就需要把主存的地址写入MAR中才能完成访存操作。这都隐藏在指令中而不需要我们去操心
基本功能
  • 说起计算机来就是“算数”,好听点叫运算,运算的中心又在CPU。而运算其实也会涉及到很多方面,数据从哪来、怎么算、结果有哪些特性、算的二进制是数据还是地址、结果存到哪里去、运算有什么含义、如何通过信号来控制设备……
    • 这一切都交给了指令的设计,即设计的指令需实现各种各样功能的要求,之后由指令编写的程序才可以真正的实现我们想要的功能
    • 指令一般只涉及一些可以有硬件直接来完成的最基本最基础的功能,其余更复杂的功能都是由若干指令来实现的,当然也可以设计一条指令处理复杂的功能,这也就加大了硬件的复杂度和难度。由此就有两个指令集设计的方向,即精简指令集RISC和复杂指令集CISC。之后会讲
    • 处理器的功能就是不断的执行一条条的指令,对于每一条指令,处理器一般分以下几步
      • 取指令:根据PC的地址取出指令放入IR中,然后PC自加1
      • 分析指令,也叫指令译码:将IR的操作码部分的取出送入指令译码器ID进行移码,译码的结果就是发出相应的控制信号来控制各个部件工作
      • 取操作数,即这条指令所用到的数据 :根据操作数的地址来获取源操作数
      • 处理操作数 :操作数送入运算器并根据ID的译码结果进行相应的运算
      • 写入数据,即处理好的结果存放到相应的位置:将结果写入到指定的地址(可以是寄存器也可以是主存)
    • 以上五步不一定每条指令都需要执行,比如一个简单的 mov ax,bx 只是将 bx寄存器 的数据送入 ax 而并不需要运算,也就不需要处理操作数
综合视角
  • 处理器中的控制单元负责取指令并进行译码,以控制处理器中的各个部件来进行相应的操作,以完成指令的功能
  • 寄存器可以暂存各种数据,以帮助指令实现功能,且寄存器的读取是最快的,要比每次都从主存取数据快得多
  • 运算器负责进行运算,即处理相应的操作数
  • MAR和MBR实现处理器与主存之间数据的交换,对汇编程序员透明,即我们不用管
  • 其他的组件
    • 中断单元负责中断的控制,中断是提高处理器效率的手段之一
    • 再其他的我就不知道了,真正的处理器在设计的时候基本的这些器件都需要有,当然你有别的方法可以代替也不是不可以;而其他的器件也可以往上添加,以实现更多的功能。

处理器的指令集

什么是指令
  • 简言之就是人为设计的一种特殊的语言和计算机交流,计算机可以理解这种语言,人们用指令来指挥计算机完成人们希望完成的工作
  • 为什么这种语言计算机可以理解呢?因为这是一种“人为的设计”,粗糙的讲就是规定好了每一条指令下计算机应该做那些事,这样不就相当于理解了吗
  • 计算机指令Instruction
  • 实际上一条指令更像一个函数,有的指令需要传入操作数,有的指令不需要操作数,根据操作数的数值、种类等等这条指令有会有一些不同的动作
  • 所有的指令的集合称为“指令集”(Instruction Set)或“指令集体系结构”(Instruction Set Architecture,ISA)。

    • 一种处理器肯定是听不懂其他不同种处理器的指令,所以指令集的概念也对应着某种指令集,比如经典的8086处理器的指令集,通常作为汇编语言的入门
    • 这也就是说,汇编语言在不同的处理器上是不同的
  • 这样,指令集其实就是这台计算机的逻辑表示,简单说就是指令集指明了这台计算机所有的功能

    • 指令功能直接反应了计算机的功能
      • 如果一个计算机不支持浮点数运算,那么你即使按照浮点数的格式存储了也没用,因为ALU的运算的逻辑电路根本没法实现浮点数的运算
    • 指令功能决定了计算机的可编程性
      • 像乘除这种复杂的操作,如果有一条乘指令那么对于编程就很容易了,否则恐怕就需要用移位、加减来实现,此时最好就是作为子程序来实现了
    • 指令包含的操作,直接决定(体现)了ALU的规模与组成
      • 也好比乘除,如果直接用硬件实现了乘除法,也就是ALU中有一个乘法器、除法器,那么指令也就可以有一条指令来实现乘除运算;如果想用一条指令实现乘除法,那么ALU中也应当设有用来进行乘除运算的乘法器、除法器
指令的基本格式与功能
  • 指令的格式通常为“指令操作码”(Operation Code)加“指令操作数”(Operand)

指令的一般格式

  • 指令操作码是一个二进制的码点,不同的二进制也就是不同的01串就代表着不同的指令,对应着不同的功能。

    • 所以01串的操作码又叫“机器码”,因为只有机器才能直接识别二进制,而我们虽然设计了“机器码”,但01串本身并不包含指令的意思,对于我们来讲还只是一串01而已,尽管我们可以通过对应关系来找到某串01的操作码是何种功能
    • 而汇编语言这种指令对人来说更好理解,因为已经是英文字母了,而且通常是某个单词的简写,但机器是无法直接识别字母的。所以汇编语言还需要进一步被翻译成机器码
  • 操作数就是这条指令所需要处理的数据,可以没有,也可以多个,这要看指令集是如何设计的

    • 指令的格式主要涉及到
    • 操作码的长度
    • 地址制和寻址方式
    • 指令的长度
  • 操作码的长度
    • 定长:简化译码的实现,但指令的数量受限较大
    • 不定长:常用指令设计得比较短,不常用的设计的长,一般采用扩展操作码的方式来实现,比如
      • 最短操作码为4位,则对只对0000至1110设置为指令
      • 1111则表示,当前操作码不止前4位,若再扩展4位,则有更长一级的操作码分别是1111 0000 到 1111 1111
      • 以此类推
  • 地址制
    • 即一条指令中要处理多少个操作数
      • 对于不定长操作码,操作码越短,可处理的操作数越多,或者容纳单个操作数的位数越多(当作为地址也就意味着寻址范围越大)
  • 寻址方式
    • 同一条指令比如mov,机器要如何判断所给的操作数是代表地址还是立即数还是寄存器呢?
    • 一般书写的时候都有格式的规定,比如立即数就是数值,地址就要放在”[]”中
    • 编译的时候根据操作数的寻址方式的不同,
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值