当前位置: 首页 > news >正文

计算机组成原理———CPU指令周期精讲

第一部分:指令周期的基本概念🍕🍕🍕

定义:取出并执行一条指令或解释一条指令所需要的全部时间
分类:可以分为取指周期和执行周期

在这里插入图片描述
在这里插入图片描述

第二部分:指令的具体分类🍕🍕🍕

具体到每条指令,指令周期也各不相同,具体可以分为如下几种

第一种:有些指令只包含取指周期不包含执行周期💙💙💙
在这里插入图片描述
NOP就属于这种指令,NOP指令表示执行空操作

第二种:取值周期和执行周期时间基本相等💙💙💙
在这里插入图片描述

ADD mem这条指令从内存单元mem中取出数据和acc中的数据进行加法运算,结果保存在acc中,取指周期取指令需要访问一次内存,把指令从内存单元中取出送到CPU,执行周期取数据需要访问一次内存,取出操作数送到CPU当中并执行加法操作,取指周期和执行周期时间基本一致,因为主要时间集中在访存上

第三种:执行周期远大于取指周期💙💙💙

在这里插入图片描述比如乘法操作的时钟周期比较复杂,相应的执行周期就比较长

第四种:具有间接寻址的指令💙💙💙
在这里插入图片描述
间接寻址的指令周期通常比较长,因为需要两次访存,第一次取出操作数地址,第二次取操作数
相当于指针,会多出一个间址周期,即取出操作数的地址

第五种:带有中断周期的指令💙💙💙
在这里插入图片描述
执行周期结束后可能要响应中断,然后进行保护断点,形成中断服务程序的入口地址和硬件关中断三个操作。
需要注意两点:
(1)取指周期取的数据实际上是指令,送到IR当中
(2)间址周期取的是地址,送到IR的地址码部分或者送到MDR的地址码部分,取操作数读出来的数据存到cpu的寄存器当中为后续操作做准备,程序断点保存在内存单元指定位置,标志处于哪个阶段

第三部分:指令周期流程🍕🍕🍕

在这里插入图片描述
这只是一个大致的流程图,并不是实际的数据流图,流程大致可以判断为,取指周期判断是否采用了间接寻址的方式,如果有就进入间址周期,如果没有或者间址周期完成就进入到执行周期,执行周期结束判断有没有中断请求,如果有进入中断周期,中断周期结束或者没有中断请求就进入到下一条指令的取指周期,开始新一轮的循环

第四部分:CPU工作周期的标志🍕🍕🍕

根据访存性质的不同,我们可以把CPU的工作周期分成下面四个周期
在这里插入图片描述
在这里插入图片描述
并采用如上图所示的符号对CPU工作的四个周期进行标识

第五部分:指令周期的数据流🍕🍕🍕

第五部分是本节的重点,我们放到最后来讲

🍔🍔🍔(1)取指周期数据流

在这里插入图片描述
取指阶段用到pc,pc提供下一条要取的指令的内存地址,要访问存储器,存储器的地址就要保存在MAR中,数据保存在MDR中,取指周期取回的是指令保存在IR当中,这些是由CU控制的

数据流从PC开始到MAR,经过地址总线送到存储器,这个时候存储器已经知道了指令地址,读命令由CU控制,CU把信号送到控制总线上,再由控制总线送到存储器,存储器执行读操作把相应的数据送到总线上,通过数据总线再送到MDR,这时候指令已经送到CPU并保存在MDR中,IR专门保存指令,所以指令还要由MDR送入到IR中

下一条指令的地址保存在PC里如果没有跳转的话,下一条指令的地址就是当前PC值+1,由CU控制,CU把P加一之后的PC值保存在PC中,为下一条指令的取指操作做准备

🍔🍔🍔(2)间址周期数据流

在这里插入图片描述

间址周期数据流,间址周期说明当前要执行的指令采用的是间接寻址的方式,指令所需要的操作数的地址保存在指令的地址码部分,起始操作可以从MDR或者IR开始,把地址码部分送给MAR进行内存单元的访问,MAR把地址送到地址总线通过地址总线送给存储器,CU把信号送到控制总线,再由控制总线送到存储器,存储器执行读操作把数据送到数据总线,这个数据实际上是操作数所在内存单元的地址,这个地址送到MDR中,这个时候MDR就真正保存了操作数所在内存单元的地址

🍔🍔🍔(3)执行周期数据流

不同指令的执行周期数据流不相同,我们不做统一分析

🍔🍔🍔(4)中断周期数据流

在这里插入图片描述
把程序断点保存在某一个地址单元当中,由CU决定把程序断点保存在内存单元的哪个地址,CU给出地址放到MAR当中,传送给地址总线再传送给存储器,CU发出,信号送到控制总线再送给存储器,中断之后要执行的下一条命令保存在PC中,所以保存断点就是保存当前PC的值,pc的值送到MDR中,经过数据总线保存到存储器的存储导员中,这是第一步保存断点

下一步是形成中断服务程序的入口地址是由CU给出的,CU直接把这个地址值写入到PC当中,中断后就直接从PC开始执行,因为PC中给出了下一条指令的地址

注意:PC是CPU的一个寄存器,保存下一条指令的存储地址,所以我们保存断点要保存当前PC的值,然后再由CU把下一条指令的地址值送给PC,相当于编程过程中给指针赋值,把旧的地址值移出去才能赋新的地址值

以上就是本节的全部内容,读者注意理解

http://www.xdnf.cn/news/413713.html

相关文章:

  • 高防云的主要优势表现在哪些方面?
  • 学习黑客5 分钟深入浅出理解Alternate Data Streams (ADS)
  • 国产大模型「五强争霸」:决战AGI,谁主沉浮?
  • Fiber
  • SQL数据库核心实用技巧总结
  • SaaS备份的必要性:厂商之外的数据保护策略
  • Ethereum Pectra 的升级
  • 在文档里如何引用在线SVG甘特图
  • 普通IT的股票交易成长史--20250512复盘
  • [计算机网络]网络层
  • 安装hadoop
  • MySQL 事务(一)
  • 01 安装CANoe
  • 运算放大器相关的电路
  • 【Python爬虫】01-Python爬虫概述
  • js相关内容
  • 实数完备性定理互证1
  • 在选择合适的实验室铁地板和铸铁试验平板,帮分析​
  • ApiPost工具详细介绍及使用教程
  • Java中String字符串
  • 【蓝桥杯嵌入式】【模块】二、LED相关配置及代码模板
  • 关于输入法重码率的计算
  • web 自动化之 Unittest 应用:测试报告装饰器断言
  • 基于大模型研究技术方案清单
  • 【markdown】介绍如何在markdown中绘制流程图
  • 在嵌入式调试中IAR提示Fatal error: CPU did not power up Session aborted!怎么回事?怎么解决?
  • C++中类中const知识应用详解
  • PyCharm历史版本下载说明
  • Java大师成长计划之第20天:Spring Framework基础
  • Qt/C++面试【速通笔记九】—视图框架机制