8.2-指令周期(学习笔记)

【README】

本文总结自bilibili《计算机组成原理(哈工大刘宏伟)》的视频讲解,非常棒,墙裂推荐;


【1】指令周期

【1.1】指令周期概述

1)指令周期:取出并执行一条指令所需的全部时间;

2)控制单元要完成指令解释的全部过程,包括

  • 1)    取指令;从内存读取指令,放入IR指令寄存器中; (取指周期)
  • 2)    分析指令;需要对指令的操作码和寻址方式进行分析,如分析该指令是系统指令集中的哪个指令;(取指周期)
  • 3)    执行指令;(执行周期)
  • 4)    写回结果;

3)小结:完成一条指令分为2个阶段:

  • 取指周期;
  • 执行周期;

【1.2】指令周期分类

指令周期分3种:

  • 第1种:只有取指周期,没有执行周期;
  • 第2种:有取指周期,执行周期,且2个周期耗时相同;
  • 第3种:只有1个取值周期,但有多个执行周期;

指令 ADD mem:是把mem内存地址的操作取出,并与ACC寄存器相加,结果存入ACC;
取指周期:取指令,分析指令(第1次访存取指令);
执行周期:执行指令,写回结果;(第2次访存取操作数)
注意:指令耗时主要在访存

3 具有间接寻址的指令周期 :
取指周期:1次访存,取指令;
间址周期:1次访存,取操作数地址;
执行周期:1次访存,取操作数;

4 具有中断周期的执行周期 (4个阶段):
1)    取值周期:;
2)    间址周期:;
3)    执行周期:;
4)    中断周期:有中断请求的话,需要响应中断;响应中断过程:保存断点,形成中断服务程序的入口地址,硬件关中断;


【1.3】 cpu工作周期标志

为了对控制器进行设计,我们必须知道当前处于指令周期的哪个阶段? 以便于控制器发出相应的控制操作,把数据或指令或地址传送到指定位置;
解决方法: 采用D触发器对取值周期,间址周期,执行周期,中断周期进行标识,以确认当前指令执行阶段是什么?


【2】指令周期数据流

主要对各指令周期不同阶段的步骤进行详细分析;每个指令周期的多个步骤形成数据流;

【2.1】取指周期数据流

取指周期数据流的步骤

步骤

描述

1

PC把下一条执行指令的地址送入MAR;

2

MAR把地址送到地址总线,再由地址总线送到存储器;

3

CU把读控制信号送到控制总线上;再由控制总线送到存储器;

4

存储器执行读操作,把相应的数据送到数据总线;通过数据总线送到MDR;

(这个时候,指令已经被取出到cpu了,并保持到MDR寄存器中)

5

MDR把指令送到IR中;

6

CU把PC加1(得到下一条指令的地址);为下一条指令的取指操作做准备;


【2.2】间址周期数据流

间址周期数据流的步骤

步骤

描述

1

MDR把指令中的形式地址送到MAR;

2

MAR把地址送到地址总线,再通过地址总线送给存储器;

3

CU发出读操作到控制总线;控制总线再送入存储器中;

4

存储器完成读操作后,把数据送到数据总线;再由数据总线送到MDR;

(MDR就保存了指令用到的操作数所在的内存地址,需要第二次访存才可以取出操作数


【2.3】执行周期数据流和中断周期数据流

1) 中断周期大致做了3件事情;

  1. 保存断点;
  2. 形成中断服务程序的入口地址;
  3. 硬件关中断;

2)中断周期数据流的步骤:

步骤

描述

分类

1

CU把程序断点保存的内存地址送到MAR;

保存断点

2

MAR把地址传给地址总线,再由地址总线送给存储器;

3

CU向存储器发出写命令到控制信号;由控制总线送到存储器;

4

PC把程序断点(即下一条指令的地址)送到MDR;

5

由MDR把程序断点送到数据总线;再由数据总线送到存储器进行写入;

6

CU把中断服务程序的入口地址写入PC

下一跳指令就执行中断服务程序了(因为PC保存了下一跳执行指令的地址)

形成中断服务程序的入口地址

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/329658.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入理解多线程(三)—— Java的对象头

转载自 深入理解多线程(三)—— Java的对象头上一篇文章中我们从HotSpot的源码入手,介绍了Java的对象模型。这一篇文章在上一篇文章的基础上再来介绍一下Java的对象头。主要介绍一下对象头的作用,结构以及他和锁的关系。 Java对象…

python tkinter 背景色改变不了_python - Tkinter背景颜色问题 - 堆栈内存溢出

我有一个脚本,其中包含Tkinter模块,我想每隔3分钟更改一次背景颜色,例如绿色3分钟,然后橙色,然后红色。 我有显示绿色的代码,但无法更改它。当我在代码中创建函数时,会遇到一些不同的错误&#…

回顾微软近年来对于Linux和开源的策略

2014年十月,在旧金山举办的一场活动中,微软的CEO Satya Nadella向公众表示,微软“爱Linux”。作为昔日的竞争对手,微软对Linux的态度逐渐从敌对转变为合作。自那次发言以来,微软在开源方面频频重拳出击,似乎…

深入理解多线程(四)—— Moniter的实现原理

转载自 深入理解多线程(四)—— Moniter的实现原理本文是《深入理解多线程系列文章》的第四篇。点击查看原文,阅读该系列所有文章。 在深入理解多线程(一)——Synchronized的实现原理中介绍过关于Synchronize的实现原理…

