写在前面:
- 本系列笔记主要以《计算机组成原理(唐朔飞)》为参考,大部分内容出于此书,笔者的工作主要是挑其重点展示,另外配合下方视频链接的教程展开思路,在笔记中一些比较难懂的地方加以自己的一点点理解(重点基本都会有标注,没有任何标注的难懂文字应该是笔者因为强迫症而加进来的,可选择性地忽略)。
一、冯·诺依曼计算机的特点
1、何为“存储程序”
(1)1945年,数学家冯·诺依曼在研究EDVAC机时提出了“存储程序”的概念,以此概念为基础的各类计算机统称为冯·诺依曼机。
(2)存储程序的概念:将指令以二进制代码的形式事先输入计算机的主存储器,然后按照其在存储器中的首地址执行程序的第一条指令,以后就按照该程序的规定顺序执行其它指令,直至程序执行结束。
2、冯·诺依曼机的特点
(1)计算机由运算器、存储器、控制器、输入设备和输出设备五大部件组成。
(2)指令和数据以同等地位存放于存储器内,并可按地址寻访。
(3)指令和数据均用二进制数表示。
(4)指令由操作码和地址码组成,操作码用来表示操作的性质,地址码用来表示操作数在存储器中的位置。
(5)指令在存储器中按顺序存放,通常指令是顺序执行的,在特定条件下可根据运算结果或设定的条件改变执行顺序。
(6)机器以运算器为中心,输入输出设备与存储器间的数据传送通过运算器完成。
二、计算机的硬件框图
1、结构框图
(1)典型的冯·诺依曼机以运算器为中心:
(2)现代的计算机以存储器为中心:
2、五大部件的功能
(1)运算器用来完成算术运算和逻辑运算,并将运算的中间结果暂存在运算器内。
(2)存储器用来存放数据和程序。
(3)控制器用来控制、指挥程序和数据的输入、运行以及处理运算结果。
(4)输入设备用来将人们熟悉的信息形式转换为机器能识别的信息形式,比如键盘、鼠标等。
(5)输出设备可将机器运算结果转换为人们熟悉的信息形式,如打印机输出、显示器输出等。
3、现代计算机的组成框图
(1)由于运算器和控制器在逻辑关系和电路结构上联系十分紧密,这两大部件往往集成在同一芯片上,因此通常将它们合起来统称为中央处理器(CPU)。另外,输入设备和输出设备通常简称为I/O设备。
(2)现代计算机可认为由三大部分组成,分别是CPU、I/O设备及主存储器,CPU和主存储器联合起来又可称为主机,I/O设备又可称为外部设备。
(3)算术逻辑单元(ALU)简称算逻部件,用来完成算术逻辑运算;控制单元(CU)用来解释存储器中的指令,并发出各种操作命令来执行指令,I/O设备也受CU控制,用来完成相应的输入、输出操作。ALU和CU是CPU的核心部件。
三、计算机的工作步骤
1、上机前的准备
(1)建立数学模型,找到一系列反映研究对象变化规律的数学方程组。
(2)确定计算方法,将其变成适合计算机运算的加、减、乘、除四则运算。
(3)编制解题程序,将运算步骤用一一对应的机器指令描述,程序则是适合于机器运算的全部步骤。
——举例:计算。
将上述运算步骤写成某计算机一一对应的机器指令,就完成了运算程序的编写。
设某机的指令字长为16位,其中操作码占6位,地址码占10位,操作码表示机器所执行的各种操作,地址码表示参加运算的数在存储器内的位置。机器指令的操作码和地址码都采用0、1代码的组合来表示。
操作码与操作性质的对应表:
计算的程序清单:
2、计算机的组成和工作过程
(1)细化的计算机组成框图:
(2)主存储器:
①主存储器(简称主存或内存)包括存储体M、各种逻辑部件及控制电路等。存储体由许多存储单元组成,每个存储单元都有一个编号,称为存储单元的地址号。每一个存储单元又包含若干个存储元件(或称存储基元、存储元),每个存储元件能寄存一位二进制代码“0”或“1”,那么一个存储单元可存储一串二进制代码,称这串二进制代码为一个存储字,这串二进制代码的位数称为存储字长(存储字长可以是8位、16位或32位等)。
②主存的工作方式就是按存储单元的地址号来实现对存储字各位的存(写入)、取(读出),这种存取方式称为按地址存取方式,即按地址访问存储器(简称访存)。为了实现按地址访问的方式,主存中还必须配置两个寄存器MAR和MDR。
[1]MAR是存储器地址寄存器,用来存放欲访问的存储单元的地址,其位数对应存储单元的个数,如MAR为10位,则有个存储单元,记为1K。
[2]MDR是存储器数据寄存器,用来存放从存储体某单元取出的代码或者准备往某存储单元存入的代码,其位数与存储字长相等。
[3]随着硬件技术的发展,主存都制成大规模集成电路的芯片,而将MAR和MDR集成在CPU芯片中。
(3)运算器:
①运算器用于实现算术运算及逻辑运算,它最少包括3个寄存器和1个算术逻辑单元(ALU),其中ACC为累加器,MQ为乘商寄存器,X为操作数寄存器,这3个寄存器在完成不同运算时所存放的操作数类别也各不相同。
②各寄存器所存放的各类操作数:
③四则运算的过程:
[1]加法操作的过程为:
[M] → X
[ACC] + [X] → ACC
将[ACC]看作被加数,先从主存中取一个存放在M地址号单元内的加数[M]送至运算器的X寄存器中,然后将被加数[ACC]与加数[X]相加,结果(和)保留在ACC中。
[2]减法操作的过程为:
[M] → X
[ACC] - [X] → ACC
将[ACC]看作被减数,先从主存中取一个存放在M地址号单元内的减数[M]送至运算器的X寄存器中,然后将被减数[ACC]与减数[X]相减,结果(差)保留在ACC中。
[3]乘法操作的过程为:
[M] → MQ
[ACC] → X
0 → ACC
[X] × [MQ] → ACC//MQ (ACC和MQ两个寄存器串接)
将[ACC]看作被乘数,先从主存中取一个存放在M地址号单元内的乘数[M]送入乘商寄存器MQ,再把被乘数至运算器的X寄存器中,并将ACC清“0”,然后[X]与[MQ]相乘,结果(积)的高位保留在ACC中,低位保留在MQ中。
[4]除法操作的过程为:
[M] → X
[ACC] × [X] → MQ
余数R在ACC中
将[ACC]看作被除数,先从主存中取一个存放在M地址号单元内的除数[M]送至运算器的X寄存器中,然后[ACC]除以[X],结果(商)暂留于MQ,[ACC]为余数R。若需要将商保留在ACC中,只需做一步“[MQ] → ACC”即可。
(4)控制器:
①控制器指挥各部件自动、协调地工作,其功能是解释指令和保证指令的按序执行。具体而言,它首先要命令存储器读出一条指令,称为取指过程(也称取指阶段);接着,它要对这条指令进行分析,指出该指令要完成什么样的操作,并按寻址特征指明操作数的地址,称为分析过程(也称分析阶段);最后,根据操作数所在的地址以及指令的操作码完成某种操作,称为执行过程(也称执行阶段)。
②控制器由程序计数器(PC)、指令寄存器(IR)以及控制单元(CU)组成。
[1]PC用来存放当前欲执行指令的地址,它与主存的MAR之间有一条直接通路,且具有自动加1的功能,即可自动形成下一条指令的地址。
[2]IR用来存放当前的指令,其内容来自主存的MDR。IR中的操作码(OP(IR))送至CU,记作“OP(IR) → CU”,用来分析指令;IR中的地址码(Ad(IR))作为操作数的地址送至存储器的MAR,记作“Ad(IR) → MAR”。
[3]CU用来分析当前指令所需完成的操作,并发出各种微操作命令序列,用以控制所有被控对象。
(5)I/O:
①I/O子系统包括各种I/O设备及其响应的接口。
②每一种I/O设备都由I/O接口与主机联系,它接收CU发出的各种控制命令,并完成相应的操作。
(6)主机完成指令的过程:
①以一条取数指令为例:
②以一条存数指令为例:
——举例:计算。
首先按程序清单所列的有序指令和数据,通过键盘输入到主存第0号至第12号单元中,并置PC的初值为0(令程序的首地址为0)。启动机器后,计算机便自动按存储器中所存放的指令顺序有序地逐条完成取指令、分析指令和执行指令,直至执行到程序的最后一条指令为止。
例如,启动机器后,控制器立即将PC的内容送至主存的MAR(记作PC→MAR),并命令存储器做读操作,此刻主存“0”号单元的内容“0000010000001000”便被送入MDR中,然后由MDR送至控制器的IR(记作MDR→IR),完成了一条指令的取指过程。经CU分析(记作OP(IR)→CU),操作码“000001”为取数指令,于是CU又将IR中的地址码“0000001000”送至MAR(记作Ad(IR)→MAR),并命令存储器做读操作,将该地址单元中的操作数x送至MDR,再由MDR送至运算器的ACC(记作MDR→ACC),完成此指令的执行过程,此刻也即完成了第一条取数指令的全过程,即将操作数x送至运算器ACC中,与此同时,PC完成自动加1的操作,形成下一条指令的地址“1”号。同上所述,由PC将第二条指令的地址送至MAR,命令存储器做读操作,将“0001000000001001”送入MDR,又由MDR送至IR,接着CU分析操作码“000100”为乘法指令,故CU向存储器发出读命令,取出对应地址为“0000001001”单元中的操作数a,经MDR送至运算器MQ,CU再向运算器发送乘法操作指令,完成ax的运算,并把运算结果ax存放在ACC中,同时PC又完成一次自增((PC) + 1 → PC),形成下一条指令的地址“2”号。以此类推,逐条取指、分析、执行,直至打印出结果,最后执行完停机指令后,机器便自动停机。