计算机组成原理19——控制单元的功能和实现1

本系列文章是学习了网课《哈尔滨工业大学–计算机组成原理》之后,用以梳理思路而整理的听课笔记及相关思维拓展。本文涉及到的观点均为个人观点,如有不同意见,欢迎在评论区讨论。

目录

  • 四种周期下的微操作命令
    • 取指周期
    • 间址周期
    • 执行周期
      • 非访存指令
      • 访存指令
      • 转移类指令
    • 中断周期

四种周期下的微操作命令

程序在输入至计算机之后,解析成各种指令,这些指令还不能直接被计算机执行,需要输入至控制单元。控制单元将进一步分析这些指令,将其转化为可以操作计算机的微指令序列,从而控制计算机执行程序。

下面以指令周期中的四个阶段进一步分析其对应的微操作指令。

取指周期

假设CPU内有四个寄存器:
MAR与地址总线相连,存放欲访问的存储单元地址;
MDR与数据总线相连,存放欲写入存储器的信息或最近从存储器读出的信息;
PC存放现行指令的地址,有计数功能;
IR存放现行指令。

取指令的操作可以归纳为以下几个操作:
1、PC ->MAR,现行指令地址送到存储器地址寄存器;
2、向主存发送读命令,启动主存做读操作,记作1->R;
3、将MAR所指的主存单元中的内容经数据总线读至MDR内,记作M(MAR)->MDR;
4、将MDR的内容送至IR,记作MDR->IR;
5、指令的操作码送至CU译码,记作OP(IR)->CU;
6、形成下一条指令的地址,记作(PC)+1->PC。

在这里插入图片描述

间址周期

具体操作如下:
1、将指令的地址码(形式码)部分送至存储器地址寄存器,记作Ad(IR)->MAR;
2、向主存发送读命令,启动主存做读操作,记作1->R;
3、将MAR所指的主存单元中的内容经数据总线读至MDR内,记作M(MAR)->MDR;
4、将有效地址送至指令寄存器的地址字段,记作MDR->Ad(IR)。

执行周期

不同的指令执行周期不同,下面分别讨论非访存指令、访存指令和转移类指令的微操作。、

非访存指令

这类指令在执行周期内不访问内存。

1、清除累加器指令CLA,清除累加器,0->ACC
2、累加器取反指令COM,累加器取反, A C C ‾ − > A C C \overline{ACC} -> ACC ACC>ACC
3、算术右移一位指令SHR,累加器算术右移一位,L(ACC)->R(ACC)
4、循环左移一位指令CSL,累加器循环左移一位,R(ACC)->L(ACC)
5、停机指令STP,计算机中有运行标志触发器G。当G=1时,表示机器运行;当G=0时,表示机器停机。STP指令将G置为0。

访存指令

这类指令在执行阶段都需要访问存储器。

1、加法指令ADD X,需要完成累加器内容与对应于主存X地址单元的内容相加,送至累加器。
①将指令的地址码送至存储器地址寄存器,Ad(IR)-> MAR
②向主存发送读命令,启动主存做读操作,记作1 -> R
③将MAR所指的主存单元中的内容经数据总线读至MDR中,记作M(MAR)-> MDR
④给ALU发送加命令,将ACC的内容和MDR的内容相加,结果存于ACC,记作(ACC)+ (MDR)-> ACC

2、存数指令STA X,将指令在执行阶段,将ACC的内容存于主存的X地址单元中。
①将指令的地址码部分送至存储器地址寄存器,记作Ad(IR)-> MAR
②向主存发送写命令,启动主存做写操作,记作1 -> W
③将累加器内容送至MDR,记作ACC -> MDR
④将MDR的内容写入MAR所指的主存单元中,记作MDR -> M(MAR)

3、取数指令LDA X,该指令在执行阶段将主存X地址单元的内容取至ACC中。
①将指令的地址码部分送至存储器地址寄存器,记作Ad(IR) -> MAR
②向主存发读命令,启动主存作读操作,记作1 -> R
③将MAR所指的主存单元中的内容经数据总线读至MDR内,记作M(MAR) -> MDR
④将MDR的内容送至ACC,记作MDR -> ACC

