您的位置 首页 报告

51单片机汇编伪指令

0、ALTNAME功能:这一伪指令用来自定义名字,以替换源程序中原来的保留字,替换的保留字均可等效地用于子程序中。格式:ALTNAME保留字自定

0、 ALTNAME

功用:这一伪指令用来自界说姓名,以替换源程序中本来的保存字,替换的保存字均可等效地用于子程序中。

格局:ALTNAME保存字自界说名

留意:自界说名与保存字之间首字符有必要相同。

1、BIT

功用:指令用于将一个位地址赋给指定的符号名。

指令格局:符号名 BIT 位地址经BIT 指令界说过的位符号名不能更改。

例如:X_ON BIT 60H ;界说一个肯定位地址

X_OFF BIT 24h.2 ;界说一个肯定位地址
BIT---界说位指令

格局: 字符称号 BIT位地址

功用用于给字符称号界说位地址。

SPK BIT P3.7 经界说后,答应在指令顶用SPK替代P3.7。

2、 BSEG
功用:肯定挑选指令指令BSEG挑选肯定位寻址数据段

指令格局如下:BSEG [AT 肯定地址表达式]

3、CODE

功用:用于将程序存储器ROM 地址赋给指定的符号名。

指令格局:符号名 CODE 表达式

例如:RESET CODE 00H
4、CSEG
功用:肯定挑选指令CSEG挑选肯定代码段;

指令格局如下:CSEG [AT 肯定地址表达式]

5、DATA(BYTE)

功用:指令用于将一个内部RAM 的地址赋给指定的符号名

指令格局:符号名 DATA 表达式

数值表达式的值应在0~255 之间,表达式有必要是一个简略再定位表达式。

例如:REGBUF DATA(BYTE) 40H

PORT0DATA(BYTE) 80H

DATA与BYTE的差异:

DATA与BYTE是相类似的伪指令。当程序运转到DATA伪指令界说的符号名时,该符号名将被显现;而由BYTE界说的符号名不被显现。
6、DB
功用:DB伪指令用于界说一个接连的存储区,给该存储区的存储单元赋值。该伪指令的参数即为存储单元的

值,在表达式中对变元个数没有约束,只需此条伪指令能包容在源程序的一行内,其格局为:标号: DB 表

达式只需表达式不是字符串,每一表达式值都被赋给一个字节。核算表达式值时按16位处理,但其成果只取

低8位,若多个表达式呈现在一个DB伪指令中,它们有必要以逗号分隔。表达式中有字符串时,以单引号“”

作分隔符,每个字符占一个字节,字符串不加改动地被存在各字节中,并不将小写字母转换成大写字母。

例如:DB 00H 01H 03H 46H

DB This is a demo!

7、DBIT

功用:在内部数据区的BIT 段以位为单位保存存储空间。

指令格局:[标号:] DBIT 数值表达式其操作类似于DB。
8、DS
功用:DS为界说存储内容的伪指令,用它界说一个存储区,并用指定的参数填满该存储区。DS伪指令包括两

个变元,榜首个变元界说了存储区的长度的字节数,在汇编时,汇编程序将越过这些单元把其它指令汇编在

这些字节之后,因此在运用DS伪指令时榜首个变元不行生机第二个变元表明在这些单元中真入什么值,第

二个变元能够生机生机时这些字节将不处理。下例中0173处有一条DS 9,则空出9个字节,下一第指令被汇

编到017C处;在017C处空出1BH个单元,在这些字节中被27H所填充。DS指令的格局如下:

标号: DS 表达式1,表达式2

表达式1界说了存储区的长度(以字节为单位)。这个变元不能省掉。表达式2是可挑选的,它的值低8位

用以填入所界说的存储区。若省掉则这部分存储单元不处理。

例: 0000 04 INC A

0001 DS 9

000A 04 INC A

000B DS 1BH,27H

0026 04 INC A

DS ---预留存储区指令

