说明:本章节仅限于作者个人对王道考研书的学习总结和研究,内容如侵权,联系我删除!!!
1.2.1 计算机系统的组成
计算机=软件+硬件。
硬件指的是看得见,摸得着的物理设备。
软件指的是在硬件上运行的程序、数据、文档。
对某一个功能来说,既可以用软件实现,也可以用硬件实现,称为软硬件在逻辑上等效。
硬件实现 | 软件实现 | |
某功能 | 使用频繁。硬件成本低,高效。 | 灵活性高、效率相对硬件而言低。 |
1.2.2 计算机硬件的基本组成
1.早期的冯诺依曼机
最先提出“存储程序”。指的是将指令以代码的形式事先输入计算机的主存储器,然后按其在存储器中的首地址执行程序的第一条指令,以后就按该程序的规定顺序执行其他指令,直至程序结束。
特点:
计算机硬件系统由运算器、存储器、控制器、输入设备、输出设备组成。 |
指令和数据以同等地位存储在存储器中,并可按地址寻址。 |
指令和数据均用二进制表示 |
指令=操作码+地址码。操作码指出操作类型,地址码指出操作数的地址。 |
指令在存储器内按顺序存放。通常,指令是顺序执行的,在特定条件下可根据运算结果或根据设定条件改变执行顺序。 |
以运算器为中心。输入/输出设备通过运算器与存储器传送数据。 |
(图来源于王道课程的pdf截图)
早期的冯诺依曼计算机结构,如果将数据存入到存储器中或者从存储器中取数据到输出设备,也要经过运算器,这操作显得似乎没有必要。
现代的冯诺依曼计算机以存储器为中心:
(图来源于王道课程pdf的截图)
3.计算机的功能部件
部件名称 | 功能 | 示例 |
输入设备 | 将程序和数据以机器所能识别和接受的信息形式输入计算机。 | 键盘、鼠标、扫描仪、摄像机。 |
输出设备 | 将计算机处理的结果以人能接受的形式或其他系统所要求的信息形式输出 | 显示器、打印机 |
存储器 | 存放程序和数据。 | 内存,外存(固态硬盘、机械硬盘)。CPU访问的是内存,如果要访问外存的程序和数据,则需要把程序和数据放到内存中,CPU才能访问。 |
运算器 | 计算机执行部件,用于算术运算和逻辑运算。核心部件是ALU | |
控制器 | 计算机的指挥中心,指挥各部件自动协调地进行工作。控制器=PC+IR+CU. |
1.主存储器
主存储器中包括存储体、地址寄存器(MAR)、数据寄存器(MDR)。
(图片来源于王道课程pdf的截图)
存储体 | 存储体由多个存储单元组成,一个存储单元由多个存储元件组成,一个存储元件存放一位二进制信息,0或者1。 |
MAR | 用于寻址,位数对应着存储单元的个数。MAR=10,说明有个存储单元。MAR的长度与PC的长度相等。 |
MDR | 位数与存储字长相等,因为MDR的放的是从存储单元中存/取的内容。 |
存储单元 | 每个存储单元存放一串二进制代码 |
存储字 | 存储单元中存放的二进制代码叫做存储字。 |
存储字长 | 存储字的长度,称为存储字长。 |
存储元 | 存储二进制的电子元件,每个存储元存放1bit。即要么0要么1。 |
容易混淆:1字节(Byte)=8bit,即1B=8b。而1个字(word)即代表存储字长。
现代计算机中早已把MAR和MDR集成到CPU中。
2.运算器
运算器包含通用寄存器、程序状态寄存器(PSW)。
(图片来源于王道课程pdf的截图)
功能 | 示例 | |
通用寄存器 | 用于暂存操作数和中间结果 | ACC(累加器)、MQ(乘商寄存器)、X(操作数寄存器)、LX、BR。 |
程序状态寄存器(PSW) | 存放ALU运算得到的一些标志信息或处理机的状态信息。如检查结果是否溢出、是否进位或借位、结果是否为负。 |
加 | 减 | 乘 | 除 | |
ACC | 被加数、和 | 被减数、和 | 乘积高位 | 被除数、余数 |
MQ | 乘数、乘积低位 | 商 | ||
X | 加数 | 减数 | 被乘数 | 除数 |
(乘积高位和乘积低位指的是两个16位数相乘,结果可能是32位的,这时,结果的左边称为乘积高位,右边称为乘积低位。如0xFF*0xFF = 0xFE01,0xFE是乘积高位,0x01是乘积低位)
整个运算器中ALU属于最贵,因为比起ACC、MQ、X的设计来说,ALU是更为复杂的,ALU要控制电路通知ACC、MQ、X直接进行加减乘除。
3.控制器
控制器由程序计数器(PC)、指令寄存器(IR)、控制单元(CU)组成。
功能 | |
PC | 存放当前欲执行指令的地址。可自动加1(形成下一条指令)。与主存的MAR之间有一条通路。 |
IR | 存放当前指令,内容来自MDR。 |
CU | IR的指令中的操作码OP(IR)送至CU,分析指令并发出各种微操作命令序列。地址码Ad(IR)送至MAR,取操作数。 |
计算机CPU内部工作过程
执行以下代码:
void main(int arg[]) {
int a = 2, b = 3, c = 1, y = 0;
y = a * b + c;
}
计算机软件的分类
定义 | 举例 | |
系统软件 | 一组保证计算机系统高效、正确运行的基础软件,通常作为系统资源提供给用户使用。 | 操作系统、数据库管理系统、语言处理程序、分布式软件系统、网络软件系统、标准库程序、服务性程序。 |
应用软件 | 为用户解决某个应用领域中的各类问题而编制的程序。 | 科学计算类程序、工程设计程序、数据统计与处理程序。 |
功能 | |
机器语言 | 计算机唯一识别的语言。即二进制。 |
汇编语言 | 是位于机器语言上层的一层语言,一般高级语言如C、C++通过编译后变成汇编语言,汇编语言每一句都描绘了机器语言。 |
高级语言 | 形如C++\C\Java,更接近自然语言。 |
从源程序到可执行文件。
步骤 | 内容 | 结果 |
1预处理阶段 | 对源程序中以字符#开头的命令进行处理。如将#include后的文件内容插入程序文件。 | hello.i |
2编译阶段 | 对hello.i文本文件进行编译。 | hello.s |
3汇编阶段 | 将hello.s翻译成机器语言指令。 | hello.o |
4链接阶段 | 将多个可重定位目标文件和标准库函数合并成为一个可执行目标文件,即可执行文件。 | hello |
也有的语言或者系统可以直接从高级程序经过编译阶段编译成机器语言。