2.5 计算机执行指令的过程

计算机组成

2 计算机基本结构

2.5 计算机执行指令的过程

执行指令是计算机过程的核心,理解了指令如何执行,也就把握住了计算机运行原理的关键。在这一节,我们就一起来看这个模型机是如何执行指令的。

现在我们已经有了这样一个模型。

而且我们也知道了计算机执行一条指令的主要步骤,包括取指、译码、执行、回写。

那我们就想在这个模型机上尝试执行一条计算机的指令。这里给出了一个例子,我们想执行的这条指令是ADD R0, [6],这样的一个指令格式代表什么含义呢?从ADD,我应该能看出来这是一条加法指令。那么这个加法应该有两个原操作数,其中一个就是通用寄存器R0的内容;另一个[6],中括号就代表是存储单元的内容。那么,中括号里面带一个6说明是地址为6的存储单元的内容。我们把这两个原操作数相加,就可以得到一个运算结果。那么,在我们这种格式指令当中,默认第一个操作数即是原操作数又是目的操作的。这个运算结果就会更新到通用寄存器R0中。现在我们就来看这条指令是如何在模型机上执行的。

假设模型机的当前状态已经有了一些初始值。我们需要注意的是CPU中的R0所保存的值是0000 0011,这等于10进制的3。而存储单元地址为 6(0110) 的存储单元的内容是 0000 0010,相当于10进制的2。那么我们所要做的,就是把这个存储单元地址为6中的数2和R0当中的数3相加,最后再放到R0中。我们还看到 PC 寄存器也就是指向下一条指令地址的寄存器,保存的值是 0001,那么,他所指向的内层单元的地址是 0001,所以这个内存单元中其实是保存了当前所需要执行的那条指令,我就用 1010 1010 这么一个值来指代,这仅仅是指代而已,那我们就来看在这个模型机上是如何运行的。

指令执行的第一步,取指。取指这一步所要做的是控制器将指令的地址送往存储器,存储器按给定的地址读出指令内容,送回控制器。那我们来看具体的操作步骤。

首先请注意控制器会发出控制信号将PC寄存器中的内容通过内部总线传送到MAR中。好,现在MAR寄存器中也保存了0001。

下一步,MAR将会把这个地址送到地址总线上,与此同时,控制电路会在控制总线上发出相应的控制信号,代表这次访问存储器的操作是要读数据。

这样存储器的MAR寄存器就会收到地址总线上传送来的地址并把它保存下来。存储器中的控制逻辑,也会受到控制总线中传送来的控制信号,得知这次仿真操作是一次读操作。

这样存储器通过地址译码器就可以查找到对应地址0001的存储单元的内容,并将该存储单元的内容送到MDR寄存器中。

然后存储器的控制逻辑,会通过控制总线向CPU反馈当前的传输已经准备好了,同时,MDR之中的内容也会送数据总线上。随后,CPU中的控制电路检测到来自控制总线的准备好的ready信号,就知道当前数据总线上已经准备好了数据。

因此,MDR寄存器就会将当前数据总线上传送来的数值保存下来,这就获得了我们所要取的指令。当然,仅到如此是不够的。

MDR中的内容还必需要传送到指令寄存器中,也就是IR寄存器。当指令的编码已经保存到IR寄存器中时,取指这部分工作就已经完成了。真的已经完成了吗?请再仔细想一想。

其实我们还需要再做一件事,就是把PC寄存器更新为下一条指令所需要访问的地址。刚才是0001,现在变成0010,也就是10进制的2。更新完以后我们才可以做下一步的工作。那么,取指阶段到此正式完成。

第二步是译码。这一步控制器会分析指令的操作性质,并向相关的部件发出指令所需的控制信号。

当前的指令计算器IR中指令编码会送到指令译码部件。

指令译码部件根据指令编码,很快会发现这是一条加法指令。而且,是要把R0和存储器中地址为6的单元的内容相加,并把结果存放到R0中。然後,控制电路就据此产生对应的控制信号,并发到相关部件中。这样译码阶段就到此完成了。

