当前位置: 首页 > 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,相当于编程过程中给指针赋值,把旧的地址值移出去才能赋新的地址值

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

相关文章:

  • Java静态变量笔记
  • 并发笔记-并发问题与事件驱动模型(五)
  • Spring Bean有哪几种配置方式?
  • Nacos源码—8.Nacos升级gRPC分析五
  • neptune系统详解
  • mysql dump 导入导出用法
  • js 画立方体软件开发日记2
  • MySQL——性能调优
  • 面试题:C++虚函数可以是内联函数吗?
  • 嵌入式学习笔记 - MSB, LSB
  • 策 略 模 式
  • 马铃薯土豆幼苗与杂草检测数据集VOC+YOLO格式3051张2类别
  • cursor 如何在项目内自动创建规则
  • CSDN博客粘贴图片失败如何解决
  • 网络编程epoll和udp
  • 联想 SR550 服务器,配置 RAID 5教程!
  • CSRF记录
  • Megatron系列——张量并行
  • Clang实现C++文件分析,含Python实战
  • 嵌入式系统:从基础到应用的全面解析
  • 世界期待中美对话合作带来更多确定性和稳定性
  • 从采购到销售!市场监管总局指导行业协会防控肉品风险
  • 俄总统新闻秘书:普京提议谈判表明俄寻求和平解决方案意愿
  • 第三届“老山国际春茶节”活动在云南麻栗坡举办
  • 2025年4月份CPI环比由降转涨,核心CPI涨幅稳定
  • 道指跌逾100点,特斯拉涨近5%