格局:〔标号:〕 DS 表达式值
其功用是从指定地址开端,界说一个存储区,以备源程序运用。

存储区预留的存储单元数由表达式的值决议。

TMP: DS 1

从标号TEP地址处开端保存1个存储单元(字节)。

9、DSEG
功用:肯定挑选指令DSEG内部肯定数据段

指令格局如下:DSEG [AT 肯定地址表达式]

10、DW
功用:DW为以字节为单元(十六位二进制)来给一个的存储区赋值,

其格局为: 标号: DW 表达式
例如: 0000 3035 D46B DW 12341,54379,10110100101110B
11、END
功用:END句子标志源代码的完毕,汇编程序遇到END句子即中止运转。若没有END句子,汇编将报错。END语

句有一个参数,能够是数值0,也能够是表达式,

其格局是: 标号: END 表达式

它的值便是程序的地址而且作为一个特别的记载写入HEX文件。若这个表达式省掉,HEX文件中其值便是0。

12、EQU(=)

存器名赋给一个指定符号名。

指令格局: 符号名 EQU(=)表达式 符号名 EQU(=) 存放器名

经过EQU 指令赋值的符号可在程序的其它当地运用,以替代其赋值。

例如:MAX EQU 2000

则在程序的其它当地呈现MAX,就用2000 替代。

表达式有必要是一个简略再定位表达式。
用 EQU 指令赋值今后的字符名,能够用作数据地址、代码地址、位地址或许直接作为一个当即数运用。
13、EXTRN

EXTRN 是与PUBLIC 配套运用的,要调用其它模块的函数,就有必要先在模块前声明。

指令格局:EXTRN 段类型(符号,符号······)

例如:EXTRN CODE (TONGXING,ZHUANHUAN)

调用外部TONGXING和ZHUANHUAN 程序。

14、IDATA

IDATA 指令用于将一个直接寻址的内部RAM 地址赋给指定的符号名。

指令格局:符号名 IDATA 表达式

例如:FULLER IDATA 60H
15、IF

条件伪操作格局:

IF表达式

[程序块1]

[ELSE]

[程序块2]

ENDIF

当IF指令中的表达式为真时,被汇编的代码段是程序块1;当IF指令中的表达式为假时,被汇编的代码段是

程序块2。在一个条件结构中,仅有一个代码段被汇编,其它的则被疏忽。

16、INCLUDE

功用:运用此伪指令可将一个源文件刺进到当时源文件中一起汇编,终究成为一个完好的源程序。

格局:INCLUDE[驱动器名:][路径名]文件名

留意:1、文件名中若没有扩展名,则体系默许是。ASM(该文件有必要是能翻开的)。

2、被刺进的源程序中不能包括END伪指令,不然汇编会中止运转。被链接文件的每一行,

在程序清单中以“I“最初。

3、链接伪指令可有8级嵌套,若要求嵌套的多,则要修正DOS中的CONFIG。SYS文件的FILES参 数。

17、ISEG

功用:肯定挑选指令ISEG内部直接寻址肯定数据段idata

指令格局如下:ISEG [AT 肯定地址表达式]
18、MACRO

宏指令格局

[宏指令名]MACRO[形式参数,。。。]

代码段

ENDM

宏调用格局

[宏指令名][真实参数,。。。]
19、LIST
它们的格局为:

$LIST
功用:LIST伪指令使汇编时主生程序清单,但即便不必该指令,汇编也会主动发生清单。但假如运用了NOLIST伪指令后需求持续主生清单则有必要运用LIST伪指令。
20、NAME

功用:用来给当时模块命名。

指令格局:NAME 模块名

例如:NAME TIMER

界说一个模块名为TIMER 的模块。
21、NOCODE

其格局为$NOCODE

NOCODE伪指令使得在汇编时,条件汇编程序结构中那些真值为假的条件不发生清单。有关条件汇编结构鄙人

