计算机执行指令

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寄存器将地址送到地址总线上,与此同时控制电路会在控制总线上发出控制信号,并表示这次访问

存储器是读取数据。

3.存储器的MAR寄存器收到地址总线上的地址,并将其保存下来,存储器里面的控制逻辑也会收到

控制总线过来的控制信号,得知这次操作是读操作。

4.存储器通过地址译码器对应地址0001存储单元内容,并将该存储单元内容送到MDR寄存器中。

存储器的控制逻辑会通过控制总线向cpu反馈当前的传输已经主备好了。

5.同时MDR里面内容也送到数据总线上,随后,cpu控制电路检测到来自控制总线准备好Ready信号,得知

数据总线上准备好了数据。

6.因此cpu中的MDR寄存器将当前数据总线上传送来的数值保存下来,这就获得了我们要取的指令。

7.cpu中MDR寄存器的内容要传送到IR指令寄存器中,当指令进入IR中,取指这部分算是完成了吗?

8.PC寄存器更新为下一条指令的地址。0001变为0010,取指阶段到此完成

2.2译码

①控制器分析指令的操作性质

②控制器向有关部件发出指令所需控制信号

上图具体步骤

1.当前IR指令寄存器中的指令编码送到指令译码部件。

2.指令译码部件根据指令编码很快会发现这是一条加法指令,而且是吧R0

和存储器地址为6的单元内容相加,把结果存入R0中。控制电路据此产生控制信号发到相关部件中

译码阶段到此完成。

译码得到的指令:ADD R0,[6]

2.3执行

①控制器从通用寄存器或存储器取出操作数

②控制器命令运算器对操作数进行指令规定的运算

上图具体步骤

1.根据这条指令需要去取操作数,其中一个操作数在存储器中地址为6的单元,因此在MAR寄存器中放入要取的操作数地址0110(十进制的6)。

2.MAR寄存器将地址发送到地址总线,同时控制电路发送读取的信号到控制总线,存储器的控制逻辑和MRA寄存器会接收到相应的信号,然后

查找到对应地址0110里面的内容00000010,送到MDR寄存器,存储器控制逻辑向cpu反馈当前数据已经准备好的信号,MDR内容会被放到

地址总线上,cpu接收数据并放在MDR寄存器中。

3.cpu里面MDR寄存器数据要参与加法运算,cpu控制器会将MDR寄存器数据通过内部总线传送到ALU的输入Y寄存器中,这一个操作数已经准备好了。另一个操作数存放在R0寄存器中,因此控制器会将R0里面数据通过内部总线传送到ALU另一个输入端X寄存器。

4.现在两个操作数R0和6已经准备好了,在控制电路的控制下ALU就会进行运算将X和Y寄存器里面的内容进行加法运算。结果是00000101(十进制5)

到此执行阶段就结束了。

2.4回写

①将运算结果写入通用寄存器或存储器

1.现在运算结果还在ALU的输出端Z寄存器,控制电路会给出相应控制信号,将z寄存器内容传送到

R0寄存器中,R0里面原来的数据会被新的结果覆盖。这个加法运算的结果就保存到R0寄存器中

回写阶段到此完成。

3.CPU就会执行下一条指令

时间: 2024-10-10 18:14:13

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

2.5 计算机执行指令的过程

计算机组成 2 计算机基本结构 2.5 计算机执行指令的过程 执行指令是计算机过程的核心,理解了指令如何执行,也就把握住了计算机运行原理的关键.在这一节,我们就一起来看这个模型机是如何执行指令的. 现在我们已经有了这样一个模型. 而且我们也知道了计算机执行一条指令的主要步骤,包括取指.译码.执行.回写. 那我们就想在这个模型机上尝试执行一条计算机的指令.这里给出了一个例子,我们想执行的这条指令是ADD R0, [6],这样的一个指令格式代表什么含义呢?从ADD,我应该能看出来这是一条加法指令.那

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

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

操作系统基础知识总结(一)

1. 进程和线程的区别 进程 进程,即正在运行的程序,程序从硬盘载入到内存就变成进程.进程是资源的拥有者,每个进程都拥有着自己的内存空间与多个线程. 线程 线程是指令的执行者,是计算机执行指令的基本单元,一个进程可以拥有多个线程.线程的引入主要有如下原因: 响应:与进程相比,创建线程不涉及或较少涉及资源分配,因此速度较快 资源共享:线程间可以共享资源,同一个进程内两个线程通信快 经济:创建线程不涉及或较少涉及资源分配 适合计算机的多处理器架构 线程既有共享的资源,也有自己私有的资源,JVM中线程

腐败的程序员(1)

如果你不幸的看到了此文章,请不要急着喷lz,且当楼主是个标题党吧. 一直以来,腐败这个词都是放在那些掌握有一些权利的人身上的,程序员怎么会腐败呢?我天朝程序员是非常敬业的,别人在家享受家庭的温暖的时候,我们可爱的程序员一族还常常在公司里无怨无悔的加班.其实lz想说的主题是怎么样写出高质量的代码,但是高质量的代码这个主题太高深,楼主不敢用,所以用了这么一个标题.下面进入正题. 作为lz的第一篇博客,先立出一个观点,高质量的代码是在严格的约束中产生的,但是严格的约束却不一定能产生高质量的代码.为什么

1-3 冯诺依曼结构的小故事

一.执行指定--->计算机运转的核心内容 1.计算机执行指令一条指令的主要步骤: <1>取指(Fetch) <2>译码(Decode) <3>执行(Execute) <4>回写(write-back) 二.计算机执行指令的过程 CPU从主存中取出一条指令,假如译码后为做加法,这时CPU中寄存器A有一个内容,主存地址为6的单元中也有内容, CPU根据指令把主存中的地址为6的单元的内容取出来,并把CPU内部寄存器A的内容取出来,执行一个加法, 然后把结果更

互联网线上项目开发最大坑点-并发冲突处理

大家可能都有这样的经验,自个儿在家里很多功能很容易实现,一下就做完了,但是在做线上产品的时候,就变得无比复杂,需要花费很多的时间. 自己写的程序在家跑,所有的业务都很正常,一旦发布到线上,就会出现很多bug,而且很多bug在测试的时候很难重现,这是在互联网开发的时候经常遇到的现象. 这些难以重现的bug,大部分是由于并发产生的,为了能让大家充分的了解并发的问题,并且建立并发环境下的程序设计思维,我们为大家准备了几个小案例 大家来看一下,这个网站典型的场景,遇到内容比较多的情况下,我们会使用分页

C语言入门参考(一)

一.       何为编程,何为编程语言? 编程编程,通俗地说即为编写程序,其目的是为了告诉计算机正确高效率地帮助我们解决不能完成的问题(比如在科学研究上的庞大数据的计算).计算机好比一个力大无穷的人,但它却又非常的蠢,不懂得如何去运用自己的力量,这需要别人告诉它怎么发力用多少力才行,所以如果把"告诉计算机如何用力发力的过程"理解为编程也并不为过.计算机的俗名是"电脑",而我们是"人脑",用人的语言去与计算机直接交流必然是交流不通的.那么问题来了

初见python

python简单介绍 python是一门语言,和中文.英文不用的是前者和技术机沟通,后两者和人沟通.英文有单词有句子有语法,python有变量数据有函数有语法.python是一门解释形语言,使用解释器把程序文件解释给计算机,过启动python解释器------>把程序文件从硬盘载入内存------>解释程序文件,计算机执行指令 变量 程序执行过程是一系列变化的过程,变量可以反映某一情况下的状态. 变量的定义方式:变量名=变量值 变量的3个要素:id(内存信息):type(类型):值 pytho

happen-before 原则

学习过程中引发的思考 近来学习并发知识,看到了一段很经典的代码,如下: count = 1; 线程1{ 操作1: count++; } 线程2{ 操作2:count++; } 在并发环境下,线程1和线程2同时执行自己的操作,那么操作的结果一定是3吗? 我们知道count++并不是原子操作,count++在计算机执行指令的时候 会把该操作分解成三个过程,1.给中间变量取值,2.中间变量值+1,3.再赋值给原来的变量. 因此在并发环境下,结果是非常不确定的. 也就是说操作1的结果对于操作2来说并不一