计算机组成原理 第八章(控制单元的功能)—第一节(微操作命令的分析)

本文主要是介绍计算机组成原理 第八章(控制单元的功能)—第一节(微操作命令的分析),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 写在前面:

  1. 本系列笔记主要以《计算机组成原理(唐朔飞)》为参考,大部分内容出于此书,笔者的工作主要是挑其重点展示,另外配合下方视频链接的教程展开思路,在笔记中一些比较难懂的地方加以自己的一点点理解(重点基本都会有标注,没有任何标注的难懂文字应该是笔者因为强迫症而加进来的,可选择性地忽略)。
  2. 视频链接:计算机组成原理(哈工大刘宏伟)135讲(全)高清_哔哩哔哩_bilibili

一、微程序

1、控制单元发出微操作命令

        控制单元具有发出各种微操作命令(即控制信号序列的功能

        概括地说,计算机的功能就是执行程序在执行程序的过程中控制单元要发出各种微操作命令而且不同的指令对应不同的命令。进一步分析发现,完成不同指令的过程中,有些操作是相同或相似的,如取指令、取操作数地址(当间接寻址时)以及进入中断周期由中断隐指令完成的一系列操作。

2、指令与程序、微指令与微程序

(1)程序由指令序列组成,微程序由微指令序列组成,每一种指令对应一个微程序

(2)指令是对程序执行步骤的描述,微指令是对指令执行步骤的描述,换句话说,指令是对微指令功能的封装

(3)微指令中可能包含多个微命令,微命令与微操作一一对应

(4)同一个微操作可能在不同指令的不同阶段被使用

(5)控制单元CU发出一个微命令,可完成这个微命令对应的微操作。

二、取指周期

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

        取指令的过程可归纳为以下几个操作:

        ①现行指令地址送至存储器地址寄存器,记作PC→MAR(→地址线)。

        ②向主存发送读命令,启动主存做读操作,记作1→R。

        ③将MAR(通过地址总线)所指的主存单元中的内容(指令)经数据总线读至MDR内,记作M(MAR)→MDR。

        ④将MDR的内容送至IR,记作MDR→IR。

        ⑤指令的操作码送至CU译码,记作OP(IR)→CU。

        ⑥形成下一条指令的地址,记作(PC)+1→PC。

三、间址周期

        间址周期完成取操作数有效地址的任务,具体操作如下:

        ①将指令的地址码部分(形式地址)送至存储器地址寄存器,记作d(IR)→MAR。

        ②向主存发送读命令,启动主存做读操作,记作1→R。

        ③将MAR(通过地址总线)所指的主存单元中的内容(有效地址)经数据总线读至MDR内,记作M(MAR)→MDR。

        ④将有效地址送至指令寄存器的地址字段,记作MDR→Ad(IR)。此操作在有些机器中可省略。

四、执行周期

1、非访存指令执行周期的微操作

(1)清除累加器指令CLA:

        该指令在执行阶段只完成清除累加器操作,记作0\rightarrow ACC

(2)累加器取反指令COM:

        该指令在执行阶段只完成累加器内容取反,结果送累加器的操作,记作\overline{ACC}\rightarrow ACC

(3)算术右移一位指令SHR:

        该指令在执行阶段只完成累加器内容算术右移一位的操作,记作L(ACC)\rightarrow R(ACC)ACC_{0}\rightarrow ACC_{0}(ACC的符号位不变)。

(4)循环左移一位指令CSL:

        该指令在执行阶段只完成累加器内容循环左移一位的操作,记作R(ACC)\rightarrow L(ACC)ACC_{0}\rightarrow ACC_{n}(或\rho ^{-1}(ACC))。

(5)停机指令STP:

        计算机中有一个运行标志触发器G,当G=1时表示机器运行,当G=0时表示停机。STP指令在执行阶段只需将运行标志触发器置“0”,记作0\rightarrow G

2、访存指令执行周期的微操作

(1)加法指令ADD X:

        该指令在执行阶段需要完成累加器内容与对应于主存X地址单元的内容相加,结果送累加器的操作,具体如下:

        ①将指令的地址码部分送至存储器地址寄存器,记作Ad(IR)→MAR。

        ②向主存发读命令,启动主存做读操作,记作1→R。

        ③将MAR(通过地址总线)所指的主存单元中的内容(操作数)经数据总线读至MDR内,记作M(MAR)→MDR。

        ④给ALU发送加命令,将ACC的内容和MDR的内容相加,结果存于ACC,记作(ACC)+(MDR)→ACC。

        当然,也有的加法指令指定两个寄存器的内容相加,如“ADD AX,BX”,该指令在执行阶段无须访存,只需完成(AX)+(BX)→AX的操作。

(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。

3、转移类指令执行周期的微操作

(1)无条件转移指令JMP X:

        该指令在执行阶段完成将指令的地址码部分X送至PC的操作,记作Ad(IR)→PC。

(2)条件转移(负则转)指令BAN X:

        该指令根据上一条指令运行的结果决定下一条指令的地址,若结果为负(累加器最高位为1,即A_{0}=1),则指令的地址码送至PC,否则程序按原顺序执行。由于在取指阶段已完成了(PC)+1→PC,所以当累加器结果不为负(即A=0)时,就按取指阶段形成的PC执行,记作A_{0}\cdot Ad(IR)+\overline{A_{0}}\cdot PC\rightarrow PC

五、中断周期

        在执行周期结束时刻,CPU要查询是否有请求中断的事件发生,如果有则进入中断周期。

        在中断周期,由中断隐指令自动完成保护断点、寻找中断服务程序入口地址以及硬件关中断的操作。假设程序断点存至主存的0地址单元,且采用硬件向量法寻找入口地址,则在中断周期需完成如下操作:

        ①将特定地址“0”送至存储器地址寄存器,记作0→MAR。

        ②向主存发写命令,启动存储器作写操作,记作1→W。

        ③将PC的内容(程序断点)送至MDR,记作PC→MDR。

        ④将MDR的内容(程序断点)通过数据总线写入MAR(通过地址总线)所指示的主存单元(0地址单元)中,记作MDR→M(MAR)。

        ⑤将向量地址形成部件的输出送至PC,记作向量地址→PC,为下一条指令的取指周期做准备。

        ⑥关中断,将允许中断触发器清零,记作0→EINT(该操作可直接由硬件线路完成)。

        如果程序断点存入堆栈,而且进栈操作是先修改栈指针,后存入数据,只需将上述的步骤①改为(SP)-1→SP,且SP→MAR。

 六、几类指令的指令周期

这篇关于计算机组成原理 第八章(控制单元的功能)—第一节(微操作命令的分析)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/828224

相关文章

Java字符串操作技巧之语法、示例与应用场景分析

《Java字符串操作技巧之语法、示例与应用场景分析》在Java算法题和日常开发中,字符串处理是必备的核心技能,本文全面梳理Java中字符串的常用操作语法,结合代码示例、应用场景和避坑指南,可快速掌握字... 目录引言1. 基础操作1.1 创建字符串1.2 获取长度1.3 访问字符2. 字符串处理2.1 子字

Spring Boot循环依赖原理、解决方案与最佳实践(全解析)

《SpringBoot循环依赖原理、解决方案与最佳实践(全解析)》循环依赖指两个或多个Bean相互直接或间接引用,形成闭环依赖关系,:本文主要介绍SpringBoot循环依赖原理、解决方案与最... 目录一、循环依赖的本质与危害1.1 什么是循环依赖?1.2 核心危害二、Spring的三级缓存机制2.1 三

C#中async await异步关键字用法和异步的底层原理全解析

《C#中asyncawait异步关键字用法和异步的底层原理全解析》:本文主要介绍C#中asyncawait异步关键字用法和异步的底层原理全解析,本文给大家介绍的非常详细,对大家的学习或工作具有一... 目录C#异步编程一、异步编程基础二、异步方法的工作原理三、代码示例四、编译后的底层实现五、总结C#异步编程

SpringBoot集成Milvus实现数据增删改查功能

《SpringBoot集成Milvus实现数据增删改查功能》milvus支持的语言比较多,支持python,Java,Go,node等开发语言,本文主要介绍如何使用Java语言,采用springboo... 目录1、Milvus基本概念2、添加maven依赖3、配置yml文件4、创建MilvusClient

使用Python开发一个带EPUB转换功能的Markdown编辑器

《使用Python开发一个带EPUB转换功能的Markdown编辑器》Markdown因其简单易用和强大的格式支持,成为了写作者、开发者及内容创作者的首选格式,本文将通过Python开发一个Markd... 目录应用概览代码结构与核心组件1. 初始化与布局 (__init__)2. 工具栏 (setup_t

Linux ls命令操作详解

《Linuxls命令操作详解》通过ls命令,我们可以查看指定目录下的文件和子目录,并结合不同的选项获取详细的文件信息,如权限、大小、修改时间等,:本文主要介绍Linuxls命令详解,需要的朋友可... 目录1. 命令简介2. 命令的基本语法和用法2.1 语法格式2.2 使用示例2.2.1 列出当前目录下的文

Python 迭代器和生成器概念及场景分析

《Python迭代器和生成器概念及场景分析》yield是Python中实现惰性计算和协程的核心工具,结合send()、throw()、close()等方法,能够构建高效、灵活的数据流和控制流模型,这... 目录迭代器的介绍自定义迭代器省略的迭代器生产器的介绍yield的普通用法yield的高级用法yidle

Go 语言中的select语句详解及工作原理

《Go语言中的select语句详解及工作原理》在Go语言中,select语句是用于处理多个通道(channel)操作的一种控制结构,它类似于switch语句,本文给大家介绍Go语言中的select语... 目录Go 语言中的 select 是做什么的基本功能语法工作原理示例示例 1:监听多个通道示例 2:带

Spring Boot项目部署命令java -jar的各种参数及作用详解

《SpringBoot项目部署命令java-jar的各种参数及作用详解》:本文主要介绍SpringBoot项目部署命令java-jar的各种参数及作用的相关资料,包括设置内存大小、垃圾回收... 目录前言一、基础命令结构二、常见的 Java 命令参数1. 设置内存大小2. 配置垃圾回收器3. 配置线程栈大小

SpringBoot实现微信小程序支付功能

《SpringBoot实现微信小程序支付功能》小程序支付功能已成为众多应用的核心需求之一,本文主要介绍了SpringBoot实现微信小程序支付功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作... 目录一、引言二、准备工作(一)微信支付商户平台配置(二)Spring Boot项目搭建(三)配置文件