面介绍。假如没有这条伪指令,汇编将主生一切条件下的清单,不管其真值是否为真。可是假的条件,不产

生方针码。而NOCODE伪指令使汇编清单中只列出那些由汇编程序用到的部分,因此,当运用NOCODE伪指令

时,程序清单与源程序并非逐行对应。
22、NOLIST

它们的格局为:
$NOLIST

功用:NOLIST伪指令使汇编时不发生清单,一切包括此伪指令及在这条伪指令之后的句子都不进入列表文

件。当不需求任何列表文件,而且不需求显现程序清单时,能够在发动汇编时不加.L附加项,且在源代码

的榜首行加上NOLIST指令。运用NOLIST伪指令与附加项/L不同之处是NOLIST伪指令可加在源程序中,与LIST

伪指令合作运用,使源程序中某些部分不发生清单。而不加附加项/L则不发生任何程序清单。不过,不管有

无$NOLIST伪指令,程序在汇编时检查到的过错都将在屏幕上显现犯错的源代码行及过错信息
23、PAGE
功用:PAGE伪指令用于构成新的一中界说一面的行数。其格局为:$PAGE 表达式
若表达式缺省则开端新的一页,若有表达式,则每页行数从头界说。汇编开端时页长为66行。一页中除出页外,剩下55行用于打印源程序,这一格局适用于规范打印纸。假如变元值小于66,页内可打印的源代码即将相应削减。页长最小值为12。若小于12时,每页内除页上只打印一行源程序。页长变元是16位字节,因此每页最长可界说到65535行,这时分页打印变为接连打印,在屏幕显现程序清单或在卷筒纸上打印程序清单时,常常运用接连打印,假如在发动汇编时用/N选项,页长便是65535。
24、PUBLIC

功用:声明可被其它模块运用的公共函数名。

指令格局:PUBLIC 符号 [,符号,符号[,······]]

PUBLIC 后可跟多个函数名,用逗号格开。每个函数名都有必要是在模块内界说过的。

例如:PUBLIC INTER,_OUTER

其间_OUTER 可供C 调用。
25、RSEG

功用:再定位段挑选指令为RSEG,用于挑选一个已在前面界说过的再界说段作为当时段,

指令格局:RSEG 段名

段名有必要是在前面声明过的再定位段。

例如:

DATAS SEGMENT DATA :声明一个再定位DATA 段

CODES SEGMENT CODE ;声明一个再定位CODE 段

BSEG AT 60H RSEG CODES ;挑选前面声明的再定位CODE 段作为当时段。


肯定段挑选指令
CSEG---肯定代码段
DSEG---内部肯定数据段
XSEG---外部肯定数据段
ISEG ---内部直接寻址数据段
BSEG---肯定位寻址数据段
格局:
CSEG[AT 肯定地址表达式]
DSEG[AT 肯定地址表达式]
XSEG[AT 肯定地址表达式]
ISEG [AT 肯定地址表达式]
BSEG[AT 肯定地址表达式]


括号内是可选项,用来指定当时肯定段的基地址。 CSEG AT 0000H AJMPMAIN

26、SEGMENT

功用:SEGMENT 指令用来声明一个再定位段和一个可选的再定位类型。

指令格局:再定位段型 SEGMENT 段类型(再定位类型) 段类型用于指定所声明的段将处的储存器地址空间,可用的段类型有CODE/XDATA/DATA/IDATA 和BIT。

例如: FLAG SEGMENT BIT PONITER SEGMENT IDATA

27、SET

功用:SET 指令类似于EQU 指令,不同的是SET 指令界说过的符号可重界说。

指令格局:符号名 SET 表达式 符号名 SET 存放器名

例如:MAX SET 2000 MAX SET 3000
28、TTILE
功用:TITLE伪指令用于在列表文件页头树立一个标题,其格局为: $TITLE 标题行

