首页 理论教育 单片机原理与接口技术:伪指令和END指令

单片机原理与接口技术:伪指令和END指令

时间:2023-11-16 理论教育 版权反馈
【摘要】:伪指令不属于指令系统中的汇编语言指令,它是程序员发给汇编程序的命令,也称为汇编程序控制命令。“伪”体现在汇编后,伪指令没有相应的机器代码产生。伪指令是对“汇编”过程进行控制,或者对符号、标号赋值的“指令”。常用伪指令见表3-28。图3-17 源程序以及汇编后的目标程序在程序存储器中的安排1 END指令END指令用于终止源程序的汇编工作。例3-34:执行以下指令。

单片机原理与接口技术:伪指令和END指令

汇编语言源程序中应有向汇编程序发出的指示信息,告诉它如何完成汇编工作,这是通过伪指令来实现的。伪指令不属于指令系统中的汇编语言指令,它是程序员发给汇编程序的命令,也称为汇编程序控制命令。只有在汇编前的源程序中才有伪指令。“伪”体现在汇编后,伪指令没有相应的机器代码产生。伪指令具有控制汇编程序的输入/输出、定义数据和符号、条件汇编、分配存储空间等功能。

伪指令是对“汇编”过程进行控制,或者对符号、标号赋值的“指令”。在汇编过程中,不被翻译成机器码的指令。

常用伪指令见表3-28。

表3-28 常用伪指令

978-7-111-54295-7-Chapter03-47.jpg

伪指令不属于指令系统中的汇编语言指令,是控制汇编(翻译)过程的一些控制命令,它是程序员发给汇编程序的命令,也称为汇编程序控制命令。MCS-51系列单片机汇编语言,包含两类不同性质的指令。

1)基本指令:也就是指令系统中的指令。它们都是机器能够执行的指令,每一条指令都有对应的机器码。

2)伪指令:汇编时用于控制汇编的指令。它们都是机器不执行的指令,无机器码。

在一个源程序中,可多次用ORG指令,规定不同的程序段的起始地址。但是,程序地址必须由小到大排列,且不能交叉、重叠。对不同的程序段不能相同。如果不用ORG,则汇编得到的目标程序将从0000H地址开始。通常在源程序开头使用伪指令ORG 0000H。

例3-30:在内部RAM中以ADR1、ADR2开始的空间里已存放了被加数、加数(多字节的),它们的字节数长度为L,要求和放回到存放原被加数的空间中。

源程序以及汇编后的目标程序在程序存储器中的安排如图3-17所示。

978-7-111-54295-7-Chapter03-48.jpg

图3-17 源程序以及汇编后的目标程序在程序存储器中的安排

1 END指令

END指令用于终止源程序的汇编工作。源程序结束标志终止源程序的汇编工作。整个源程序中只能有一条END指令,且位于程序的最后。如果END出现在程序中间,其后的源程序将不进行汇编处理。

2 EQU指令

EQU指令是将一个数据或汇编符号赋予规定的字符名称,汇编程序会自动将EQU右边的数或汇编符号(地址或常数)赋给左边的字符名称。所以应先定义后使用,给予赋值。其值在整个程序有效,一般放在程序开始处。字符名称不是标号,不能用“:”作分隔符。字符名称、EQU、数据或汇编符号之间要用空格符分开。用EQU伪指令赋值的字符名称可以用作数据地址、寄存器、代码地址、位地址或者当作一个立即数来使用。给字符名称所赋的值可以是8位或16位的数据或地址。字符名称一旦被赋值,它就可以在程序中作为一个数据或地址使用。通过EQU赋值的字符名称不能被第二次赋值,即一个字符名称不可以指向多个数据或地址。字符名称必须先定义后使用,所以该语句通常放在源程序的开头。

例3-31:执行以下程序指令。

ORG 0000H

LJMP START

ORG 2000H

COUNT EQU 10H

START:MOV 10H,#20H;(10H)=20H

MOV 11H,#30H;(11H)=30H

MOV R0,#10H;(R0)=10H

