3.6 指令与程序概述

3.6.1 指令系统简介

指令系统是指计算机所能执行的全部指令的集合,它描述了计算机内全部的控制信息和“逻辑判断”能力。不同计算机的指令系统包含的指令种类和数目也不同。一般均包含算术运算型、逻辑运算型、数据传送型、判定和控制型、移位操作型、位(位串)操作型、输入和输出型等指令。指令系统是表征一台计算机性能的重要因素,它的格式与功能不仅直接影响到机器的硬件结构,而且也直接影响到系统软件,影响到机器的适用范围。

指令系统的发展经历了从简单到复杂的演变过程。早在20世纪50至60年代,计算机大多数采用分立元件的晶体管或电子管组成,其体积庞大,价格也很昂贵,因此计算机的硬件结构比较简单,所支持的指令系统也只有十几至几十条最基本的指令,而且寻址方式简单。

到20世纪60年代中期,随着集成电路的出现,计算机的功耗、体积、价格等不断下降,硬件功能不断增强,指令系统也越来越丰富。20世纪70年代以来,高级语言已成为大、中、小型机的主要程序设计语言,计算机应用日益普及。

一条指令就是机器语言的一个语句,它是一组有意义的二进制代码,计算机的指令格式与机器的字长、存储器的容量及指令的功能都有很大的关系。计算机是通过执行指令来处理各种数据的。为了指出数据的来源、操作结果的去向及所执行的操作,一条指令必须包含下列信息。

(1)操作码:它具体说明了操作的性质及功能。一台计算机可能有几十条至几百条指令,每一条指令都有一个相应的操作码,计算机通过识别该操作码来完成不同的操作。

(2)操作数的地址:CPU通过该地址就可以取得所需的操作数。

(3)操作结果的存储地址:把对操作数的处理所产生的结果保存在该地址中,以便再次使用。

(4)下条指令的地址:执行程序时,大多数指令按顺序依次从主存中取出执行,只有在遇到转移指令时,程序的执行顺序才会改变。为了压缩指令的长度,可以用一个程序计数器(Program Counter,PC)存放指令地址。每执行一条指令,PC的指令地址就自动+1(设该指令只占一个主存单元),指出将要执行的下一条指令的地址。当遇到执行转移指令时,则用转移地址修改PC的内容。由于使用了PC,指令中就不必明显地给出下一条将要执行指令的地址。

3.6.2 程序设计语言

程序设计语言用于书写计算机程序的语言。语言的基础是一组记号和一组规则。根据规则由记号构成的记号串的总体就是语言。在程序设计语言中,这些记号串就是程序。程序设计语言有3个方面的因素,即语法、语义和语用。语法表示程序的结构或形式,亦即表示构成语言的各个记号之间的组合规律,但不涉及这些记号的特定含义,也不涉及使用者。语义表示程序的含义,亦即表示按照各种方法所表示的各个记号的特定含义,但不涉及使用者。

自20世纪60年代以来,世界上公布的程序设计语言已有上千种之多,但是只有很小一部分得到了广泛的应用。从发展历程来看,程序设计语言可以分为以下4代。

1. 第一代机器语言

机器语言是由二进制0、1代码指令构成,不同的CPU具有不同的指令系统。机器语言程序难编写、难修改、难维护,需要用户直接对存储空间进行分配,编程效率极低。这种语言已经被渐渐淘汰了。

2. 第二代汇编语言

汇编语言指令是机器指令的符号化,与机器指令存在着直接的对应关系,所以汇编语言同样存在着难学难用、容易出错、维护困难等缺点。但是汇编语言也有自己的优点:可直接访问系统接口,汇编程序翻译成的机器语言程序的效率高。从软件工程角度来看,只有在高级语言不能满足设计要求,或不具备支持某种特定功能的技术性能(如特殊的输入输出)时,汇编语言才被使用。

3. 第三代高级语言

高级语言是面向用户的、基本上独立于计算机种类和结构的语言。其最大的优点是:形式上接近于算术语言和自然语言,概念上接近于人们通常使用的概念。高级语言的一个命令可以代替几条、几十条甚至几百条汇编语言的指令。因此,高级语言易学易用,通用性强,应用广泛。高级语言种类繁多,可以从应用特点和对客观系统的描述两个方面对其进一步分类。

(1)从应用角度分类

从应用角度来看,高级语言可以分为基础语言、结构化语言和专用语言。

① 基础语言

基础语言也称通用语言。它历史悠久,流传很广,有大量的已开发的软件库,拥有众多的用户,为人们所熟悉和接受。属于这类语言的有FORTRAN、COBOL、BASIC、ALGOL等。FORTRAN语言是目前国际上广为流行、也是使用得最早的一种高级语言,从20世纪90年代起,在工程与科学计算中一直占有重要地位,备受科技人员的欢迎。BASIC语言是在20世纪60年代初为适应分时系统而研制的一种交互式语言,可用于一般的数值计算与事务处理。BASIC语言结构简单,易学易用,并且具有交互能力,成为许多初学者学习程序设计的入门语言。