转移类指令

这类指令在执行阶段不访问存储器。

1、无条件转移指令JMP X
将指令的地址码部分送至PC,记作Ad(IR) -> PC

2、条件转移指令BAN X
该指令根据上一条指令运行的结果决定下一条指令的地址。若结果为负,则指令的地址码送至PC;若指令不为负,则源程序按照顺序执行。

在这里插入图片描述

中断周期

在执行周期结束时刻,CPU需要查询是否有请求中断的事件发生,如果有则进入中断周期。
假设程序断点存至主存的0地址单元,且采用硬件向量法寻找入口地址,则在中断周期需完成以下操作:

  ①将特定地址0送至存储器地址寄存器,记作0->MAR②向主存发写命令,启动存储器作写操作,记作1->W③将PC的内容送至MDR,记作PC->MDR④将MDR的内容通过数据总线写入MAR所指的主存单元中,记作MDR->M(MAR)⑤将向量地址形成部件的输出送至PC,记作向量地址->PC,为下一条指令的取指周期做准备⑥关中断,将允许中断触发器清零,记作0->EINT。如果程序断点不存入内存,而是存入堆栈,只需将①改为(SP)-1 -> SP,且SP -> MAR。

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

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

相关文章

大众汽车宣布将ChatGPT,批量集成在多种汽车中!

1月9日,大众汽车在官网宣布,将ChatGPT批量集成到电动、内燃机汽车中。 大众表示,将ChatGPT与其IDA语音助手相结合,用户通过自然语言就能与ChatGPT进行互动,例如,帮我看看最近的三星米其林饭店在哪里&#…

dubbo与seata集成

1.seata是什么? Seata 是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。 2.seata的注解 GlobalTransactional:全局事务注解,添加了以后可实现分布式事务的回滚和提交,用法与spring…

linux 内存管理

地址类型 一个虚拟内存系统, 意味着用户程序见到的地址不直接对应于硬件使用 的物理地址. 虚拟内存引入了一个间接层, 它允许了许多好事情. 有了虚拟内存, 系统重 运行的程序可以分配远多于物理上可用的内存; 确实, 即便一个单个进程可拥有一个虚拟 地址空间大于系统的物理内存…

Docker 镜像以及镜像分层

Docker 镜像以及镜像分层 1 什么是镜像2 Docker镜像加载原理2.1 UnionFs:联合文件系统2.2 Docker镜像加载原理2.3 Docker镜像的特点 3 镜像的分层结构4 可写的容器层 1 什么是镜像 镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行…

C语言中关于函数递归的理解

递归的概念:如果一个对象部分包含它自己,或者利用自己定义自己,则称这个对象是递归的;如果 一个过程直接或间接调用自己,则称这个过程是一个递归过程。递归的主要思考方式在于:将大事化小 我们先看一个例子 题目:输入一个无符号数&#xff0…

Open CASCADE学习|非线性方程组

非线性方程组是一组包含非线性数学表达式的方程,即方程中含有未知数的非线性项。解这类方程组通常比解线性方程组更为复杂和困难。 非线性方程组在很多领域都有应用,例如物理学、工程学、经济学等。解决非线性方程组的方法有很多种,包括数值…

CCSC,一种CPU架构

core-circuit-separate-computer 核与执行电路的分离,最初是为了省电。 用寄存器实现这种分离。 V寄存器控制着执行电路的供电,V0则不供电,进入省电模式;V1则供电,进入工作模式。 P寄存器是parameter-register&#xf…

Spark与Cassandra的集成与数据存储

Apache Spark和Apache Cassandra是大数据领域中两个重要的工具,用于数据处理和分布式数据存储。本文将深入探讨如何在Spark中集成Cassandra,并演示如何将Spark数据存储到Cassandra中。将提供丰富的示例代码,以帮助大家更好地理解这一集成过程…

【数据结构】二叉树的链式实现

