3.2 指令的执行过程


指令的执行过程

  • 指令周期:一条指令的执行分为不同的阶段
  • 数据流:不同阶段要求依次访问的数据序列
  • 指令执行方案:如何安排多条指令的执行?

指令周期

  • 指令周期:CPU从主存中每取出并执行一条指令所需的全部时间

  • 一个指令周期包含若干机器周期,一个机器周期就是用来完成某个子工作,机器周期又叫CPU周期。

    • 个机器周期又包含若干时钟周期(CPU操作的最基本单位:也称为节拍、T周期或CPU时钟周期)
    • 例如某CPU主频:3.0GHz —— 每秒钟发送3G的节拍
  • 每个指令周期内机器周期数可以不等

  • 每个机器周期内的节拍数也可以不等

指令周期流程

如何确定当前是在哪个阶段?——设置触发器

  • 设置四个触发器:哪个地方置为1,就代表在哪个阶段了
  • 四个工作周期都有CPU访存操作,只是访存的目的不同。
    • 取指周期是为了取指令
    • 间址周期是为了取有效地址
    • 执行周期是为了取操作数
    • 中断周期是为了保存程序断点。

举例各种指令 说明指令周期的区别

  • 指令NOP:什么都不做、发呆,所以取出来,分析成功,就发呆。
  • 加法指令ADD:比空指令多出一段执行周期
  • 乘法指令MUL:就是多次加法和移位,所以比加法耗时更久
  • 具有间接寻址的指令:多出一个间接寻址的周期
  • 带有中断周期的指令:最后留一段进行中断检查

数据流

1、取指周期

  • 1、当前指令地址送至存储器地址寄存器
    • 记:(PC)→ MAR
  • 2、CU 发出控制信号经控制总线传到主存,这里是读信号
    • 记:1→R
      • 对R给高电平1,表示进行读
      • 对W给高电平1,表示进行写
  • 3、把主存中MAR所指向的数据放到MDR中。
    • 记:M(MAR) → MDR
  • 4、将MDR中的内容(此时是指令)送入IR
    • 记:(MDR) → IR
  • 5、CU发出控制信号,形成下一条指令地址
    • 记:(PC) + "1" → PC

2、间址周期(有的指令有)

  • Ad是address,表示取IR的地址码

  • 指令的地址码送入MAR

    • 记: Ad(IR) → MAR【指令现存于IR】
    • 或记:Ad(MDR) → MAR 【此时MDR中也存储了当前的指令信息,因为是从MDR复制给IR】
  • CU发出控制信号,启动主存做读操作,记做:1 → R

  • MAR所指主存中的内容经数据总线送入MDR

    • 记:M(MAR) → MDR
  • 有的可能:将有效地址送至指令的地址码字段

    • 记:(MDR) → Ad(IR)【因为有的地方把EA拼接到IR中了】

3、执行周期

  • 执行周期的任务是根据IR中的指令字的操作码和操作数通过ALU操作产生执行结果
  • 不同指令的执行周期操作不同,因此没有统一的数据流向

4、中断周期

  • 中断:暂停当前在务去完成其他任务。

    • 为了完成其他任务后能够恢复当前任务,需要保存断点,一般使用堆栈来保存断点。
  • 堆栈保存断点

    • 每个进程在主存中都有一个堆栈
    • 这里用SP指向栈顶元素进栈操作是先修改指针后存入数据。
    • 在实际使用中,栈顶是低地址位,栈底是高地址位。

  • 1、把PC的值压入栈。进栈:CU控制,SP往顶端挪,将SP减1,修改后的地址送入MAR,指明要存入的地址放在SP-1的位置

    • 记做:(SP)-1 → SP,(SP) → MAR
    • 本质上是将断点存入某个存储单元,这里就是把SP指向SP-1(高一位)并且把最后的(SP)-1存入了MAR
  • 2、CU发出控制信号,启动主存做写操作

    • 记做:1 → w

    • 已经保存断点了,这里要让PC指向另一个程序的存放地址。

  • 3、将断点(PC内容)送入MDR

    • 记做(PC) → MDR
  • 4、CU控制将中断服务程序的入口地址(由向量地址形成部件产生)送入PC,

    • 记:向量地址 → PC

指令执行方案

一个指令周期:通常要包括几个时间段(执行步骤),每个步骤完成指令的一部分功能,几个依次执行的步骤完成这条指令的全部功能。

方案1. 单指令周期

对所有指令都选用相同的执行时间来完成。

  • 指令之间串行执行
  • 控制电路的执行设计方便
  • 必然长短不一,指令周期取决于执行时间最长的指令的执行时间,只要设计一样的节拍数量就可以了,但必然有浪费
  • 对于那些本来可以在更短时间内完成的指令,要使用这个较长的周期来完成,会降低整个系统的运行速度

方案2.多指令周期

对不同类型的指令选用不同的执行步骤来完成。

  • 指令之间串行执行
  • 可选用不同个数的时钟周期来完成不同指令的执行过程。
  • 一条条执行
  • 需要更复杂的硬件设计。

方案3.流水线方案

在每一个时钟周期启动一条指令,尽量让多条指令同时运行,但各自处在不同的执行步骤中。

  • 指令之间并行执行
  • 利用效率高
  • 原因在于:每个阶段用的硬件不同、资源不同,最终就可以相互协调,让利用效率达到最高。
    • 比如取指令阶段用PC、IR、MAR,分析阶段用UC
    • 即第一个到分析阶段、第二个就开始进行取指令


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM