计算机组成原理----计算机系统(2)

简介: 计算机组成原理----计算机系统
计算机组成原理----计算机系统(1):https://developer.aliyun.com/article/1511508
(4)计算机工作过程:

计算机会将高级语言翻译为机器能读懂的机器语言,并且将其装入主存储器中,如下图所示,存储体中每个存储单元的存储字长为16bit

取指令:

程序运行前,(PC)=0,指向第一条指令的存储地址


① PC的值通过地址总线传送到主存储器的MAR中。此时(PC)=0,所以(MAR)=0,即


(PC)--->MAR


经过这个操作,控制器向主存指明了此时需要访问0号主存地址对应的数据,同时通过控制总线告诉主存,此时要进行的是读操作。

主存储器会根据MAR记录的信息去存储体中找到0号主存地址对应的存储单元,并且将存储单元的数据存放到MDR中,此时MDR中存放的就是CPU想读取的第一条指令,即

M(MAR)--->MDR        主存储器中MAR存放的地址对应的存储单元的数据放到MDR中

(MDR)=000001 0000000101

这个数据起始就是一条指令,解释为"取数a至ACC",这条指令会通过数据总线放到IR中,导致(IR)=000001 0000000101,即

(MDR)-->IR

分析指令:

该指令的操作码(前6bit)会被送到CU中,CU分析后得知这是"取数"指令,即

OP(IR)--->CU,OP(IR)表示取操作码

执行取数指令:

⑤ 接下来就需要将指令中的地址码指明的主存中数据取出来,并且放到ACC寄存器中,既然要读取地址码指向的数据,那么就需要先将地址码放到主存的MAR中,如下图所示,该存储单元存放的地址码=0000000101,就是要取5主存地址中的数据到ACC中,即


Ad(IR)--->MAR,Ad(IR)表示取地址码         (MAR)=5

⑥ 接下来主存会根据MAR的地址到存储体中找相应的数据,并把这一数据放到MDR中,即

M(MAR)---->MDR        导致(MDR)=0000000000000010=2

⑦ 最后在控制单元的指挥下,MDR中的数据会被送到ACC(累加寄存器)中,即

(MDR)--->ACC        导致(ACC)=0000000000000010=2

:之前提到PC有自动+1的功能,在取指令这个动作完成后,PC就会自动+1了,即指明了下一条会执行的指令(主存地址为1的位置)

所以上一条指令完成取指后,(PC)=1,执行完该条指令后,(ACC)=2

如图所示,第二条指令是乘法指令:

对应上面的第⑦步,现在MDR中数(3),就会被放到MQ(乘商寄存器)中,即

MDR--->MQ        导致(MQ)=0000000000000011=3

接下来把a的值放到通用寄存器X中,即CPU执行乘商操作时,会把被乘数放到通用寄存器X中,即ACC寄存器中的数据放到X中,而乘数放到MQ中,就是下面的第10步

(ACC)--->X        导致(X)=2

接下来CU会通过控制总线告诉ALU(算术逻辑单元),让其进行乘法运算,那么ALU会将X与MQ中的数据进行相乘操作,并将最终的结果放到ACC中,如下面的11所示,即


(MQ)*(X)--->ACC        由ALU实现乘法运算,导致(ACC)=2*3=6,如果乘积太大,则需要MQ辅助存储,MQ会用来存储乘商运算结果的低位

此时ACC就存放了a*b的值了。

借这个例子就很好理解下图了:

分析完两条指令后,我们可以看到,取指令与分析指令的流程都是一样的,只有当CU分析出指令的不同功能时,操作才会产生区别,所以接下来就从CU分析指令后讲解:

第三条指令的执行:

上一条指令取指后(PC)=2,执行完上一条指令后,(ACC)=6,即ACC中存放了上一条指令执行的结果。

同理,CU分析后,得知这是一个"加法"指令。CPU将指令的地址码送到MAR(0000000111),导致(MAR)=7,即:Ad(IR)--->MAR


接着主存储器会根据MAR,到存储体中寻找对应数据,即主存地址为7的位置存放的数据,放到MDR中


M(MAR)--->MDR        导致(MDR)=0000000000000001=1

由于是"加法"指令,MDR会将数据传送到通用寄存器X中

(MDR)--->X        导致(X)=0000000000000001=1

到这一步,ACC中存放的是被加数,而X中存放的是加数,控制单元CU会向ALU发出信号,指明这是一个加法操作,那么ALU就会将ACC与X中的值相加,并且将加和的结果放到ACC中,即下面的第10步:


(ACC)+(X)--->ACC        导致(ACC)=7



此时ACC就存放了a*b+c的值了。

第四条指令的执行:

上一条指令取指后(PC)=3,执行后,(ACC)=7

由CU分析后,这是一条"存数"指令,接着IR会将该数据的地址码(0000001000)送到MAR中,导致(MAR)=0000001000=8,即:Ad(IR)--->MAR