树是数据结构中非常重要的一种,在计算机的各方个面都有他的身影 此篇文章主要介绍二叉树的基本操作 目录 二叉树的定义:二叉树的创建:二叉树的遍历:前序遍历:中序遍历:后序遍历:层序遍历&#…

ULINK2仿真器安装使用之工程设置

一、 ULINK2仿真器 ULINK2是ARM公司最新推出的配套RealView MDK使用的仿真器,是ULink仿真器的升级版本。ULINK2不仅具有ULINK仿真器的所有功能,还增加了串行调试(SWD)支持,返回时钟支持和实时代理等功能。开发工程师通…

vite 搭建vue3 TS项目初始框架

目录 仓库地址: 一.搭建项目 1.安装 Vite: 2.创建 Vue 3 项目: 3.进入项目目录: 4.安装依赖: 5.运行项目: 6.流程实操 二.修改项目结构,显示自定义的页面 1.整理静态样式文件 1.1.在 sr…

OpenGL学习笔记-Blending

混合方程中,Csource是片段着色器输出的颜色向量(the color output of the fragment shader),其权重为Fsource。Cdestination是当前存储在color buffer中的颜色向量(the color vector that is currently stored in the …

如何将Redis、Zookeeper、Nacos配置为Windows系统的一个服务

说明:当我们在Windows上开发时,不可避免的会用到一些中间件,如Redis、Zookeeper、Nacos等等,当在项目中使用到本地的这些服务器时,我们需要把本地的服务器启动,会开启下面这样的一个窗口。 Redis服务器&am…

Git 实战指南:常用指令精要手册(持续更新)

👑专栏内容:Git⛪个人主页:子夜的星的主页💕座右铭:前路未远,步履不停 目录 一、Git 安装过程1、Windows 下安装2、Cent os 下安装3、Ubuntu 下安装 二、配置本地仓库1、 初始化 Git 仓库2、配置 name 和 e…

js(JavaScript)数据结构之数组(Array)

什么是数据结构? 下面是维基百科的解释: 数据结构是计算机存储、组织数据的方式。数据结构意味着接口或封装:一个数据结构可被视为两个函数之间的接口,或者是由数据类型联合组成的存储内容的访问方法封装。 我们每天的编码中都会…

Vue3+TS+Vite 构建自动导入开发环境

关注⬆️⬆️⬆️⬆️ 专栏后期更新更多前端内容 在一个使用 Vue 3、Vite 和 TypeScript 的项目中,配置 unplugin-auto-import 和 unplugin-vue-components 插件可以极大地提高开发效率,因为它们可以自动导入 Vue 相关的 API 和 Vue 组件,从而减少了手动导入的需要。 文章目…

Python——数据类型转换

# 将数字类型转换成字符串 num_str str(111) print(type(num_str), num_str) \# 将浮点类型转换成字符串 float_str str(12.34) print(type(float_str), float_str) # 将字符串转变成数字 num int("234") print(type(num)) # 将字符串转变成浮点型 num2 float(&q…

[论文精读]Brain Network Transformer

论文网址:[2210.06681] Brain Network Transformer (arxiv.org) 论文代码:GitHub - Wayfear/BrainNetworkTransformer: The open-source implementation of the NeurIPS 2022 paper Brain Network Transformer. 英文是纯手打的!论文原文的s…

web端播放rtsp视频流(摄像头监控视频)教程

文章目录 前言一、ffmpeg是什么?二、ffmpeg安装1.下载2.安装 三、node搭建websocket服务四、web客户端播放视频 前言 像海康大华一些摄像头或者直播源 为rtsp视频流,想在web上播放必须进行协议转换。已知一些方案例如rtsp转rtmp需要flash,现…

将dumpbin从Visual Studio中抠出来,并使用dumpbin查看exe和dll库的依赖关系

目录 1、初步说明 2、在开发的机器上使用dumpbin工具查看dll库的依赖关系 3、将dumpbin.exe从Visual Studio中抠出来 3.1、找到dumpbin.exe文件及其依赖的dll文件 3.2、在cmd中运行dumpbin,提示找不到link.exe文件 3.3、再次运行dumpbin.exe提示找不到mspdb10…