计算机基本原理—语言与算法

使用计算机就要给计算机输入指令,早期给计算机的指令是写在穿孔纸带上的,如图1所示 。

计算机基本原理—语言与算法

文章插图
   图1 早期的计算机语言
纸带匀速通过一个光源,光线透过纸带的穿孔后被接收器接收,产生一个电压,遇到纸带无孔时,光线就被纸带遮蔽,纸带后面的接收器就不产生电压,这样就将“100100”形式的二进制信号输给了计算机 。这个发明源于图灵1936年的设想——图灵机(Turing machine) 。在计算机发明者名单中,图灵是名气最大的 。由美国计算机协会(ACM)于1966年设立的图灵奖(Turing Award),至今仍然是计算机科学领域的最高荣誉 。
计算机基本原理—语言与算法

文章插图
   尽管计算机的输入设备从穿孔纸带一路发展到硬盘、键盘和鼠标,但其基本原理还是给计算机输入“100100”形式的机器码 。人们为了方便与计算机交流,发明了计算机操作系统 。其实它就是预装在计算机存储器里面的一套机器码,计算机一旦通电启动,这套机器码首先被读入计算机内存并被执行,它使得计算机CPU、输入输出设备、存储器等等初始化,提供各类硬件功能接口供应用程序调用 。人们借助计算机操作系统和预装的一些“工具软件”,用计算机完成诸如写文件、绘图表、做计算等简单工作 。如果要使计算机完成千差万别的复杂工作,就必须给计算机输入专门的指令——计算机程序 。由于计算机只能认识机器码,而机器码又实在太难学了,因此科学家就发明了“计算机语言”,人们可以借助这种语言编写计算机读得懂的程序 。
最接近机器码的计算机语言是汇编语言(Assembly language) 。在汇编语言中,用简单英文单词构成的助记符(Mnemonics)代替机器码,再加上地址符号(Symbol),组成如图2所示的计算机程序 。
计算机基本原理—语言与算法

文章插图
   图2 一个汇编语言计算机程序片段
图中左边绿色字是程序的注释,它们不参加运行 。
我们再举一个计算机程序的例子:完成任意三个数从小到大重新排列 。比如,任意给计算机输入三个数:65.73、21.01、1.022,要求计算机将它们从小到大排列成:1.022、21.01、65.73 。首先,我们必须设计一个算法如下:
第一步
比较第一个数与第二个数的大小 。假如第一个数大于第二个数,则将它们调换顺序,否则就不调换顺序 。现在第一个数是65.73,它大于第二个数21.01,因此将它们调换顺序 。现在三个数排列为:21.01、65.73、1.022;
第二步
再比较第第二个数与第三个数的大小 。假如第二个数大于第三个数,则将它们调换顺序,否则就不调换顺序 。现在第二个数是65.73,它大于第三个数1.022,因此将它们调换顺序 。现在三个数排列为:21.01、1.022、65.73;
第三步
再比较第一个数与第二个数的大小 。假如第一个数大于第二个数,则将它们调换顺序,否则就不调换顺序 。现在第一个数是21.01,它大于第二个数1.022,因此将它们调换顺序 。现在三个数排列为:1.022、21.01、65.73,完成任务 。
图3是一个用Fortran语言编写的计算机程序,它将输入计算机的任意三个数从小到大排序 。
计算机基本原理—语言与算法

文章插图
   图3 一个完整的Fortran语言计算机程序
同样,图中左边绿色字是程序的注释,它们不参加运行 。将这个计算机程序输入计算机后运行,只要在计算机屏幕上用键盘任意敲入3个数,计算机立即就会将此三个数从小到大重新排列,并且显示在计算机屏幕上 。当然,三个数字的重新排序非常容易,人们一目了然就可以完成 。如果经常要将成千上万的数字重新排序,就是一件困难的工作 。这时编一个计算机程序,就可以比人工既快又省事 。这个例子也说明,计算机必须依赖人类提供的算法完成任务,或者说人类完成创造性工作,计算机帮助人类完成耗时费力的工作,这基本上是长久以来的传统观点 。但是,未来计算机会发展出与人类并驾齐驱甚至超越人类的智能吗?那时的计算机能够独立完成创造性工作吗?
咱们再回到计算机语言问题 。比较图2与图3,读者马上会觉得:前者犹如天书一般根本无法读懂,而后者的每一行都与英语近似 。人们通常将前者称为计算机底层语言,将与人类语言近似的计算机语言称为计算机高级语言 。高级语言不仅仅是与人类语言近似,而且在不同CPU之间可以通用 。反之,底层语言所编写的计算机程序随着CPU硬件的改变必须改变 。无论是计算机底层语言还是高级语言,它们都要靠被称为“编译器”的计算机程序,将其“翻译”成计算机读得懂得机器码 。


推荐阅读