第三步是执行。控制器会从通用寄存器或者存储器中取出操作数,并命令运算器对操作数进行指令规定的运算。

首先,根据这条指令我们会发现,还需要去取操作数,其中一个操作数在存储器里中。因此,这一步会在MAR中放置要访问的存储器的地址 0110,就是10进制的6。

那么,随后的过程类似于取指阶段的操作。MAR将地址 0110 发到地址总线。同时,控制电路在控制总线发出读操作的控制信号,存储器的MAR控制逻辑会接收到相应的信号,然后查找到对应的地址,这次要查找的地址是0110,对应的内容 0000 0010 会送到MDR这个寄存器。然後,控制逻辑会向CPU反馈当前数据已经准备好了的信号。然後,MDR的内容也会被放置到数据总线上,CPU会接收数据并保存在MDR寄存器中。

因为这个数据要进行加法运算,所以控制器会进一步将MDR中的数据传送到ALU的输入,目前会暂存到Y寄存器中,这一个操作数现在就准备好了。那么另一个操作数是放在R0中,因此,控制器还会将R0中的数据传送到ALU的另一个输入端,也就是x寄存器。

现在,两个操作数都准备好了。在控制电路的控制下ALU就会进行运算,将X、Y中的内容执行加法并计算出结果。结果就是 0000 0101 也就是10进制的5。到此,执行阶段就完成了。

第四步是回写。也就是将运算结果写入到通用寄存器或者储存器。

现在,运算结果还在ALU的输出端,也就是Z寄存器中。控制电路会给出相应的控制信号,将Z寄存器当中的内容传送到R0中。R0目前的内容是之前的原操作数,也就是 0000 0011。随后会被新的结果(Z寄存器中的内容)所覆盖。

这样,我们这个加法运算的结果就已经保存到了R0寄存器中。回写阶段到此完成。这条指令你就执行完毕了。

然後,CPU就会自动执行下一条指令,和刚才一样,先将PC中的内容传送到MAR寄存器当中,然後MAR会将这个地址传送到地址总线上,依次的执行下一条指令。

现在,我们通过学习计算机是如何执行指令,已经掌握了冯·诺伊曼结构的核心内容。但是,人们是如何向计算机下达指令的呢?计算机的运行结果又是如何让外界得知?这是我们下一节将关注的内容。

原文地址:https://www.cnblogs.com/narisu/p/9094877.html

时间: 2024-10-11 09:47:17

2.5 计算机执行指令的过程的相关文章

1-5 计算机执行指令的过程

一.计算机执行一条指令的主要步骤 第一步:取指(Fetch) 第二步:译码(Decode) 第三步:执行(Execute) 第四步:回写(Write-Back) 二.执行指令的示例 例如指令: ADD R0, [6]; 指令功能:将寄存器R0和地址为6的存储单元的数据进行加法运算并将结果更新到R0中 第一步:取指 1.控制器将指令的地址(PC的内容)送往存储器 2.存储器按给定的地址读出指令内容,送回控制器(一般存放在IR寄存器中) 3.更新PC 第二部:译码 1.控制器分析指令的操作性质 2.

单片机执行指令的过程

单片机执行程序的过程,实际上就是执行我们所编制程序的过程.即逐条指令的过程.计算机每执行一条指令都可分为三个阶段进行.即取指令-----分析指令-----执行指令. 取指令的任务是:根据程序计数器PC中的值从程序存储器读出现行指令,送到指令寄存器. 分析指令阶段的任务是:将指令寄存器中的指令操作码取出后进行译码,分析其指令性质.如指令要求操作数,则寻找操作数地址. 计算机执行程序的过程实际上就是逐条指令地重复上述操作过程,直至遇到停机指令可循环等待指令. 一般计算机进行工作时,首先要通过外部设备

【自制操作系统01】硬核讲解计算机的启动过程

