首页 理论教育 常用伪指令|单片机的汇编与C语言应用

常用伪指令|单片机的汇编与C语言应用

时间:2023-10-23 理论教育 版权反馈
【摘要】:不同汇编语言的伪指令有所不同,但基本内容相同。在汇编语言源程序的开始,通常都用1条ORG伪指令来实现规定程序的起始地址。另外,用EQU伪指令对某标号赋值后,该符号的值在整个程序中不能再改变。此时利用EQU伪指令就可以避免这些问题的发生。

常用伪指令|单片机的汇编与C语言应用

不同汇编语言的伪指令有所不同,但基本内容相同。下面介绍MCS-51单片机中常用的几种伪指令。

1.ORG汇编起始地址定位伪指令

格式:ORG n

其中,n通常为绝对地址,可以是十六进制数、标号或表达式。

功能:规定编译后的机器代码的起始位置。

在汇编语言源程序的开始,通常都用1条ORG伪指令来实现规定程序的起始地址。如不用ORG规定,则汇编得到的目标程序将从0000H开始。例如:

在一个源程序中,可多次使用ORG指令,来规定不同的程序段的起始地址。但是,地址必须由小到大排列,地址不能交叉、重叠。

2.END汇编结束伪指令

格式:[标号:]END[表达式]

功能:汇编语言源程序的结束标志,它放在汇编语言源程序的末尾,表明源程序的汇编到此结束,汇编程序不予处理END后的任何指令。在整个源程序中只能有一条END命令,且位于程序的最后。

3.EQU赋值伪指令(赋值命令)

格式:字符名称x EQU赋值项n

其中,赋值项n可以是常数、地址、标号或表达式。

功能:将赋值项n的值赋予字符名称x。程序中凡出现该字符名称x就等同于该赋值项n,其值在整个程序中有效且不能再改变。在使用字符名称时,必须先赋值后使用,以后可以通过使用该符号来使用相应的项。

注意:“字符名称”与“标号”的区别是“字符名称”后无冒号,而“标号”后面有冒号。另外,用EQU伪指令对某标号赋值后,该符号的值在整个程序中不能再改变。

有时,一个表达式在程序中会多次出现,重复书写可能较为繁杂,易出错;另外,若要对该表达式进行变动,那么必须在程序中找到每一个表达式,一一做出修改,稍有不慎,就会遗漏,引出麻烦。此时利用EQU伪指令就可以避免这些问题的发生。EQU给后面的表达式起一个叫做符号名的名字,这样,程序中凡是需要用到该表达式的地方,就都可以用这个名字代替了。

例如:TEST EQU 3000 H;表示标号TEST=3000 H,在汇编时,凡是遇到标号TEST时,均以3000 H来代替。

4.DATA数据地址赋值伪指令

格式:字符名称x DATA表达式n

其中,n可以是数据或地址,也可以是包含所定义的“字符名称x”在内的表达式,但不能是汇编符号。

功能:把表达式n的值赋值给左边的字符名称x。

例如,下面的汇编程序段

MOV R2,ADDR

MOV R3,#ADDR

ADDR DATA 45H

则(45 H)单元内容送R2,而R3=45H。

由上可见,DATA和EQU的功能都是将表达成值赋给标号,但两者有区别。

DATA与EQU的主要区别是:

(1)EQU定义的“字符名称”必须先定义后使用,而DATA定义的“字符名称”没有这种限制,DATA可以先使用后定义。因此,DATA伪指令通常用在源程序的开头或末尾。

(2)EQU可把汇编符号赋给字符名称,DATA则不能。

(3)DATA可把表达式的值赋给字体名称,EQU则不能。(www.xing528.com)

DATA常在程序中定义数据地址;EQU常在程序中定义字符数据。

5.DB定义字节伪指令

格式:[标号:]DB x1,x2,…,xn;xi可以是8位数据、ASCII码、表达式,也可以是括在单引号内的字符或字符串。两个数据之间用逗号“,”分隔。

功能:在程序存储器的连续单元中定义字节数据,可以定义1个字节,也可定义多个字节,多个字节时两两之间用逗号间隔,定义的多个字节在存储器中是连续存放的。在定义时前面可以带标号,定义的标号在程序中是起始单元的地址。xi为数值常数时,取值范围为00H~FFH;xi为ASCII码字符时,要使用单引号‘’,以示区别;xi为字符串常数时,其长度不应超过80个字符。

【例3-32】 ORG 0500 H

TAB1:DB 45H,73,01011010B,‘5’,‘A’

汇编后,各个数据在存储单元中的存放情况如图3-22所示。注意:73,01011010B的十六进制数为49H、5AH;字符‘5’、‘A’的ASCII码分别为35 H、41 H。

6.DW定义字(双字节)伪指令

格式:[标号:]DW x1,x2,…,x n

其中,xi为16位数值常数,占两个存储单元,先存高8位(存入低位地址单元中),后存低8位(存入高位地址单元中)。

功能:从指定的地址开始,在程序存储器的连续单元中定义16位的数据字。即将双字节数据或数组顺序存放在从标号指定地址单元开始的存储单元中

图3-22 数据在存储单元中的存放情况

图3-23 数据在存储单元中的存放情况

【例3-33】 ORG 1000 H

TAB2:DW 1C26H,55H,0AH

汇编后,各个数据在存储单元中的存放情况如图3-23所示。注意:单字节数据55H、0AH需要转化为双字节数据存放,它们分别为0055 H、000AH。

7.DS定义预留存储空间伪指令

格式:[标号:]DS n

其中,n可以是数据,也可以是表达式。

功能:从标号指定地址单元开始,预留n个存储单元,汇编时不对这些存储单元赋值。保留存储空间的目的是供程序运行时存放数据。

【例3-34】 ORG 3000H

汇编后,存储单元中的分配情况如图3-24所示。

8.BIT定义位地址符号伪指令

格式:字符名称x BIT位地址n

其中,位地址n可以是绝对地址,也可以是符号地址。

功能:用于给位地址赋予字符名称,即将位地址n的值赋予字符名称x。程序中凡出现该字符名称x就代表该位地址。

【例3-35】 QA bit F0

图3-24 存储单元中的分配情况

QB bit P1.7

定义后,在程序中位地址F0、P1.7就可以通过QA和QB来使用。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