(转)Spring Boot通过ImportBeanDefinitionRegistrar动态注入Bean

转自: Spring Boot通过ImportBeanDefinitionRegistrar动态注入Bean - 掘金在阅读SpringBoot源码时,看到SpringBoot中大量使用ImportBeanDefinitionRegistrar来实现Bean的动态注入。它是Spring中一个强大的扩展接口。本篇文章来https://juejin.cn/post/6…

通过图书编号查询python_Python图书接口调用代码实例

1.[代码][Python]代码#!/usr/bin/python# -*- coding: utf-8 -*-import json, urllibfrom urllib import urlencode#----------------------------------# 图书电商数据调用示例代码 - 聚合数据# 在线接口文档:http://www.juhe.cn/docs/50#-------------…

深入理解多线程(五)—— Java虚拟机的锁优化技术

转载自 深入理解多线程(五)—— Java虚拟机的锁优化技术本文是《深入理解多线程》的第五篇文章,前面几篇文章中我们从synchronized的实现原理开始,一直介绍到了Monitor的实现原理。这一篇在前几篇的基础上,深入介绍一下…

Visual Studio Code 1.0正式发布

Visual Studio Code 是一个运行于 OS X,Windows 和 Linux 之上的,针对于编写现代 web 和云应用的跨平台编辑器。 这标志着 Microsoft 第一次向开发者们提供了一款真正的跨平台编辑器。虽然完整版的 Visual Studio 仍然是只能运行在 Windows 之上&#xf…

springboot使用ImportBeanDefinitionRegistrar 动态注册bean

【README】 1.采用 ImportBeanDefinitionRegistrar 动态注册bean,应用场景有: 如 一个后端服务需要用到多个 rabbitmq集群客户端,kafka客户端;这时就需要手动注册多个同类型的bean,但不同beanName,并用 …

python 线性回归函数_Python实现的简单线性回归算法实例分析

本文实例讲述了Python实现的简单线性回归算法。分享给大家供大家参考,具体如下:用python实现R的线性模型(lm)中一元线性回归的简单方法,使用R的women示例数据,R的运行结果:> summary(fit)Call:lm(formula weight ~…

UWP应用模型概述

Andrew Clinick是微软的一名项目经理,在Build 2016大会上,他概括地讲述了通用Windows平台(UWP)应用模型的新特性。今年的其中一个亮点是,代号为Centennial的项目实现了桌面应用程序到UWP应用的转换。 Andrew一开始就阐…

8.3-指令流水(学习笔记)

【README】 本文总结自bilibili《计算机组成原理(哈工大刘宏伟)》的视频讲解,非常棒,墙裂推荐; 【1】如何提高机器速度 1 提高访存速度多体并行:对多个存储体进行交叉访问,在一个主存周期中&am…

Java虚拟机是如何执行线程同步的

转载自 [译]Java虚拟机是如何执行线程同步的想介绍下synchronized的原理,但是又不知道从何下手,在网上看到一篇老外的文章,介绍了和线程同步相关的几个基础知识点。所以想把它翻译一下给大家看看。相信看过这些基础知识之后再看我后面要写的s…

python开方运算符_Pytorch Tensor基本数学运算详解

1. 加法运算示例代码:import torch# 这两个Tensor加减乘除会对b自动进行Broadcastinga torch.rand(3, 4)b torch.rand(4)c1 a bc2 torch.add(a, b)print(c1.shape, c2.shape)print(torch.all(torch.eq(c1, c2)))输出结果:torch.Size([3, 4]) torch.…

重新审视演进式设计

演进式设计是一种理念,它曾经颠覆过传统笨拙的计划式设计,如今,它依旧焕发着生命力,但我们不能以静止的眼光去看待它,而应该尝试着引入一些新的方法、框架乃至技术。 ♦ ♦ 说起来,所谓Evolutionary Design…

9.1-微操作命令的分析(学习笔记)

【README】 本文总结自bilibili《计算机组成原理(哈工大刘宏伟)》的视频讲解,非常棒,墙裂推荐; 1)完成一条指令需要4个周期: 取值周期;间址周期(或有)&…

小知识 | Java中的“魔数”

转载自 小知识 | Java中的“魔数”在编程过程中,我们可能经常听到“魔数”这个词,那么这个词到底指的是什么呢?什么数叫做魔数呢?一、标识文件类型的“魔数”大多数情况下,我们都是通过扩展名来识别一个文件的类型的&a…

python setup.py 指定文件到指定路径_linux下python安装到指定目录

由于使用公司服务器时没有root权限,只能把python安装到个人文件夹下,使用源码包方式安装,这里记录一下。1.python下载cd到目录/users/w,在此目录下安装python。通过wget命令下载python源码包:2.解压python到当前目录$ …

9.2-控制单元CU的功能(学习笔记)

【README】 本文总结自bilibili《计算机组成原理(哈工大刘宏伟)》的视频讲解,非常棒,墙裂推荐; 【1】CU功能(CPU内部不采用总线方式) 控制单元的功能: CU发出各种控制命令或微指令…

WEB API 系列(二) Filter的使用以及执行顺序

在WEB Api中,引入了面向切面编程(AOP)的思想,在某些特定的位置可以插入特定的Filter进行过程拦截处理。引入了这一机制可以更好地践行DRY(Don’t Repeat Yourself)思想,通过Filter能统一地对一些通用逻辑进行处理&…