② 结构化语言

20世纪70年代以来,结构化程序设计和软件工程的思想日益为人们所接受和欣赏。在它们的影响下,先后出现了一些很有影响的结构化语言,这些结构化语言直接支持结构化的控制结构,具有很强的过程结构和数据结构能力。PASCAL、C、Ada语言就是它们的突出代表。

PASCAL语言是第一个系统地体现结构化程序设计概念的现代高级语言,软件开发的最初目标是把它作为结构化程序设计的教学工具。由于它模块清晰、控制结构完备、有丰富的数据类型和数据结构、语言表达能力强、移植容易,不仅被国内外许多高等院校定为教学语言,而且在科学计算、数据处理及系统软件开发中都有较广泛的应用。

C语言功能丰富,表达能力强,有丰富的运算符和数据类型,使用灵活方便,应用面广,移植能力强,编译质量高,目标程序效率高,具有高级语言的优点。同时,C语言还具有低级语言的许多特点,如允许直接访问物理地址,能进行位操作,能实现汇编语言的大部分功能,可以直接对硬件进行操作等。用C语言编译程序产生的目标程序,其质量可以与汇编语言产生的目标程序相媲美,具有“可移植的汇编语言”的美称,成为编写应用软件、操作系统和编译程序的重要语言之一。

③ 专用语言

专用语言是为某种特殊应用而专门设计的语言,通常具有特殊的语法形式。一般来说,这种语言的应用范围狭窄,移植性和可维护性不如结构化程序设计语言。随着时间的推移,科技的发展,被使用的专业语言已有数百种,应用比较广泛的有APL语言、Forth语言、LISP语言。

(2)从客观系统的描述分类

从描述客观系统来看,程序设计语言可以分为面向过程语言和面向对象语言。

① 面向过程语言:以“数据结构+算法”程序设计范式构成的程序设计语言,称为面向过程语言。前面介绍的程序设计语言大多为面向过程语言。

② 面向对象语言:以“对象+消息”程序设计范式构成的程序设计语言,称为面向对象语言。比较流行的面向对象语言有Delphi、Visual Basic、Java、C++等。

Delphi语言具有可视化开发环境,提供面向对象的编程方法,可以设计各种具有Windows内格的应用程序(如数据库应用系统、通信软件和三维虚拟现实等),也可以开发多媒体应用系统。

Visual Basic语言简称VB,是为开发应用程序而提供的开发环境与工具。它具有很好的图形用户界面,采用面向对象和事件驱动的新机制,把过程化和结构化编程集合在一起。它在应用程序开发中的图形化构思,无须编写任何程序,就可以方便地创建应用程序界面,且与Windows界面非常相似,甚至是一致的。

Java语言是一种面向对象的、不依赖于特定平台的程序设计语言,简单、可靠、可编译、可扩展、多线程、结构中立、类型显示说明、动态存储管理、易于理解,是一种理想的、用于开发Internet应用软件的程序设计语言。

4. 第四代非过程化语言

非过程化语言,编码时只需说明“做什么”,不需描述算法细节。第四代程序设计语言是面向应用,为最终用户设计的一类程序设计语言。它具有缩短应用开发过程、降低维护代价、最大限度地减少调试过程中出现的问题以及对用户友好等优点。真正的第四代程序设计语言应该说还没有出现。所谓的第四代语言,大多是指基于某种语言环境上具有非过程化语言特征的软件工具产品。

3.6.3 微型计算机工作过程

当我们用计算机来完成某项工作时,例如解决一个数学问题,必须先制定解决问题的方案,进而再将其分解成计算机能识别并能执行的一系列基本操作命令,这些操作命令按一定的顺序排列起来,就组成了“程序”。计算机所能识别并能执行的每一条操作命令就称为一条“机器指令”,而每条机器指令都规定了计算机所要执行的一种基本操作。因此,程序就是完成既定任务的一组指令序列,计算机按照规定的流程,依次执行一条条的指令,最终完成程序所要实现的目标。

由此可见,计算机的工作方式取决于它的两个基本能力:一是能存储程序,二是能自动执行程序。计算机是利用内存来存放所要执行的程序的,而CPU则依次从内存中取出程序的每条指令,加以分析和执行,直到完成全部指令序列为止。这就是计算机的存储程序控制方式的工作原理。

计算机不但能按照指令的存储顺序,依次读取并执行指令,而且还能根据指令执行结果进行程序的灵活转移,使得计算机具有判断思维的能力。

依据计算机的存储程序控制方式的工作原理设计了现代计算机的雏形,并确定了计算机的五大组成部分。冯·诺依曼的这一设计思想被誉为计算机发展史上的里程碑。虽然计算机发展很快,但存储程序原理仍然是计算机的基本工作原理,这一原理决定了人们使用计算机主要方式——编写程序和运行程序。