• 计算机组成原理——中央处理器-指令执行过程(课程笔记)


    说明

    1. 博客作为笔记备份,不定时更新
    2. 参考内容为《计算机组成原理(第3版)》唐朔飞 高等教育出版社;王道考研《计算机组成原理考研复习指导2023》
    3. 文中的例题摘自王道考研《计算机组成原理考研复习指导2023》,大多是我个人认为较为典型的题目以及错题的部分整理

    指令执行过程

    1. 指令周期

    • 指令周期

      • CPU从主存中取出并执行一条指令的时间称为指令周期
      • 不同指令的指令周期可能不同
      • 指令周期通常由若干机器周期组成,一个机器周期又包含若干时钟周期
      • 每个指令周期内的机器周期数可以不等,每个机器周期内的节拍数也可以不等
    • 时钟周期

      • 也称为振荡周期、节拍或T周期,为时钟脉冲的倒数
    • 机器周期

      • 在计算机中,为了便于管理,通常把一条指令的执行过程划分为若干阶段,每个阶段完成一项工作。例如取指、存储器读、存储器写等,这一项工作称为一个基本操作。完成一个基本操作所需时间称为机器周期(来源网络)
      • 机器周期可视为所有指令执行过程中的一个基准时间
      • 访问一次存储器的时间是固定的,因此通常以存取周期作为基准时间,即内存中读取一个指令字的最短时间作为机器周期。(当存储字长等于机器字长时,取指周期也可视为机器周期)
    • 三者关系
      ![[Pasted image 20220626153007.png]]

    • 中断周期

      • 当CPU采用中断方式实现主机和I/O设备的信息交换时,CPU在每条指令执行结束前,都要发中断查询信号,若有中断请求,则CPU进入中断响应阶段,又称中断周期
    • 一个完整的指令周期应包含取指、间址、执行、中断周期

      • 为了区分不同的工作周期,在CPU内设置了4个标志触发器
      • FE:对应取指周期,“1“状态表示有效
      • IND:对应间址周期,“1“状态表示有效
      • EX:对应执行周期,“1“状态表示有效
      • INT:对应中断周期,“1“状态表示有效

    2. 指令周期的数据流

    2.1 取指周期

    ![[Pasted image 20220626153908.png]]

    • 任务:根据PC中的内容从主存中取出指令代码并存放在IR中
    • 取指周期的数据流向
      1. P C → M A R → 地址总线 → 主存 PC\rightarrow MAR \rightarrow 地址总线 \rightarrow 主存 PCMAR地址总线主存
      2. C U 发出读命令 → 控制总线 → 主存 CU发出读命令\rightarrow 控制总线 \rightarrow 主存 CU发出读命令控制总线主存
      3. 主存(指令) → 数据总线 → M D R → I R (存放指令) 主存(指令)\rightarrow 数据总线\rightarrow MDR\rightarrow IR(存放指令) 主存(指令)数据总线MDRIR(存放指令)
      4. C U 发出控制信号 → P C + 1 CU发出控制信号\rightarrow PC+1 CU发出控制信号PC+1

    2.2 间址周期

    ![[Pasted image 20220626153925.png]]

    • 任务:取操作数的有效地址
    • 一次间址的间址周期的数据流向
      1. A d ( I R ) ( 或 M D R ) → M A R → 地址总线 → 主存 Ad(IR)(或MDR)\rightarrow MAR \rightarrow 地址总线\rightarrow 主存 Ad(IR)(MDR)MAR地址总线主存,Ad(IR)表示取出IR中存放的指令字的地址字段
      2. C U 发出读命令 → 控制总线 → 主存 CU发出读命令\rightarrow 控制总线\rightarrow 主存 CU发出读命令控制总线主存
      3. 主存 → 数据总线 → M D R (存放有效地址 主存\rightarrow 数据总线\rightarrow MDR(存放有效地址 主存数据总线MDR(存放有效地址

    2.3 执行周期

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

    2.4 中断周期

    ![[Pasted image 20220626154018.png]]

    • 任务:处理中断请求
    • 中断周期的数据流向
      1. C U 控制将 S P 减一 , S P → M A R → 地址总线 → 主存 CU控制将SP减一,SP\rightarrow MAR\rightarrow 地址总线\rightarrow 主存 CU控制将SP减一,SPMAR地址总线主存,(减一是因为计算机的堆栈中都是向低地址增加)
      2. C U 发出写命令 → 控制总线 → 主存 CU发出写命令\rightarrow 控制总线\rightarrow 主存 CU发出写命令控制总线主存
      3. P C → M D R → 数据总线 → 主存(程序断点存入主存) PC\rightarrow MDR \rightarrow 数据总线 \rightarrow 主存(程序断点存入主存) PCMDR数据总线主存(程序断点存入主存)
      4. C U (中断服务程序的入口地址) → P C CU(中断服务程序的入口地址)\rightarrow PC CU(中断服务程序的入口地址)PC

    3. 指令执行方案

    3.1 单指令周期

    • 单指令周期方案是对所有指令都选用相同的执行时间来完成
    • 每条指令都在固定的时钟周期内完成,指令间串行执行,即下一条指令只能在前一条指令执行结束后才能启动
    • 指令周期取决于执行时间最长的指令的执行时间

    3.2 多指令周期

    • 多指令周期方案对不同类型的指令选用不同的执行步骤
    • 指令之间串行执行
    • 可选用不同个数的时钟周期来完成不同指令的指令过程,指令需要几个周期就为其分配几个周期,不要求所有指令占用相同的执行时间

    3.3 流水线

    • 指令之间并行执行

    4. 例题

    1. P 209 12 P_{209}12 P20912)以下关于间址周期的描述中,正确的是()
      A. 所有指令的间址操作都是相同的
      B. 凡是存储器间接寻址的指令,它们的操作都是相同的
      C. 对于存储器间接寻址和寄存器间接寻址,它们的操作是不同的
      D. 都不对
      解答:指令的间址分为一次间址、两次间址和多次间址,因此它们的操作是不同的。存储器间址是通过形式地址访存,寄存器间址通过寄存器内容访存,因此操作不同,选C
      错误原因:错选A
    2. P 209 14 P_{209}14 P20914)以下叙述中,错误的是()
      A. 取指操作是控制器固有的功能,不需要在操作码控制下完成
      B. 所有指令的取指操作都是相同的
      C. 在指令长度相等的情况下,所有指令的取指操作是相同的
      D. 中断周期是在指令执行完成后出现的
      解答:不同长度的指令,其取指操作可能是不同的。例如,双字指令、三字指令和单字指令的取指操作是不同的。选B
      错误原因:错选C
    3. P 210 16 P_{210}16 P21016)下列说法中,正确的是()
      I. 指令字长等于机器字长的前提下,取指周期等于机器周期
      II. 指令字长等于存储字长的前提下,取指周期等于机器周期
      III. 指令字长和机器字长的长度没有任何关系
      IV. 为了硬件设计方便,指令字长都和存储字长一样大
      A. II、III B. II、III、IV C. I、III、IV D. I、IV
      解答:(1)指令字长一般取存储字长的整数倍。若指令字长等于存储字长的两倍,则需两次访存,取指周期等于机器周期的两倍;若指令字长等于存储字长,则取指周期等于机器周期。(2)指令字长与操作码的长度、操作数地址长度、操作数地址的个数有关,与机器字长没有必然的联系。为了设计方便,指令字长一般取字节或存储字长的整数倍,但不一定和存储字长一样大。选A
      错误原因:错选D

    更新文档

    更新日期更新内容
    2022/7/20增加例题
  • 相关阅读:
    html将复选框变为圆形样例
    聊聊并发编程——多线程之AQS
    NFT的价值 怎么玩NFT NFT定制开发
    Easypoi map方式导入数据 ,List<Map<String, String>> 日期项数据为空(null)解决办法
    HTML5-原生History
    闭关之现代 C++ 笔记汇总(一):Modules
    JavaScript-数组、函数
    深入多线程锁
    力扣(LeetCode)2095. 删除链表的中间节点(C++)
    第六十一章 CSP的常见问题 - 我希望我的页面每60秒自动刷新一次。我应该怎么做
  • 原文地址:https://blog.csdn.net/qq_45800517/article/details/126090346