汇编程序中的伪指令并不对应实际的机器码,因此它们不会被执行。伪指令的主要作用是对汇编过程进行控制,例如定义程序的起始地址、结束标志、赋值等。下面是一些常见伪指令及其解决方法:
ORG(Origin)
功能:规定该伪指令下面的目标程序的起始地址。
格式:`ORG 16位地址`
举例:`ORG 0080H` 表示下面的程序从地址0080H开始。
注意:ORG命令按出现的顺序其后的地址必须增大,且不能重叠,否则编译器可能报错。
END
功能:汇编结束命令,对于在END之后的汇编指令不予处理。
格式:`END`
举例:
```assembly
ORG 0030H
START:
; 程序的开始
SER_INT0:
RETI
SER_TIMER0:
RETI
END
```
注意:一个汇编程序可以有多个ORG伪指令,但只可以有一个END指令,否则编译器会报错。
EQU(Equate)
功能:将一个常数或一个特定的符号赋给规定的字符名称。
格式:`字符名称 EQU 数或特定的符号`
举例:
```assembly
CC EQU R1
DD EQU 11H
```
注意:当汇编程序遇到EQU前面的字符名称后,便会用EQU后面的数(或特定的符号)代替。
LOCAL
功能:在宏定义体中,如果存在标号,则该标号要用伪指令LOCAL说明为局部标号,避免标号重定义的错误。
格式:`LOCAL 标号1,标号2,……`
举例:
```assembly
LOCAL _start, _end
```
注意:LOCAL必须是伪指令MACRO后的第一条语句,并且在MACRO和LOCAL之间不允许有注释和分号标志。
REPT
功能:把一组语句重复指定的次数,该重复次数由伪指令后面的数值表达式来确定。
格式:`REPT 表达式`
举例:
```assembly
REPT 5
; 重复5次的语句
```
注意:用伪指令REPT来实现左边重复块的汇编结果如下:
```assembly
Table LABEL
```
DB(Define Byte)
功能:定义字节变量,每个表达式的值占一个字节。
格式:`变量名 DB, 表达式1[,表达式2][,表达式3....]`
举例:
```assembly
Message DB 'Hello, World!', 0
```
注意:每个表达式的值域对于无符号整数为0--255,对于有符号整数位-128--127。
DW(Define Word)
功能:定义字变量,每个表达式的值占一个字。
格式:`变量名 DW, 表达式1[,表达式2][,表达式3....]`
举例:
```assembly
Array DW 10, 20, 30
```
注意:每个表达式的值域对于无符号整数为0--65535,对于有符号整数位-32768--32767。
DD(Define Double Word)
功能:定义双字变量,每个表达式的值占两个字。
格式:`变量名 DD, 表达式1[,表达式2][,表达式3....]`
举例:
```assembly
Struct DD 10, 20, 30, 40
```
通过了解这些伪指令的功能和格式,可以更好地编写和组织汇编程序。伪指令虽然不直接参与程序的运行,但它们在汇编过程中起着至关重要的作用,确保程序的结构和逻辑正确无误。