什么是程序
上一篇介绍了计算机是如何工作的。但同学们已经发现了使用计算器的过程十分麻烦。谁也不会为了求2+1去摆弄一大堆开关。现在想另外一个问题,现在要计算一万个加法。即便再简单,一个人算完一万条估计也会吐血,而且还不能保证全对。一般遇到这种大量的重复性的工作,机器的优势就体现出来了。因此,我们就要想办法让计算器自动计算,并在计算完后将结果保存在某个地方,以便我们可以获取。
继续以上一篇的2+1为例,按步骤指令和数据的顺序如下
顺序 | 数字 | 指令/数据 |
---|---|---|
0 | 000 | 指令 |
1 | 010 | 数据 |
2 | 001 | 指令 |
3 | 010 | 指令 |
4 | 001 | 数据 |
5 | 011 | 指令 |
在计算不同数据的加法时,只需要对其中数据部分做修改即可。比如想计算3+3只需要将表格修改成
因此计算一万条加法,我们只需要将以上序列复制一万份,然后修改其中的数据部分便可。
最终我们可以得到一连串数字,这些数字有的是指令有的是数据,如下:
而这种有一定顺序的,指令和数据的集合就叫做程序。
内存和控制器
有了程序之后,下一步就是让计算器自动工作了。因此引入两个新的设备,一个叫做控制器,一个叫做主存储器。
主存储器的作用是保存程序,并且可以供控制器读取指令和数据,并允许控制器将计算结果保存到主存储器中。我们最常见的主存储是内存。内存的特点是只能在通电的条件下保存程序。控制器从主存储器中读取程序的操作叫做读操作,将结果保存到主存储器的操作叫做写操作。对于内存的读写操作,分别叫做读内存和写内存
控制器作用是从主存储器中读指令和数据,然后将指令设置到计算器的控制端上,将数据设置到计算器的输入端上,并将计算器输出端的状态保存到主存储中。即代替人来完成设置计算器开关,和测量计算器输出端电压的工作。
最后整个装置如下图:
控制器和计算器合并在一起被称为CPU,即中央控制单元。实际上完整的CPU不仅仅包括控制器和计算器。CPU通常还有IO控制器,如控制键盘、鼠标、硬盘、显示器等。
CPU和主存储器通过总线链接。总线实际上就是一组导线,只不过它被嵌入在主板中。
指令集
上表只是举个例子。真实的CPU支持的指令可不仅仅有4个。而且同样的指令,对于不同的CPU对应的二进制数也不一样。比如,A品牌CPU的加法指令对应11110000,B品牌CPU的加法指令对应00001111。CPU支持多少指令和每个指令对应的二进制数被称为指令集。目前最流行的指令集有两个,一个是以Intel和AMD为代表的X86指令集(主要用于服务器和桌面系统平台),另一个是ARM指令集(主要用于移动端,如华为、骁龙、苹果的收集CPU)。