功用:
格局:
留意:
1、BIT
功用:指令用于将一个位地址赋给指定的符号名。
指令格局:符号名 BIT 位地址经BIT 指令界说过的位符号名不能更改。
例如:X_ON
格局:
功用用于给字符称号界说位地址。
SPK
2、 BSEG
指令格局如下:BSEG [AT 肯定地址表达式]
3、CODE
功用:用于将程序存储器ROM 地址赋给指定的符号名。
指令格局:符号名
例如:RESET
指令格局如下:CSEG [AT 肯定地址表达式]
5、DATA(BYTE)
功用:指令用于将一个内部RAM 的地址赋给指定的符号名
指令格局:符号名 DATA
数值表达式的值应在0~255 之间,表达式有必要是一个简略再定位表达式。
例如:REGBUF
DATA与BYTE的差异:
DATA与BYTE是相类似的伪指令。
值,在表达式中对变元个数没有约束,只需此条伪指令能包容在源程序的一行内,其格局为:标号: DB 表
达式只需表达式不是字符串,每一表达式值都被赋给一个字节。核算表达式值时按16位处理,但其成果只取
低8位,若多个表达式呈现在一个DB伪指令中,它们有必要以逗号分隔。表达式中有字符串时,以单引号“”
作分隔符,每个字符占一个字节,字符串不加改动地被存在各字节中,并不将小写字母转换成大写字母。
例如:DB 00H 01H 03H 46H
7、DBIT
功用:在内部数据区的BIT 段以位为单位保存存储空间。
指令格局:[标号:] DBIT 数值表达式其操作类似于DB。
个变元,榜首个变元界说了存储区的长度的字节数,在汇编时,汇编程序将越过这些单元把其它指令汇编在
这些字节之后,因此在运用DS伪指令时榜首个变元不行生机第二个变元表明在这些单元中真入什么值,第
二个变元能够生机生机时这些字节将不处理。下例中0173处有一条DS 9,则空出9个字节,下一第指令被汇
编到017C处;在017C处空出1BH个单元,在这些字节中被27H所填充。DS指令的格局如下:
表达式1界说了存储区的长度(以字节为单位)。这个变元不能省掉。表达式2是可挑选的,它的值低8位
用以填入所界说的存储区。若省掉则这部分存储单元不处理。
例: 0000 04 INC A
DS ---预留存储区指令
格局:
存储区预留的存储单元数由表达式的值决议。
TMP:
从标号TEP地址处开端保存1个存储单元(字节)。
9、DSEG
指令格局如下:DSEG [AT 肯定地址表达式]
10、DW
其格局为:
句有一个参数,能够是数值0,也能够是表达式,
其格局是: 标号: END 表达式
它的值便是程序的地址而且作为一个特别的记载写入HEX文件。若这个表达式省掉,HEX文件中其值便是0。
12、EQU(=)
存器名赋给一个指定符号名。
指令格局:
经过EQU 指令赋值的符号可在程序的其它当地运用,以替代其赋值。
例如:MAX EQU 2000
则在程序的其它当地呈现MAX,就用2000 替代。
表达式有必要是一个简略再定位表达式。
EXTRN 是与PUBLIC 配套运用的,要调用其它模块的函数,就有必要先在模块前声明。
指令格局:EXTRN 段类型(符号,符号······)
例如:EXTRN
调用外部TONGXING和ZHUANHUAN 程序。
14、IDATA
IDATA 指令用于将一个直接寻址的内部RAM 地址赋给指定的符号名。
指令格局:符号名
例如:FULLER
条件伪操作格局:
当IF指令中的表达式为真时,被汇编的代码段是程序块1;当IF指令中的表达式为假时,被汇编的代码段是
程序块2。
16、INCLUDE
功用:
格局:
留意:1、文件名中若没有扩展名,则体系默许是。ASM(该文件有必要是能翻开的)。
17、ISEG
功用:肯定挑选指令ISEG内部直接寻址肯定数据段idata
指令格局如下:ISEG [AT 肯定地址表达式]
宏指令格局
代码段
宏调用格局
它们的格局为:
功用:LIST伪指令使汇编时主生程序清单,但即便不必该指令,汇编也会主动发生清单。但假如运用了NOLIST伪指令后需求持续主生清单则有必要运用LIST伪指令。
功用:用来给当时模块命名。
指令格局:NAME 模块名
例如:NAME TIMER
界说一个模块名为TIMER 的模块。
其格局为$NOCODE
NOCODE伪指令使得在汇编时,条件汇编程序结构中那些真值为假的条件不发生清单。有关条件汇编结构鄙人
面介绍。假如没有这条伪指令,汇编将主生一切条件下的清单,不管其真值是否为真。可是假的条件,不产
生方针码。而NOCODE伪指令使汇编清单中只列出那些由汇编程序用到的部分,因此,当运用NOCODE伪指令
时,程序清单与源程序并非逐行对应。
它们的格局为:
功用:NOLIST伪指令使汇编时不发生清单,一切包括此伪指令及在这条伪指令之后的句子都不进入列表文
件。当不需求任何列表文件,而且不需求显现程序清单时,能够在发动汇编时不加.L附加项,且在源代码
的榜首行加上NOLIST指令。运用NOLIST伪指令与附加项/L不同之处是NOLIST伪指令可加在源程序中,与LIST
伪指令合作运用,使源程序中某些部分不发生清单。而不加附加项/L则不发生任何程序清单。不过,不管有
无$NOLIST伪指令,程序在汇编时检查到的过错都将在屏幕上显现犯错的源代码行及过错信息
功用:PAGE伪指令用于构成新的一中界说一面的行数。其格局为:$PAGE 表达式
若表达式缺省则开端新的一页,若有表达式,则每页行数从头界说。汇编开端时页长为66行。一页中除出页外,剩下55行用于打印源程序,这一格局适用于规范打印纸。假如变元值小于66,页内可打印的源代码即将相应削减。页长最小值为12。若小于12时,每页内除页上只打印一行源程序。页长变元是16位字节,因此每页最长可界说到65535行,这时分页打印变为接连打印,在屏幕显现程序清单或在卷筒纸上打印程序清单时,常常运用接连打印,假如在发动汇编时用/N选项,页长便是65535。
功用:声明可被其它模块运用的公共函数名。
指令格局:PUBLIC 符号 [,符号,符号[,······]]
PUBLIC 后可跟多个函数名,用逗号格开。每个函数名都有必要是在模块内界说过的。
例如:PUBLIC
其间_OUTER 可供C 调用。
功用:再定位段挑选指令为RSEG,用于挑选一个已在前面界说过的再界说段作为当时段,
指令格局:RSEG 段名
段名有必要是在前面声明过的再定位段。
例如:
DATAS SEGMENT DATA :声明一个再定位DATA 段
CODES SEGMENT CODE ;声明一个再定位CODE 段
BSEG AT 60H
肯定段挑选指令
CSEG---肯定代码段
DSEG---内部肯定数据段
XSEG---外部肯定数据段
ISEG ---内部直接寻址数据段
BSEG---肯定位寻址数据段
格局:
CSEG
DSEG
XSEG
ISEG
BSEG
括号内是可选项,用来指定当时肯定段的基地址。
功用:SEGMENT 指令用来声明一个再定位段和一个可选的再定位类型。
指令格局:再定位段型
例如:
功用:SET 指令类似于EQU 指令,不同的是SET 指令界说过的符号可重界说。
指令格局:符号名 SET 表达式
例如:MAX SET 2000
功用:TITLE伪指令用于在列表文件页头树立一个标题,其格局为:
这儿标量行便是将呈现在页头的标量与一般的字符串界说不同。这儿标量行不加引号。汇编从$TITLE 之后的榜首个可打印字符开端,到回车符之间的字符串作为标量标量的最大长度是60个字符,基标量行省掉,则标题行为空行。若TITLE伪指令在一页,它阐明的标量行包括在本页,不然,标题将呈现鄙人页页头。
功用:XDATA 指令用于将一个外部RAM 的地址赋给指定的符号名。
例如:RSEG XSEG1 ;挑选一个外部数据段
MING DS 10 ;在标号MING 处保存10 个字节
MUNIT XDATA HOUR+5
功用:肯定挑选指令XSEG外部肯定数据段xdata
XSEG [AT 肯定地址表达式]
USING指令告诉汇编器运用8051的哪一个作业存放器组。
格局:
USING
ORG指令用来改动汇编器的计数器,然后设定一个新的程序开端地址。
格局:
ORG
数据界说伪操作格局:
代码段(CSEG)
数据段(DESG)
外部段(XSEG)
功用段(FSEG)
位
表-8
假如在汇编中没有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
MOV
MOVC A , @A+DPTR
CLR
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
MOV
MOVC A , @A+DPTR
CLR
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 SETMENT CODE
RSEG LOOKUPTABLE
TABLE: DB 02H, 03H, 04H, 05H, 06H, 07H, 08H, 09H
NAME ASMTEST
$include(LOOKUPTABLE.INC)
?PR?TSEG?ASM_TEST SEGMENT CODE
PUBLIC ASM_LOOKUP_ROUTINE
RSEG ?PR?TSEG?ASM_TEST
using
ASM_LOOKUP_ROUTINE:
extern void ASM_LOOKUP_ROUTINE(void);
void main(void)
{
}