4.2.1 汇编语言源程序的编辑和汇编

4.2.1 汇编语言源程序的编辑和汇编

1.汇编语言指令格式

汇编语言源程序由指令语句、伪指令语句和宏指令语句构成。MCS-51单片机汇编语言的指令语句格式为:

[标号:]指令助记符[操作数1][操作数2][操作数3][;注释]

括号内的部分可以根据实际情况取舍。每个字段之间要用分隔符分隔,可以用作分隔符的符号有空格、冒号、逗号、分号等,如

(1)标号

标号是指令语句的符号地址,用于引导对该语句的非顺序访问,通常可以作为转移指令的操作数。标号不能使用保留字,如指令助记符、寄存器符号名称、伪指令等;标号位于语句的开头位置,由字母、数字或其他特定字符组成,以字母开头,标号后面必须使用冒号作为分隔符。

(2)指令助记符

指令助记符表示指令执行的功能,一般是该指令功能的英文缩写。它是汇编语句中唯一不可空缺的部分。

(3)操作数

操作数用于提供参与运算的数据或进行操作的数据或这些数据的地址。在一条汇编语句中操作数字段可能是空缺的,也可能包括一项,还可能包括两项或三项。各操作数间以逗号分隔。

操作数字段的内容可能包括工作寄存器名、特殊功能寄存器名、符号名、标号名、符号“$”(表示程序计数器PC的当前值)、常数和表达式等。

若操作数为十六进制数字,其末尾必须用“H”说明,若十六进制数以字母A、B、C、D、E、F开头,其前面必须添加一个“0”进行引导说明,如0AFH。若操作数为二进制数字,其末尾必须用“B”说明,如01100011B。若操作数为十进制数字,末尾可以加“D”说明,若末尾不加说明,该数字默认为十进制数字,如,98D、98均表示十进制数98。

(4)注释

注释不属于汇编语句的功能部分,它只是对语句的说明。注释字段可以增加程序的可读性,有助于编程人员的阅读和维护。注释字段必须以分号“;”开头,长度不限,当注释一行书写不下时,可以换行接着书写,但换行时应注意在开头使用分号“;”。

2.汇编

在汇编语言中,用助记符代替操作码,用地址符号或标号代替地址码。这样用符号代替机器语言的二进制码,就把机器语言变成了汇编语言,所以汇编语言也称为符号语言。用汇编语言编写的程序,单片机不能直接识别,必须将汇编语言翻译成机器语言才行。这种把汇编语言翻译成机器语言的过程称为汇编。

3.汇编语言常用的伪指令

伪指令是汇编语言程序能够识别并对汇编过程进行某种控制的汇编命令。它不是单片机执行的指令,所以没有对应的可执行目标码,汇编后产生的目标程序中不会出现伪指令。汇编语言程序定义了许多伪指令,一些常用的伪指令如表4-1所示。

表4-1 常用伪指令

(1)起始地址设定伪指令ORG

格式为:

ORG表达式

该指令的功能是向汇编程序说明下面紧接的程序段或数据段存放的起始地址。表达式通常为16进制地址,也可以是已定义的标号地址。例如,对于

它规定的是该段程序的机器码从地址8000 H单元开始存放。

在每一个汇编语言源程序的开始,都要设置一条ORG伪指令来指定该程序在存储器中存放的起始位置。若省略ORG伪指令,则该程序段从0000H单元开始存放。在一个源程序中,可以多次使用ORG伪指令规定不同程序段或数据段存放的起始地址,但要求地址值由小到大依序排列,并且不允许空间重叠。

(2)汇编结束伪指令END

格式为:

该指令的功能是结束汇编。

汇编程序遇到END伪指令后则结束汇编。处于END之后的程序,汇编程序将不处理。

(3)字节数据定义伪指令DB

格式为:

[标号:]DB字节数据表

该指令的功能是从标号指定的地址单元开始,在程序存储器中定义字节数据。

字节数据表可以是一或多字节数据、字符串或表达式。该伪指令将字节数据表中的数据按照从左到右的顺序依次存放在指定的存储单元中,一个数据占一个存储单元。例如,

把字符串中的字符以ASCII码的形式存放在连续的ROM单元中。又例如,

把6个数转换为十六进制表示(FEH、FCH、FAH、05H、0AH、12H),并连续地存放在6个ROM单元中。

该伪指令常用于存放数据表格。如要存放显示十六进制的字形码,可以用多条DB指令完成,如

(4)字数据定义伪指令DW

格式为:

[标号:]DW字数据表

该指令的功能是从标号指定的地址单元开始,在程序存储器中定义字数据。该伪指令将字或字表中的数据根据从左到右的顺序依次存放在指定的存储单元中。应特别注意:16位的二进制数,高8位存放在低地址单元,低8位存放在高地址单元。

例如,

汇编后,结果为:

(1400 H)=12 H,(1401H)=3FH,(1402 H)=00H,(1403 H)=8CH。

(5)赋值伪指令EQU

格式为:

符号名EQU表达式

该指令的功能是将表达式的值或特定的某个汇编符号定义为一个指定的符号名,如

上述程序的功能是,将22 H单元开始存放的12个无符号数求和,并将结果存入21 H单元中。

(6)位地址符号定义伪指令BIT

格式为:

符号名BIT位地址表达式

该指令的功能是将位地址赋给指定的符号名,其中,位地址表达式可以是绝对地址,也可以是符号地址,如

位地址符号用伪指令BIT定义后,不能再重新定义和改变。