这儿标量行便是将呈现在页头的标量与一般的字符串界说不同。这儿标量行不加引号。汇编从$TITLE 之后的榜首个可打印字符开端,到回车符之间的字符串作为标量标量的最大长度是60个字符,基标量行省掉,则标题行为空行。若TITLE伪指令在一页,它阐明的标量行包括在本页,不然,标题将呈现鄙人页页头。

29、XDATA

功用:XDATA 指令用于将一个外部RAM 的地址赋给指定的符号名。 指令格局:符号名 XDATA 表达式

例如:RSEG XSEG1 ;挑选一个外部数据段 ORG 100H

MING DS 10 ;在标号MING 处保存10 个字节 HOUR XDATA MING+5

MUNIT XDATA HOUR+5

30、XSEG

功用:肯定挑选指令XSEG外部肯定数据段xdata 指令格局如下:

XSEG [AT 肯定地址表达式]
31、USING指令

USING指令告诉汇编器运用8051的哪一个作业存放器组。
格局:USING表达式(值有必要为0-3,默许值为0。)
USING0 运用第0组作业存放器。
32、ORG指令

ORG指令用来改动汇编器的计数器,然后设定一个新的程序开端地址。
格局:ORG表达式 表达式有必要是肯定或简略再定位表达式。
ORG0000H AJMPMAIN 设定 MAIN 程序的开端地址为 0000H。
数据界说伪操作格局:

[ 标号: ] 数据界说名[ 表达式1,表达式2,… ] 其间数据界说名可为DB,DW,DS等。

如表-7所示,数据界说伪操作的意义及阐明。 表-5 段界说伪操作

代码段(CSEG) 包括由处理器所履行的程序。段名可缺省。有方针代码生成。

数据段(DESG) 由内部作业存放器的处理器的RAM组成。用来对程序运用的数据地址赋符号名,大多以ORG,DATA,BYTE,WORD,EDNS等组成。无方针码生成。

外部段(XSEG) 由外部作业存放区和RAM组成。运用方法同数据段。无方针码生成。

功用段(FSEG) 由特别存放器方位组成(如:输入/输出部件,计时器,中止操控和接连的存放器部件接口等)。无方针代码生成。

段(BSEG) 由一些独立的位组成,能够用布尔函数完成。 该段地址被解释为位地址。无方针代码生成。

表-6 程序分段的类型符号


标号(Label) 字节型操作数(Byte)字型操作数(Word)

代码段CSEG

数据段DSEG

外部段XSEG

功用段FSEG

段BSEG


阐明: (1)在不同的段中类型符号不同;

(2)字节型操作数(Byte)一般经过DATA指令赋给符号; 字型操作数 一般经过WORD指令赋给符号;

(3)假如各段顶用BYTE赋值,则在各段中符号全以S表明;在SIM51模仿/调试中的符号区显现功用中,对BYTE赋值的将被越过。

(4)在各段中,位类型能够用BIT指令赋给。

表-7 数据界说伪操作

数据界说名 意义 阐明

DB 用于界说一个字节包括的值 表达式不是字符串时,每个表达式赋给一个字节,是字符串时,用单引号 “ “作为分隔符。

DW 用于界说一个字(16位) 每个表达式占16位。假如表达式中的存贮内容为字符串,只取最终两个字符。若字

符串只要一个字符,高字节置“0“。

DS 界说一个存贮区 一般用在代码段中,作为程序的一部分。若用在数据段,外部段,则作为方位标志运用。

表-8 列表伪操作

伪指令 意义及格局 阐明

$TITLE 给源程序指定一个标题 标题不加 ““,其最大长度

格局: $TITLE [标题行] 60个字符。若标题行省掉, 本来界说的标题行报废。

$SUBTTL 给源程序指定一个副标题 副标题不加 ““,其最大长度60字符。若副标题行省掉,

格局: $SUBTTL [副标题行] 本来界说的副标题行报废。

$PAGE 用于构成或界说新的一页或行数 汇编时页长为66行(适合于格局: $PAGE [表达式] 规范打印纸) 。表达式最大为65535,最小为12, 表达式缺省,则从新的一页开端。