目录 一.为什么是 BIOS 主导?    二.内存映射    三.实模式下的内存分布    四.怎么就从 BIOS 里的程序开始执行了    五.BIOS 里到底写了什么程序    六.0x7c00 是啥    七.启动区里的代码写了啥    八.操作系统内核写了啥        软硬件协同发展        历史遗留问题    九.参考资料    十.开源项目和课程规划        项目开源        课程规划 本讲只为讲明白下面一个问题: 我们按下开机键后究竟发生了什么? 好的,这似

计算机的启动过程

首先介绍几个重装系统时会用到的软件: 1.分区助手专业版:傲梅分区助手等 2.Ext2Fsd 3.EasyBCD 4.WinGrub 5.Win UI 命令提示符的几个命令: 1.运行下:. msinfo.exe:打开系统信息,查看系统硬件等的配置,可查看电脑的位数. 2.运行下:msconfig:系统配置,开机引导等 3.diskmgmt.msc 磁盘管理器,压缩卷等 4. 0.理解下 :启动,boot,原自bootstrap.要开机便得先运行程序,要运行程序就要先开机.这是一个相当矛盾的过程

从汇编看计算机的工作过程

本周学习了Linux内核分析第一课,老师通过讲解一个简单的c程序使我了解了计算机(特别是堆栈部分)工作过程. 下面通过一个简单的例子来分析一下: 下面是c程序: int g(int x) { return x + 6; } int f(int x) { return g(x); } int main(void) { return f(5) + 2; } 使用下面命令反汇编c程序得到汇编程序 gcc –S –o main.s main.c -m32 首先从main函数开始分析,可以发现每个函数中前

计算机/linux启动过程

开机过程指的是从打开计算机电源直到LINUX显示用户登录画面的全过程. 分析LINUX开机过程也是深入了解LINUX核心工作原理的一个很好的途径. 计算机开机过程是一个非常复杂的过程,想真正理解透彻并不容易. 计算机启动是一个很矛盾的过程:必须先运行程序,然后计算机才能启动,但是计算机不启动就无法运行程序! 早期真的是这样,必须想尽各种办法,把一小段程序装进内存,然后计算机才能正常运行. 先了解下BIOS是什么? BIOS是英文"Basic Input Output System"的缩

How Computers Boot Up.计算机的引导过程

原文标题:How Computers Boot Up 原文地址:http://duartes.org/gustavo/blog/ [注:本人水平有限,只好挑一些国外高手的精彩文章翻译一下.一来自己复习,二来与大家分享.] 前一篇文章介绍了Intel计算机的主板与内存映射,从而为本文设定了一个系统引导阶段的场景.引导(Booting)是一个复杂的,充满技巧的,涉及多个阶段,又十分有趣的过程.下图列出了此过程的概要: 引导过程概要 当 你按下计算机的电源键后(现在别按!),机器就开始运转了.一旦主板

计算机执行指令

1.示例 指令格式:ADD R0,[6] 指令功能: ADD这是一条加法指令 通用寄存器R0的内容+地址为6存储单元的内容=运算结果(更新到R0) 2.过程 R0里面数为00000011十进制为3 地址为0110(6)存储单元内容为00000010十进制为2 也就是计算3+2=5并且把运算结果返回到R0 2.1取指 ①控制器将指令的地址送往存储器. ②存储器按给定地址独处指令内容,送回控制器. 上图具体步骤 1.控制器发出控制信号将PC寄存器里面的地址通过内部总线传送到MAR寄存器里 2.MAR

AE CC 装不上,安装程序检测到计算机重新启动的过程可能暂停。建议退出安装程序,重新启动计算机,然后再重试。

解决: 如果安装过一次或者绿化版本的之后会出现安装失败的问题是以前的版本卸载时没有卸载干净导致的, 解决办法如下:定位到目录:C:\Program Files\Common Files\Adobe\caps,C为系统盘路径,视你的系统而定.删除该目录下的所有(.db)文件后重新安装.C:\Program Files\Common Files\Adobe\backupC:\Program Files (x86)\Common Files\Adobe\capsC:\Program Files\Com