另外ACC会通过数据总线将数据送到MDR中,即(ACC)--->MDR,导致(MDR)=7,此时MDR中存放的就是a*b+c的值了。

存放的就是a*b+c的值了。

(MAR)=8,(MDR)=7,CU通过控制总线告诉主存储器此次是一次写主存的操作,那么主存储器会根据MAR所指明的地址,把MDR中的数据放到相应的位置中,也就是将a*b+c的值7存放到主存地址为8的位置。

第五条指令的执行:

上一条指令取指后(PC)=4

CU分析后,得知这是一条"停机"指令,那么利用中断机制通知操作系统终止该进程。

总结:

根据指令周期的不同阶段(取指令,分析指令,执行指令),CPU就能区分其从主存中取出的是指令还是数据,例如"取指令阶段"就是取的指令,"执行指令阶段"就是取的数据。

6.计算机系统的多级层次结构

(1)低级语言
机器语言:

传统意义的计算机只能识别机器语言,也就是二进制表示的指令,CPU在执行二进制表示的指令时,还需要将这些机器指令细分为更细的指令执行,即微指令或微操作。也就是用微指令解释并执行每一条机器指令。

例如下图,主存地址为0的指令,就需要分为9个微操作。

汇编语言:

由于二进制指令用于编程是很不方便的,所以出现了汇编语言,使用汇编语言的程序员看到的机器就是"虚拟机器",为什么是"虚拟机器"?


因为在使用汇编语言的程序员看来,好像机器能直接识别汇编语言,但是机器其实无法直接识别汇编语言,而是需要通过汇编程序翻译成等价的机器语言程序,才可以执行。


一条汇编语言对应一条机器指令:

用汇编语言编写的程序,只是更便于理解而已,但本质上依然属于低级语言。

(2)高级语言

在程序员看来,可以识别高级语言的机器,也称为"虚拟机器",因为机器不能直接识别高级语言,高级语言需要用编译程序翻译成汇编语言程序,用汇编程序翻译成机器语言程序,机器才能识别。

(3)计算机系统的层次结构

高级语言编写的程序可能会用到操作系统提供的服务,例如通过系统调用请求操作系统的服务,汇编语言编写的程序同理,那么完善的层次如下图所示:


操作系统与操作系统之上的部分就为软件部分,用机器语言的机器及以下的部分就为硬件部分


下层是上层的基础,上层是下层的扩展。

(4)三种级别的语言

如上图所示,高级语言需要用编译程序翻译成汇编语言程序,用汇编程序翻译成机器语言程序,机器才能识别。事实上也有一些语言,经过编译程序的编译后,就能直接得到机器可识别的机器语言程序。


还有一些高级语言的执行,并不是通过编译程序编译,而是通过解释程序,将高级语言翻译为对应的机器语言指令,例如:JavaScript、Python、Shell

编译程序与解释程序的区别:

编译程序:将高级语言编写的源程序全部语句一次全部翻译成机器语言程序,而后再执行机器语言程序(只需翻译一次),例如执行完C语言后生成的.exe文件,这个文件就是用机器语言描述的

程序,只要生成这一文件,之后就不需要再进行编译了。

若要运行这一程序,只需要加载这一文件即可。

解释程序:将源程序的一条语句翻译成对应于机器语言的语句,并立即执行。紧接着再翻译下一句(每次执行都要翻译)

所以编译程序执行效率更高,解释程序执行效率较低。

注:编译、汇编、解释程序,可统称“翻译程序”,他们的作用都是将更高级的语言翻译为更低级的语言。


补充:计算机体系结构与计算机组成原理的区别


计算机体系结构探讨的是如何设计硬件与软件之间的接口。而计算机组成原理探讨的是如何用硬件实现所定义的接口。这对程序员来说是“透明”的,即程序员是看不见的。



相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
【计算机组成原理】计算机组成原理(三)
计算机组成原理(三) 奇偶校验码: 校验原理:
103 0
|
7月前
|
存储 Java 芯片
计算机组成原理----计算机系统(1)
计算机组成原理----计算机系统
76 3
|
7月前
|
存储 Unix 程序员
计算机组成原理(5)----指令系统(2)
计算机组成原理(5)----指令系统
888 2
|
C语言
【计算机组成原理】综合测试
【计算机组成原理】综合测试
150 0
|
C语言
计算机组成原理相关知识
计算机组成原理相关知识
109 0
|
存储 芯片
01 计算机组成原理与体系结构----02计算机结构(下)
01 计算机组成原理与体系结构----02计算机结构(下)
01 计算机组成原理与体系结构----02计算机结构(上)
01 计算机组成原理与体系结构----02计算机结构
|
移动开发
01 计算机组成原理与体系结构----01数据的表示
01 计算机组成原理与体系结构----01数据的表示
|
存储 编译器 图形学
|
存储 算法 芯片