$LIST 使源程序汇编时,发生程序清单 汇编时无此指令照样发生清单。 格局: $LIST

$NOLIST 使源程序汇编时不发生程序清单 格局: $NOLIST

$NOCODE 源程序汇编时,条件汇编程序值 没有此指令汇编时,不管其值是为假的不发生清单。真、假的条件都不发生方针码。 格局: $NOCODE

假如在汇编中没有REG52。INC的包括文件,以下的程序犯错:


NAME ASMTEST
$include(LOOKUPTABLE.INC)

;$include(REG52.INC) ;一定要空上一行,不然有错
?PR?TSEG?ASM_TEST SEGMENT CODE
PUBLIC ASM_LOOKUP_ROUTINE

RSEG ?PR?TSEG?ASM_TEST
using 0

ASM_LOOKUP_ROUTINE:
MOV DPTR , #TABLE
MOV A , #4
MOVC A , @A+DPTR
CLR P0.0
RET
END


过错提示是:ASM_TEST.ASM(15): error A45: UNDEFINED SYMBOL 程序中加上了这个文件包括后就对了。

在汇编程序中包括文件的界说


NAME ASMTEST
$include(LOOKUPTABLE.INC)

$include(REG52.INC) ;一定要空上一行,不然有错
?PR?TSEG?ASM_TEST SEGMENT CODE
PUBLIC ASM_LOOKUP_ROUTINE

RSEG ?PR?TSEG?ASM_TEST
using 0

ASM_LOOKUP_ROUTINE:
MOV DPTR , #TABLE
MOV A , #4
MOVC A , @A+DPTR
CLR P0.0
RET
END

假如两个include没有空行,会呈现以下的过错提示:

assembling ASM_TEST.ASM…
ASM_TEST.ASM(3): error A34: , EXPECTED
ASM_TEST.ASM(3): error A34: , EXPECTED
ASM_TEST.ASM(3): error A34: , EXPECTED
ASM_TEST.ASM(3): error A9: SYNTAX ERROR
ASM_TEST.ASM(3): error A34: , EXPECTED
ASM_TEST.ASM(14): error A45: UNDEFINED SYMBOL
ASM_TEST.ASM – 6 Error(s), 0 Warning(s).


从C中拜访坐落汇编函数中的表格


TEST.C: 包括调用汇编函数的C程序。

ASM_TEST.ASM: 包括运用查表的汇编函数。
LOOKUPTABLE.INC: 包括查表。
每个文件的内容如下面所示。为了将查表界说在一个固定的地址0x1000,翻开工程-选项(Project-Options),挑选Target-BL51 Locate。在代码段(Code Segment)字段中输入段名(开端地址)。例如在本例中,你应该输入LOOKUPTABLE(0x1000)。关于你的程序,你或许需求从MAP文件(*.M51)中查找段名。

LOOKUPTABLE.INC

LOOKUPTABLE SETMENT CODE
RSEG LOOKUPTABLE

TABLE: DB 02H, 03H, 04H, 05H, 06H, 07H, 08H, 09H

ASM_TEST.ASM

NAME ASMTEST
$include(LOOKUPTABLE.INC)

?PR?TSEG?ASM_TEST SEGMENT CODE
PUBLIC ASM_LOOKUP_ROUTINE

RSEG ?PR?TSEG?ASM_TEST
using 0

ASM_LOOKUP_ROUTINE:

MOV DPTR, #TABLE ; DPTR指向查表的开端方位
MOV A, #4 ; A是从查表的开端方位的偏移量
MOVC A, @A + DPTR ; 把第A+1项送到累加器中

RET
END

TEST.C

extern void ASM_LOOKUP_ROUTINE(void);
void main(void)
{
ASM_LOOKUP_ROUTINE(); // 调用查表子程序

while(1);
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ceping/baogao/261958.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部