本文主要内容:计算机语言发展与计算机层次结构
约1500字
早期的计算机,只有机器语言
机器语言,就是直接用0、1代码表示的语言,用户必须用0和1来编写程序,用二进制的代码来表示一切需求
这对程序员的要求很高,他们必须对计算机的硬件配置和指令系统非常熟悉,才能写出能正确在机器上执行的指令
比如,当你想打印输出ax+b的结果
首先,你要知道计算机的指令集中,取数操作的操作码、乘操作的操作码、加操作的操作码、存数操作的操作码、打印操作的操作码各是多少
然后,你要知道x、a、b在计算机主存中的地址编号各是多少
接着,你要知道计算机的指令字长是多少,从而得出要写的指令
如果取数操作的操作码为000001,数据x在主存的8号位置,机器指令字长为16位
那么你要表示“取数x”,需要写出指令:0000010000001000
(说明:指令字长16位减去6位操作码,还剩下10位作为地址码。地址号8转换为二进制是1000,补全到10位为0000001000)
显然,这不仅难度很大,而且在写的过程中也很容易出错,非常麻烦
但是唯物主义辩证法告诉我们,凡事都有两面性。用机器语言编程还是有好处的,好就好在把程序交给机器后就可以直接执行,不需要翻译或编译
注意:实际机器是只看得懂二进制代码(即0和1)的
20世纪50年代,汇编语言出现了
汇编语言中开始用符号表示操作,比如加操作用ADD表示,乘操作用MUL表示,指令或数据所在存储单元的地址也用符号表示
此时程序员编程就比用机器语言简单多了
但是,我在上面提到过了:机器只能看懂二进制代码,即机器语言
所以,汇编语言写出来的程序,必须被“翻译”成机器语言,再交给机器执行。这个翻译的过程是由机器中的汇编程序完成的
此时,一台计算机可以被看成是由两台机器构成:程序员把写好的汇编语言程序送给上层的机器M2,M2中的汇编程序将其翻译成机器语言程序后,送给下层的机器M1,机器语言程序在M1中可以直接执行
请读者注意区分“汇编语言程序”和“汇编程序”,二者是不同的,“汇编程序”的作用是把汇编语言程序翻译成机器语言程序
这里所说的的M2并不是一台实际的机器,只是从外界看来,仿佛存在这么一台具有翻译功能的机器,我们称之为虚拟机器
汇编语言虽然大大提高了编程体验,但从本质上看,它仍然是面向机器的,每一条语句都和机器语言一一对应。它对程序员的要求还是很高,而且还是依赖于机器的硬件和指令系统构成,在不同机器之间没有通用性
20世纪60年代,出现了面向问题的高级语言
现在大家耳熟能详的C++、python、Java等都是高级语言。用高级语言写出的程序,就是经常人们听到的源程序
同样地,高级语言最终也需要被翻译成机器语言才能被机器执行,由此我们又衍生出新一层虚拟机器M3——用户将编写好的高级语言程序输入给M3,M3把高级语言翻译成汇编语言输入M2,或直接翻译成机器语言输入M1
将高级语言翻译成机器语言是由翻译程序完成的,翻译程序又分为两种:编译程序和解释程序。编译程序是将源程序全部翻译完后再交给M1执行,翻译程序是翻译一句执行一句
此时可以看到,随着软件和计算机科学的发展,实际机器M1向上延伸出了各级虚拟机器,构成了三级层次结构
实际上,在虚拟机器M2和实际机器M1之间,还有一层由操作系统软件构成的虚拟机器。操作系统控制和管理计算机的全部硬件和软件,是软硬件的分界面。操作系统的功能要通过其控制语言来实现,由汇编语言翻译得到
实际机器M1还可向下延伸出微指令机器M0。M1中的每一条机器指令,可以被翻译成一组微指令,即一个微程序,微程序是可以由硬件直接执行的
微指令由二进制代码表示,每一位的0或1都代表一个控制信号,逐条执行一条机器语言对应的一组微指令,就相应地完成了这条机器指令的全部操作
由此,我们得到了常见的五级计算机系统层次结构:
在目前计算机研究中,硬件研究的主要对象是M0和M1,软件研究的主要对象是操作系统以上的各级虚拟机器。但需要注意的是,软硬件的界面划分不是一成不变的,比如人们把某些软件永恒地存于只读存储器中,称之为固件
M4还可以往上延伸出应用语言虚拟机器M5,这一层是为满足某种用途而专门设计的,如用于人工智能的语言,有兴趣的朋友可以自己去探索~
有收获的话,就关注我叭!!!