计算机系统:基于x86+Linux平台
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.2.1 程序设计语言和翻译程序

程序设计语言可以分成不同抽象层的、适用于不同领域的、采用不同描述结构的,等等,目前大约有上千种,从抽象层次上来分,可以分成高级语言低级语言两类。

使用特定计算机规定的指令格式而形成的0/1序列称为机器语言,计算机能理解和执行的程序称为机器代码机器语言程序,其中的每条指令都由0和1组成,称为机器指令。如图1.3中所示,主存单元0~4中存放的0/1序列就是机器指令。

最早人们采用机器语言编写程序。但机器语言程序的可读性很差,也不易记忆,给程序的编写和阅读带来极大的困难。因此,人们引入了一种机器语言的符号表示语言,通过用简短的英文符号和机器指令建立对应关系,以方便程序员编写和阅读程序。这种语言称为汇编语言(assembly language),机器指令对应的符号表示称为汇编指令。如图1.3中所示,机器指令“1110 0110”对应的汇编指令为“load r0,6#”。显然,使用汇编指令编写程序比使用机器指令编写程序要方便得多。但是,因为计算机无法理解和执行汇编指令,所以用汇编语言编写的汇编语言源程序必须先转换为机器语言程序,才能被计算机执行。

每条汇编指令表示的功能与对应的机器指令一样,汇编指令和机器指令都与特定的机器结构相关,因此,汇编语言和机器语言都属于低级语言,它们统称为机器级语言(machine level language)。

因为每条指令的功能非常简单,所以使用机器级语言描述程序功能时,需描述的细节很多,不仅程序设计工作效率很低,而且同一个程序不能在不同结构的机器上运行。为此,程序员多采用高级程序设计语言编写程序。高级程序设计语言(high level programming language)又称高级编程语言,是指面向算法设计的、较接近于日常英语书面语言的程序设计语言,如BASIC、C/C++、Fortran、Java等。它与具体机器结构无关,可读性比机器级语言好、描述能力更强,一条语句可对应几条或几十条指令。例如,对于图1.3中所示的程序,机器级语言表示需要5条指令,而高级编程语言只需一条语句“z=x+y;”即可。

不过,因为计算机无法直接理解和执行高级编程语言程序,所以需要将高级语言程序转换成机器语言程序。这个转换过程可由计算机自动完成,进行这种转换的软件统称为翻译程序(translator)。通常,程序员借助“程序设计语言处理系统”来开发软件。任何一个语言处理系统中都包含翻译程序,它能把一种编程语言表示的程序转换为等价的另一种编程语言表示的程序。被翻译的语言和程序分别称为源语言源程序,翻译生成的语言和程序分别称为目标语言目标程序。翻译程序有以下三类。

汇编程序(assembler):也称汇编器,实现将汇编语言源程序翻译成机器语言目标程序。

解释程序(interpreter):也称解释器,实现将源程序中的语句按其执行顺序逐条翻译成机器指令并立即执行。

编译程序(compiler):也称编译器,实现将高级语言源程序翻译成汇编语言或机器语言目标程序。

图1.6给出了实现两个相邻数组元素交换功能的不同层次语言之间的等价转换过程。

图1.6 不同层次语言之间的等价转换

如图1.6所示,交换数组元素v[k]和v[k+1]的功能可以在高级语言源程序中直观地用三条赋值语句实现;在经编译后生成的汇编语言源程序中,可用4条汇编指令实现该功能,其中两条是取数指令lw(load word),另外两条是存数指令sw(store word);在经汇编后生成的机器语言程序中,对应的机器指令是特定格式的二进制代码,例如,第一条lw指令对应的机器代码为“100011 00010 01111 0000 0000 0000 0000”,这是一条MIPS指令集系统结构中的指令,其中,高6位“100011”为操作码,随后5位“00010”为通用寄存器编号2,再后面5位“01111”为另一个通用寄存器编号15,最后16位为立即数0。CPU能够通过逻辑电路直接执行这种二进制表示的机器指令。执行指令时通过控制器对指令操作码进行译码,以解释成控制信号来控制数据的流动和运算。例如,控制信号ALUop=add可以控制ALU进行加法操作,RegWr=1可以控制将结果数据写入某个通用寄存器。

小贴士

本书中多处提到MIPS架构或MIPS指令集系统结构,这里的MIPS是指在20世纪80年代初期由斯坦福大学Hennessy教授领导的研究小组研制出来的一种RISC处理器。MIPS为Microcomputer without Interlocked Pipeline Stages(无内锁流水线微处理器)的缩写。在通用计算方面,MIPS R系列微处理器曾经用于构建高性能工作站、服务器和超级计算机系统。在嵌入式方面,MIPS K系列微处理器在1999年以前曾是世界上用得最多的处理器,应用领域覆盖游戏机、路由器、激光打印机、掌上电脑等方面。目前MIPS处理器所属公司已经宣布放弃继续设计MIPS架构,将投入RISC-V架构处理器的设计。

表示指令速度的计量单位MIPS(Million Instructions Per Second),其含义是平均每秒钟执行多少百万条定点操作指令。注意这两个名称的内涵截然不同。