第二节 计算机的基本组成

1.冯诺依曼计算机的特点

(1)计算机由五大部件组成:运算器、存储器、控制器、输入设备、输出设备。

(2)指令和数据以同等地位存于存储器,可按地址寻访;

(3)指令和数据用二进制表示;

(4)指令由操作码和地址码组成;

(5)存储程序;

(6)以运算器为中心。

图1 冯诺依曼结构(实线是数据传输,虚线是地址传输)

2.硬件系统的改进

问题1:以运算器为中心,导致运算器成为系统的瓶颈。

问题2:不具有层次化的特征。

改进1:以存储器为中心的计算机硬件框图

图2 以存储器为中心的计算机硬件框图

改进2:

运算器  ALU ———CPU———–主机

控制器  CU  —-|

存储器  ——-主存—————-|

—|辅存

 

输入设备——-I/O设备

输出设备——-|

图3 改进2的计算机硬件框图(现代计算机硬件框图)

系统复杂性管理方法23Y

1.层次化(Hierachy):将被设计的系统划分为多个模块或者子模块;

2.模块化(Modularity):有明确定义(well-defined)的功能和接口;

3.规则性(regularity):模块更容易被重用。

3.计算机的工作步骤

3.1上机前的准备

①建立数学模型

②确定计算方法

③编织解题程序:程序-运行的全部步骤;指令-每一个步骤

编程举例

计算ax2+bx+c

假设系统包含加法指令、乘法指令、取数指令、存数指令、打印指令和停机指令。

假设a,b,c已经保存起来了。计算步骤如下:

