首页 理论教育计算机网络与信息安全:编程语言

计算机网络与信息安全:编程语言

【摘要】:由于计算机的配置不同,设计程序时所使用的语言也不同。目前,可用于程序设计的语言基本上可分为机器语言、汇编语言和高级语言。这些英文字符被称为助记符,用助记符表示的指令称为符号语言或汇编语言,用汇编语言编写的程序称为汇编语言程序。因此,机器语言和汇编语言均是面向“机器”的语言,缺乏通用性。

(一)编程语言概述

所谓程序设计,就是按照给定的任务要求,编写出完整的完成该任务的指令序列的过程。完成同一个任务,使用的方法或程序并不是唯一的。程序设计的质量将直接影响到计算机系统的工作效率、运行可靠性。由于计算机的配置不同,设计程序时所使用的语言也不同。目前,可用于程序设计的语言基本上可分为机器语言、汇编语言和高级语言。

1.机器语言

机器语言即指令的二进制编码,是一种能被计算机直接识别和执行的语言。由于机器语言与CPU紧密相关,所以,不同种类的CPU对应的机器语言也不同。用机器语言编写的程序不通用、不易读、易出错、难以维护,所以几乎不用机器语言编写程序。

2.汇编语言

为了克服机器语言的不足,人们选用了一些能反映机器指令功能的英文字符来表示机器指令。这些英文字符被称为助记符,用助记符表示的指令称为符号语言或汇编语言,用汇编语言编写的程序称为汇编语言程序。微控制器不能直接识别和执行汇编语言程序,需要将其转换成机器语言,这个转换过程称为“汇编”,完成汇编的专用程序称为“汇编程序”。

汇编语言是计算机能提供给用户的最快而又最有效的语言,也是能利用计算机所有硬件特性并能直接控制硬件的唯一语言。汇编语言程序效率高、占用存储空间小、运行速度件,用汇编语言能编写出最优化的程序,但缺点是可读性差、移植性差,且与机器语言一样,都脱离不开具体机器的硬件。因此,机器语言和汇编语言均是面向“机器”的语言,缺乏通用性。

3.高级语言

高级语言(High Level Language)不针对某种具体的计算机,通用性强,用高级语言编程不需了解计算机内部的结构和原理,这种语言的形式更接近英语,对于非计算机专业的人员比较易于掌握。高级语言程序易读、易编写,程序结构比较简洁,大量用于科学计算和事务处理。用高级语言编写的源程序同样必须“翻译”成为机器语言后,计算机才能执行,所用的“翻译”软件称为编译程序。编译程序比汇编程序复杂得多,需要占用较大容量的存储器,编译的过程也要花费更多的时间。

(二)汇编语言编程风格

在进行汇编语言程序设计时,采用清晰连贯的编程风格是很重要的。除了需要根据汇编指令的标准格式编写以外,还需关注以下几点。

1.注释

注释可以说是程序设计中非常重要的内容之一,尤其在汇编语言程序设计时。由于汇编指令固有的抽象特性,更要重视注释的作用。所有的代码行,除了代码本身的含义非常明确外,都要添加注释。

注释内容用“;”与助记符指令隔离,注释内容长度不限,换行时,头部仍要标注“;”。

2.标号的使用

在源程序中,几乎都要用到标号。标号由不多于8个ASCII字符组成,第一个字符必须是字母,标号不能使用汇编语言已定义的符号,如助记符、寄存器名等。同一个标号在一个独立的程序中只能定义一次。

标号通常代表地址,标号名应该选取为具有一定的含义、能够描述其表示的目的地址符号。例如,可以用诸如LOOP、BACK、MORE等标号代表跳转的目的地址;如果要反复检查一个状态标志,指令中可以用标号WAIT或AGAIN表示目的地址等。

3.子程序的使用

随着程序规模的增大,有必要采用“分而治之”的编程策略,即将大而复杂的任务划分为若干个小而简单的任务,这些小任务通过子程序的形式完成。这里主要提醒大家,在大程序设计中,根据程序功能模块设计具有通用性、层次性的子程序是一种良好的编程风格,并且每个子程序要有对应的注释块,在注释块中说明子程序的出入口参数、功能等。

4.堆栈的使用

随着子程序的嵌套使用,要跟踪哪些寄存器受到子程序调用的影响就会越来越困难,此时可以在子程序入口处,把可能受到影响的寄存器都保存到堆栈中,在子程序结束前,再从堆栈中恢复这些寄存器的值。

5.伪指令的使用

在汇编程序设计中,除了起始汇编伪指令和结束汇编伪指令不可缺少外,应尽可能运用其他伪指令,如赋值、定义字节、定义字等伪指令,以增加程序的可维护性和可读性。

(三)汇编程序中的伪指令(www.chuimin.cn)

用户将编辑好的汇编语言源程序通过专门的软件(称为汇编程序)汇编成对应的机器语言程序时,需要有了些专门的说明性语句,例如,指定目标程序或数据存放的起始地址、给一些指定的标号赋值、在内存中预留工作单元、表示源程序结束等指令,这些指令并不产生对应CPU操作的机器码,故称为伪指令(Pseudo-Instruction),也叫作指示性语句;相对应地,可以产生实质性操作的指令叫作指令性语句。指令性语句表示了CPU要进行的某种操作。

在汇编语言语句中常用符号表示某些量。符号名出现在不同的语句中所表示的含义不同。指示性语句中的符号名可以是变量名、地址等;而在指令性语句中符号名可以是标号、常数、变量等。

在指令性语句中,标号后面有一个冒号“:”,它实质上是指令的符号地址。并非每条指令性语句必须有标号。如果一条指令前面有标号,则程序中其他地方就可以把这个标号作为一个目标地址,可以使用转移指令跳转到该标号处。另外,在汇编语言程序中,标号也用作子程序的名字。

与指令性语句中的标号不同,伪指令语句的标号名后面不跟冒号。

下面介绍8051微控制器汇编程序中常用的几个伪指令。

1.起始汇编伪指令ORG(Origin)

指令格式:

ORG nn

指令功能:给程序起始地址或数据块起始地址赋值。nn是16位二进制数,代表程序或数据块在ROM中存放的起始地址。ORG指令总是出现在每段源程序或数据块的开始。例如:

表示主程序MAIN在ROM中的存放起始地址是0000H;子程序SUB1存放的起始地址是1000H。

2.赋值伪指令EQU(Equal)

指令格式:

字符名 EQU 数据或表达式

指令功能:把数据或表达式赋值给字符名。

例如:

DATA1 EQU 22H;给标号DATA1赋值22H

ADDR1 EQU 2000H;给标号ADDR1赋值2000H

AA EQU R1;R1与AA等值,则“MOV A,AAH”与“MOV A,R1”等价

3.定义字节伪指令DB(Define Byte)

指令格式:

[标号:] DB 字节常数或字符串

指令功能:将常数或字符串存入标号开始的连续存储单元中。例如:

ORG指定了TABLE标号的起始地址为2000H,汇编程序将数据串73H、04H、64H、20H、00H、FEH、41H、42H、43H依次存入TABLE开始的ROM单元中。