Skip to content

1.3计算机的硬件

1.3.1 硬件组成要素

使用打算盘来说明计算机的主要组成和工作原理。给定一个算盘、一张带有横格的纸、一支笔,要求计算y=ax+b-c。下面将解题步骤记录在带有横格的纸带上:

表1.3解题步骤和数据记录在横格纸上

行数 解题步骤和数据 说明
1 取数 (9)->算盘 (9)表示第9行的数a,下同
2 乘法 (12)->算盘 完成a*x,结果在算盘上
3 加法 (10)->算盘 完成a*x+b,结果在算盘上
4 减法 (11)->算盘 完成y=a*x+b-c,结果在算盘上
5 存数 y->13 算盘上的y值记到13行
6 输出 将算盘上的y值写出来给人看
7 停止
8
9 a 数据
10 b 数据
11 c 数据
12 x 数据
13 y 数据

在电子计算机中:

**运算器**相当于算盘

**存储器**相当于纸

**控制器**相当于人的大脑(控制着整个计算过程)

      |<--> 存储器
      |
系    |<-->  运算器
统    |
总    |<-->  控制器
线    |
      |<--> 适配器
            |   |
            |   |
      输入设备   输出设备

CPU = 运算器 + 控制器

1.3.2 运算器

参见:ALU

字长:运算器的长度

1.3.3 存储器

参见:Computer memory

1.3.4 控制器

参见: Control unit

控制器的任务是从内存中取出解题步骤加以分析,然后执行某种操作;

NOTE: 读取指令和读取数据都是由控制器来完成的;所以控制器需要了解指令的格式

1. 计算程序

表1.4计算y=ax+b-c的程序

指令地址 操作码 地址码 指令操作内容 说明
1 取数 9 (9) -> A 将存储器9号地址的数读入到运算器A
2 乘法 12 (A) * (12) -> A 完成a*x,结果保留着运算器A
3 加法 10 (A) + (10) -> A 完成a*x+b,结果保留着运算器A
4 减法 11 (A) - (11) -> A 完成a*x+b-c,结果保留着运算器A
5 存数 13 A->13 运算器A中的结果y送入到存储器13号地址
6 打印
7 停止
8
数据地址 数据 说明
9 a
10 b
11 c
12 x
13 y

表1.4是一个非常好的例子,这个表中展示了**指令**,数据,CPU的运算逻辑等关键内容;

NOTE : 从表1.4中可以看出,运算器的操作数需要通过**取数指令**从内存中加载到**运算器**中;表1.4还展示处理,运算器在执行运算指令,如**乘法指令**,**加法指令**等的时候,产生的运算结果是保留在运算器中,需要执行**存数指令**才能够将**运算器**中的数据写入到内存中;这其实非常是符合Load–store architecture的。

2. 指令的形式

每条指令需要明确地告诉控制器,从存储器的哪个单元取数,并进行何种操作;这样一来,可知指令的内容由两部分组成:操作的性质和操作数的地址;前者为**操作码**,后者为**地址码**;

操作码|地址码

指令的**操作码**和**地址码**都可以使用**二进制代码**来进行表示,这就是**指令的数码化**;指令**数码化**以后,就看可以和数据一样存入到**存储器**中(Stored-program computer);存储器的任何位置既可以存放数据也可以存放指令,不过一般将指令和数据分开存放。控制器**依据存储的程序来控制全机协调地完成计算任务叫做**程序控制

按照Von Neumann architecture的思想,指令和数据(如果不清楚两者的差别,去看表1-4)存放在同一个存储器中,**控制器**按照stored program的**地址顺序**进行执行;

按照Harvard architecture的思想,将指令和数据分别存放在两个存储器中;

一台计算机通常有几十种基本**指令**,从而构成该计算机的**指令系统**。**指令系统**不仅是**硬件设计**的依据,而且是**软件设计**的基础。因此**指令系统**是衡量**计算机性能**的一个重要指标。

3. 控制器的基本任务

由表1-4可知,计算机在进行计算的时候,**指令**必须是按照一定的**顺序**一条接着一条的进行;

控制器**的基本任务就是按照计算机程序所排的指令序列,先从**存储器**中取出一条指令放到**控制器**中,对该**指令**的**操作码**由**译码器**进行分析判断,然后根据**指令性质(即该指令要做什么运算),执行这条指令;接着从存储器中取出第二条指令,再执行第二条指令。以此类推。

通常,将取指令的这段时间叫做**取指周期**,而把执行指令的一段时间叫做**执行周期**。因此控制器反复交替地处于取指周期和执行周期之中;

每取出一条指令,控制器中的**指令计数器**就加1,从而为下一条指令做好准备,这就是为什么指令在存储器中是顺序存放的原因;

4. 指令流和数据流

我们使用bit来作为计算机的最小信息单位。

当CPU向存储器送入或者从存储器中取出信息时,往往是存取byte(字节)和Word(字)等较大信息单位,而不是bit;通常将组成一个Word的二进制位数叫做**字长**;

NOTE: 这应该是我们需要进行地址对齐的原因所在;

NOTE: 这部分内容在4.2.3 **指令字长度**章节也进行了介绍;

由于计算机使用的信息既有指令又有数据,所以**计算机字**既可以代表**指令**,也可以代表**数据**;如果某字代表的是要处理的数据,则称为**数据字**;如果某字为一条指令,则称为**指令字**;

我们看到,指令和数据统统都存放在内存中,从形式上来看,它们都是二进制数码,似乎很难分清楚哪些是**指令字**,哪些是**数据字**;那这就引出了一个问题:控制器是如何区分开哪些是**指令字**,哪些是**数据字**的?答案为:取指周期**中,从**内存**读出的**信息流**是**指令流,它流向**控制器**;执行周期**中从内存中读出的**信息流**为**数据流,它由内存流向**运算器**;显然,某些指令进行过程中,需要两次访问内存,一次是取指令,另一次是取数据,如表1.4中取数、乘数、加法、减法、存数指令就是如此;

1.3.5 适配器与输入输出设备

计算机系统中必须有**总线**,系统总线**是构成计算机系统的骨架,是多个系统部件之间进行数据传输的公共通路;借助**系统总线,计算机在系统部件之间实现传送地址、数据和控制信息;