①首先取x至运算器中的累加器(寄存器)中;(取数指令

②乘x,在运算器中,计算的x的平方,保存在累加器ACC中;(乘法指令

③乘a,在运算器中,在累加器ACC中保存ax的平方;(乘法指令

④存数指令,存ax的平方在存储器中;(存数指令

⑤取b至运算器中;(取数指令

⑥在运算器中,对b乘x,acc中保存bx;(乘法指令

⑦把bx+ax2,在累加器中;(加法指令)

⑧加c,在累加器中;(加法指令

一共执行8指令,指令较多,运算速度慢存储量较大。但是如果做一个优化,将该式处理为(ax+b)x+c。计算步骤如下:

①取x至运算器中;(取数指令

②a乘x,在运算器中;(乘法指令

③把ax+b,在运算器中;(加法指令

④乘x,在运算器中;(乘法指令

⑤加c,在运算器中。(加法指令

一共执行5条指令,相对来说指令少,运算速度快,存储量也小。

另外要说明的是,累加器是运算器的一个部分。

指令格式举例

操作码地址码

取数(把内存单元α中的数据存储在ACC中)           [α]àACC

假设我们的指令有16位,操作码为6位,地址码为10位。则可以如下格式:

000001 0000001000

存数(把ACC中的数据保存在内存单元β当中)            [ACC]àβ

加 γ                                                 [ACC]+[γ]àACC

乘 σ                                                 [ACC]×[σ]àACC

打印 θ                                                [θ]à打印机

停机

假设内存和ACC均为8位长度,那么乘法会使数据边长,必然会导致数据溢出。应予以注意。

计算ax2+bx+c程序清单如下图所示。

图4 计算程序清单(x/a/b/c/存储结果均为二进制数存储)

冯诺依曼机中,指令和数据都是同等地位二进制数据保存起来的。

3.2 计算机的解题过程

1)存储器的基本组成

图5 存储器的基本组成

存储器-存储单元-存储元件(0/1,),类似于大楼-房间-床位(无人/有人)

存储单元:用来存放一串二进制代码;

存储字:存储单元中二进制代码的组合;

存储字长:存储单元中二进制代码的位数。

每个存储单元赋予一个地址号,实行按地址寻访

MAR(Memory Address Register):存储器地址寄存器。反映存储单元的个数。

MDR(Memory Data Register):存储器数据计算器。反映存储的字长。

设MAR=4位,MDR=8位,则存储单元是16个(24),存储字长为8。

2)运算器的基本组成及操作过程

图6 运算器各部分组成及功能

    运算器核心是算术逻辑单元(ALU),它是一个组合逻辑电路,也就是说当输入撤销之后,输出也会消失,因此后面需要存在一个寄存器,保存参与运算的数据,这两个寄存器为ACC(累加器)和X(数据寄存器)。如果做乘法运算,则多余出来的位数存放在MQ中。

注意:此结构仅限于本课程的一种类型。

对于加法来说,加数存放在X中,被加数存放在ACC中,和存放在ACC中;对于剪发说,被减数存在ACC中,减数存在X中,差在ACC中;对于乘法来说,乘法可以用加法和移位的方式来计算,被乘数存放在X中,乘数放在MQ中,乘积高位在ACC中,乘积地位在MQ中;对于除法来说,除法是用减法和移位来实现的,被除数在ACC,除数是X中,商在MQ中,余数在ACC中。

①加法操作过程

指令:

M

初态:ACC 被加数

第一条指令:[M]àX

执行加法指令:[ACC]+[M]àACC

如图7所示。

图7 加法(减法)操作过程图

②减法操作过程

指令:

M

初态: ACC中存在被减数

第一条指令:[M]àX

执行减法指令:[ACC]-[X]àACC

③乘法操作过程

指令

M

初态 ACC  被乘数

第一条指令(乘数):[M]àMQ

第二条指令(被乘数):[ACC]àX

第三条指令(累加之前先将ACC置零):0àACC

乘法指令(累加+移位):[X]×[MQ]àACC//MQ(高位//地位)

只有ACC送到X以后才可以做乘法,才能把0送到ACC中。但是第一条指令和第二条指令顺序可以互换。这个先后顺序是控制器来控制的。

图8 乘法(除法)操作过程

④除法操作过程

指令

M

初态 ACC  被除数

第一步指令:[M]àX

第二步指令:[ACC]÷[X]àMQ

(余数在ACC中)

MQ又叫乘商寄存器。注意:[X]指的是X对应地址的内容。

3)控制器的基本组成

控制器的功能:解释指令(从取指令、分析指令、取操作数……一直到完成指令);保证指令按序执行。

完成一条指令包括三步:①取指令PC(程序寄存器);②分析指令IR(指令寄存器);③执行指令CU。

PC中存放当前要执行指令的地址,指令地址是相邻的,因此PC具有计数功能,即把PC+1赋给PC。

IR存放当前欲执行的指令,控制单元可以把IR中的操作码取出来分析。操作控制就是CU完成。

具体框图如下:

图9 控制器的组成

4)主机完成一条指令的过程

①以取数指令为例

图10 取数指令的过程

第一步:取指令。要执行指令的地址是PC中,指令存在存储体中。首先PC把地址给MAR,然后给存储体,在控制器控制下,存储体中存储的指令取出来送入MDR中,然后当前指令的地址存在IR中,取指令完成。

第二步:分析指令。把IR中的指令的操作码部分送入CU,译码之后进行下面的操作。

第三步:执行指令。在控制器的控制之下,要把IR指令当中的地址部分送给存储器(MAR),以便取出数据。然后MAR把地址送给存储体重,存储体把数送入MDR,然后送入ACC。

②以存数指令为例

图11 存数指令的过程

第一步:取指令。首先PC把当前指令的地址发送给MAR,然后MAR又发送到存储体,在控制器控制下,存储体中存储的指令取出来送入MDR,MDR将该指令存入IR之中。

第二步:分析指令。把IR中的指令的操作码送给CU,由CU对指令进行分析,CU发出响应控制信号。

第三步:执行指令。首先在CU控制下,把IR中的指令的地址码送入MAR中,MAR送入存储体,告诉存储体现在有一个数据要存进来和地址是多少。然后在CU控制下,ACC中的数据被送入到MDR中,然后再送入到存储体中,在存储体中的地址按照MAR的要求来确定。

5ax2+bx+c程序的运行过程

①将程序通过输入设备送至计算机。

②程序首地址送入PC中。

③启动程序运行:

取指令PCàMARàMàMDRàIR,(PC)+1àPC

分析指令:OP(IR)àCU(OP是操作码)

执行指令:加:Ad(IR)àMARàMàMDRàACC。(Ad代表地址码的意思)

④打印结果

⑤停机