MOV R1,#COUNT;(R1)=10H

MOV R2,COUNT;(R2)=20H

MOV R3,#COUNT+1;(R3)=11H

MOV R4,COUNT+1;(R4)=30H

SJMP $

END

执行后结果为:R0=10H,R1=10H,R2=20H,R3=11H,R4=30H。

3 DATA指令

DATA指令是将数据、地址、表达式赋值给规定的字符名称。字符名称、DATA与表达式之间要用空格符分开。

例3-32:执行以下指令。

FST DATA 30H;用FST代表30H

SEC DATA FST*2+8;用SEC代表表达式

ORG 0000H

MOV A,FST;A←(FST)

MOV R1,#SEC;R1←SEC

SJMP $

END

可见,DATA伪指令可将一个表达式赋给字符名称,所定义的字符变量也可出现在表达式中。

4 DB指令

DB指令定义了字节常数或数表。表明从该标号地址单元开始定义一个或若干个字节的数。用于从指定地址开始在程序存储器连续单元中定义字节数据。

例3-33:执行以下指令。

ORG 1000H

TAB:DB-2H,-4H,66H;从1000H单元开始存放数

DB 78H,9AH,00H;换行,仍要先写DB

功能:从指定的地址单元开始,定义若干个8位内存单元的数据,数据与数据间用“,”来分隔。若数据表首有标号,数据依次存放到以左边标号为首地址的存储单元中,这些数可以采用二进制十进制十六进制和ASCII码等多种形式表示。其中,ASCII码用引号“”或单引号‘’包括住。

例3-34:执行以下指令。(www.xing528.com)

ORG 0100H

TAB:DB 34,34H

DB 0101B

DB 'a'

DB '2'

以上指令经汇编后,从ROM地址100H开始的相继地址单元中赋值如下:

(100H)=22H;为十进制34对应的十六进制数

(101H)=34H;为十六进制

(102H)=05H;为二进制0101B对应的十六进制数

(103H)=61H;“a”的ASCII码

(104H)=32H;‘2’的ASCII码

5 DS指令

DS指令指定从标号地址单元开始,保留指定数目的字节单元作为存储区,供程序运行使用。预留单元数量由DS语句中“表达式”的值决定。

例如,TAB2:DS 100;通知汇编程序从TAB2开始保留100个字节单元,以备源程序另用。

例3-35:执行以下指令程序段。

ORG 2000H

DS 08H

DB 30H,8AH;则30H从2008H单元开始存放

特别注意:DB、DW和DS指令只能对程序存储器有效,不能对数据存储器使用。

ORG 0100H

DS 7

CLR A

汇编后从100H单元开始,保留7个字节的内存单元,然后从107H放置指令CLR A的机器码0E4H,即(107H)=E4H。

6 BIT指令

BIT指令用于给字符名称赋以位地址,位地址可以是绝对位地址,也可以是符号地址。一般用来将位地址赋给标号名称,以方便用户编程和阅读程序。

例如:

M0 BIT 20H.0

MOV C,M0

FT1 BIT P0.0

FT2 BIT ACC.1

把P0.0和ACC.1的位地址分别赋以字符名称FT1和FT2。在以后的编程中FT1、FT2可作为位地址用。

7 DW指令

DW指令定义字常数或ASCII字符,从指定的地址单元开始,定义若干个16位数据。因为16位数据必须占用两个字节,所以高8位先存入,占低位地址;低8位后存入,占高位地址。不足16位的用0填充。

例如:

ORG 0100H

TAB:DW 12

DW 45H

DW 3343H

以上指令经汇编后,从ROM的100H起的单元依次存放00,0CH,00,45H,33H,43H,共占6个单元。

DW用于从指定的地址开始在程序存储器的连续单元中定义字数据。

例3-36:执行以下指令。

ORG 2000H

DW 1246H,7BH,10

汇编后:

(2000H)=12H;第1个字

(2001H)=46H

(2002H)=00H;第2个字

(2003H)=7BH

(2004H)=00H;第3个字

(2005H)=0AH

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

我要反馈