1、51单片机汇编伪指令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、 BS
2、EG 功能:绝对选择指令指令BSEG选择绝对位寻址数据段指令格式如下:BSEG AT 绝对地址表达式3、CODE功能:用于将程序存储器ROM 地址赋给指定的符号名。指令格式:符号名 CODE 表达式例如:RESET CODE 00H 4、CSEG 功能:绝对选择指令CSEG选择绝对代码段;指令格式如下:CSEG AT 绝对地址表达式5、DATA(BYTE)功能:指令用于将一个内部RAM 的地址赋给指定的符号名指令格式:符号名 DATA 表达式数值表达式的值应在0255 之间,表达式必须是一个简单再定位表达式。例如:REGBUF DATA(BYTE) 40H PORT0DATA(BYTE) 80
3、HDATA与BYTE的区别:DATA与BYTE是相类似的伪指令。当程序运行到DATA伪指令定义的符号名时,该符号名将被显示;而由BYTE定义的符号名不被显示。 6、DB 功能:DB伪指令用于定义一个连续的存储区,给该存储区的存储单元赋值。该伪指令的参数即为存储单元的值,在表达式中对变元个数没有限制,只要此条伪指令能容纳在源程序的一行内,其格式为:标号: DB 表达式只要表达式不是字符串,每一表达式值都被赋给一个字节。计算表达式值时按16位处理,但其结果只取低8位,若多个表达式出现在一个DB伪指令中,它们必须以逗号分开。表达式中有字符串时,以单引号“”作分隔符,每个字符占一个字节,字符串不加改变
4、地被存在各字节中,并不将小写字母转换成大写字母。例如:DB 00H 01H 03H 46H DB This is a demo!7、DBIT功能:在内部数据区的BIT 段以位为单位保留存储空间。指令格式:标号: DBIT 数值表达式其操作类似于DB。 8、DS 功能:DS为定义存储内容的伪指令,用它定义一个存储区,并用指定的参数填满该存储区。DS伪指令包含两个变元,第一个变元定义了存储区的长度的字节数,在汇编时,汇编程序将跳过这些单元把其它指令汇编在这些字节之后,因此在使用伪指令时第一个变元不可活力第二个变元表示在这些单元中真入什么值,第二个变元可以活力活力时这些字节将不处理。下例中0173处
5、有一条DS 9,则空出9个字节,下一第指令被汇编到017C处;在017C处空出1BH个单元,在这些字节中被27H所填充。DS指令的格式如下: 标号: DS 表达式,表达式表达式定义了存储区的长度(以字节为单位)。这个变元不能省略。表达式是可选择的,它的值低位用以填入所定义的存储区。若省略则这部分存储单元不处理。例: 0000 04 INC A 0001 DS 9 000A 04 INC A000B DS 1BH,27H 0026 04 INC ADS 预留存储区命令 格式:标号: DS 表达式值 其功能是从指定地址开始,定义一个存储区,以备源程序使用。存储区预留的存储单元数由表达式的值决定。T
6、MP: 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 表达式它的值就是程序的地址并且作为一
7、个特殊的记录写入HEX文件。若这个表达式省略,HEX文件中其值就是0。12、EQU(=)存器名赋给一个指定符号名。指令格式: 符号名 EQU(=)表达式 符号名 EQU(=) 寄存器名经过EQU 指令赋值的符号可在程序的其它地方使用,以代替其赋值。例如:MAX EQU 2000则在程序的其它地方出现MAX,就用2000 代替。表达式必须是一个简单再定位表达式。 用 EQU 指令赋值以后的字符名,可以用作数据地址、代码地址、位地址或者直接当做一个立即数使用。13、EXTRNEXTRN 是与PUBLIC 配套使用的,要调用其它模块的函数,就必须先在模块前声明。指令格式:EXTRN 段类型(符号,符
8、号)例如:EXTRN CODE (TONGXING,ZHUANHUAN)调用外部TONGXING和ZHUANHUAN 程序。14、IDATAIDATA 指令用于将一个间接寻址的内部RAM 地址赋给指定的符号名。指令格式:符号名 IDATA 表达式例如:FULLER IDATA 60H 15、IF条件伪操作格式:IF表达式程序块1ELSE程序块2ENDIF当IF指令中的表达式为真时,被汇编的代码段是程序块1;当IF指令中的表达式为假时,被汇编的代码段是程序块2。在一个条件结构中,仅有一个代码段被汇编,其它的则被忽略。16、INCLUDE功能:利用此伪指令可将一个源文件插入到当前源文件中一起汇编,
9、最终成为一个完整的源程序。格式:INCLUDE驱动器名:路径名文件名注意:1、文件名中若没有扩展名,则系统默认是。ASM(该文件必须是能打开的)。 2、被插入的源程序中不能包含END伪指令,否则汇编会停止运行。被链接文件的每一行, 在程序清单中以“I“开头。 3、链接伪指令可有级嵌套,若要求嵌套的多,则要修改DOS中的CONFIG。SYS文件的FILES参 数。17、ISEG功能:绝对选择指令ISEG内部间接寻址绝对数据段idata指令格式如下:ISEG AT 绝对地址表达式18、MACRO宏指令格式宏指令名MACRO形式参数,。代码段 ENDM宏调用格式宏指令名实在参数,。 19、LIST它
10、们的格式为: $LIST功能:LIST伪指令使汇编时主生程序清单,但即使不用该指令,汇编也会自动产生清单。但如果使用了NOLIST伪指令后需要继续主生清单则必须使用伪指令。 20、NAME功能:用来给当前模块命名。指令格式:NAME 模块名例如:NAME TIMER定义一个模块名为TIMER 的模块。21、NOCODE其格式为$NOCODENOCODE伪指令使得在汇编时,条件汇编程序结构中那些真值为假的条件不产生清单。有关条件汇编结构在下面介绍。如果没有这条伪指令,汇编将主生所有条件下的清单,不论其真值是否为真。但是假的条件,不产生目标码。而NOCODE伪指令使汇编清单中只列出那些由汇编程序用
11、到的部分,因此,当使用NOCODE伪指令时,程序清单与源程序并非逐行对应。 22、NOLIST它们的格式为: $NOLIST功能:NOLIST伪指令使汇编时不产生清单,所有包含此伪指令及在这条伪指令之后的语句都不进入列表文件。当不需要任何列表文件,并且不需要显示程序清单时,可以在启动汇编时不加附加项,且在源代码的第一行加上NOLIST指令。使用NOLIST伪指令与附加项/L不同之处是NOLIST伪指令可加在源程序中,与LIST伪指令配合使用,使源程序中某些部分不产生清单。而不加附加项/L则不产生任何程序清单。不过,不管有无$NOLIST伪指令,程序在汇编时检查到的错误都将在屏幕上显示出错的源代
12、码行及错误信息 23、PAGE功能:PAGE伪指令用于形成新的一中定义一面的行数。其格式为:$PAGE 表达式若表达式缺省则开始新的一页,若有表达式,则每页行数重新定义。汇编开始时页长为66行。一页中除出页外,剩余55行用于打印源程序,这一格式适用于标准打印纸。如果变元值小于66,页内可打印的源代码行将相应减少。页长最小值为12。若小于12时,每页内除页上只打印一行源程序。页长变元是16位字节,因而每页最长可定义到65535行,这时分页打印变为连续打印,在屏幕显示程序清单或在卷筒纸上打印程序清单时,常常使用连续打印,如果在启动汇编时用/N选项,页长就是65535。 24、PUBLIC功能:声明
13、可被其它模块使用的公共函数名。指令格式: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
14、 段作为当前段。绝对段选择指令CSEG绝对代码段DSEG内部绝对数据段XSEG外部绝对数据段ISEG 内部间接寻址数据段BSEG绝对位寻址数据段格式:CSEGAT 绝对地址表达式DSEGAT 绝对地址表达式XSEGAT 绝对地址表达式ISEG AT 绝对地址表达式BSEGAT 绝对地址表达式括号内是可选项,用来指定当前绝对段的基地址。 CSEG AT 0000H AJMPMAIN 26、SEGMENT功能:SEGMENT 指令用来声明一个再定位段和一个可选的再定位类型。指令格式:再定位段型 SEGMENT 段类型(再定位类型) 段类型用于指定所声明的段将处的储存器地址空间,可用的段类型有COD
15、E/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 之后的第一个可打印字符开始,到回车符之间的字符串作为标量标量
16、的最大长度是0个字符,基标量行省略,则标题行为空行。若伪指令在一页,它说明的标量行包含在本页,否则,标题将出现在下页页头。 29、XDATA功能:XDATA 指令用于将一个外部RAM 的地址赋给指定的符号名。 指令格式:符号名 XDATA 表达式例如:RSEG XSEG1 ;选择一个外部数据段 ORG 100HMING DS 10 ;在标号MING 处保留10 个字节 HOUR XDATA MING+5MUNIT XDATA HOUR+5 30、XSEG功能:绝对选择指令XSEG外部绝对数据段xdata 指令格式如下:XSEG AT 绝对地址表达式 31、USING指令 USING指令通知汇编
17、器使用8051的哪一个工作寄存器组。格式:USING表达式(值必须为03,默认值为0。)USING0 使用第0组工作寄存器。 32、ORG指令ORG指令用来改变汇编器的计数器,从而设定一个新的程序起始地址。格式:ORG表达式 表达式必须是绝对或简单再定位表达式。ORG0000H AJMPMAIN 设定 MAIN 程序的起始地址为 0000H。数据定义伪操作格式: 标号: 数据定义名 表达式,表达式,. 其中数据定义名可为DB,DW,DS等。 如表-7所示,数据定义伪操作的含义及说明。 表-5 段定义伪操作 段 用 法 及 区 别代码段(CSEG) 包含由处理器所执行的程序。段名可缺省。有目标代
18、码生成。数据段(DESG) 由内部工作寄存器的处理器的RAM组成。用来对程序使用的数据地址赋符号名,大多以ORG,DATA,BYTE,WORD,EDNS等组成。无目标码生成。外部段(XSEG) 由外部工作寄存区和RAM组成。使用方法同数据段。无目标码生成。功能段(FSEG) 由特殊寄存器位置组成(如:输入/输出部件,计时器,中断控制和连续的寄存器部件接口等)。无目标代码生成。位段(BSEG) 由一些独立的位组成,可以用布尔函数实现。 该段地址被解释为位地址。无目标代码生成。 表-6 程序分段的类型符号 段 标号(Label) 字节型操作数(Byte)字型操作数(Word) 代码段CSEG 数据
19、段DSEG 外部段XSEG 功能段FSEG 位段BSEG 说明: (1)在不同的段中类型符号不同; (2)字节型操作数(Byte)一般通过DATA指令赋给符号; 字型操作数 一般通过WORD指令赋给符号; (3)如果各段中用BYTE赋值,则在各段中符号全以S表示;在SIM51模拟/调试中的符号区显示功能中,对BYTE赋值的将被跳过。 (4)在各段中,位类型可以用BIT指令赋给。 表-7 数据定义伪操作 数据定义名 含义 说明DB 用于定义一个字节包含的值 表达式不是字符串时,每个表达式赋给一个字节,是字符串时,用单引号 “ “作为分隔符。DW 用于定义一个字(16位) 每个表达式占16位。如果
20、表达式中的存贮内容为字符串,只取最后两个字符。若字 符串只有一个字符,高字节置“0“。DS 定义一个存贮区 通常用在代码段中,作为程序的一部分。若用在数据段,外部段,则作为位置标志使用。表-8 列表伪操作 伪指令 含义及格式 说明 $TITLE 给源程序指定一个标题 标题不加 “,其最大长度 格式: $TITLE 标题行 60个字符。若标题行省略, 原来定义的标题行作废。 $SUBTTL 给源程序指定一个副标题 副标题不加 “,其最大长度60字符。若副标题行省略, 格式: $SUBTTL 副标题行 原来定义的副标题行作废。 $PAGE 用于形成或定义新的一页或行数 汇编时页长为行(适合于格式:
21、 $PAGE 表达式 标准打印纸) 。表达式最大为65535,最小为12, 表达式缺省,则从新的一页开始。 $LIST 使源程序汇编时,产生程序清单 汇编时无此指令照样产生清单。 格式: $LIST $NOLIST 使源程序汇编时不产生程序清单 格式: $NOLIST $NOCODE 源程序汇编时,条件汇编程序值 没有此指令汇编时,不论其值是为假的不产生清单。真、假的条件都不产生目标码。 格式: $NOCODE如果在汇编中没有REG52。INC的包含文件,以下的程序出错:NAME ASMTEST$include(LOOKUPTABLE.INC);$include(REG52.INC) ;一定要
22、空上一行,否则有错?PR?TSEG?ASM_TEST SEGMENT CODEPUBLIC ASM_LOOKUP_ROUTINERSEG ?PR?TSEG?ASM_TESTusing 0ASM_LOOKUP_ROUTINE:MOV DPTR , #TABLEMOV A , #4MOVC A , A+DPTRCLR P0.0RETEND错误提示是:ASM_TEST.ASM(15): error A45: UNDEFINED SYMBOL 程序中加上了这个文件包含后就对了。在汇编程序中包含文件的定义NAME ASMTEST$include(LOOKUPTABLE.INC)$include(REG5
23、2.INC) ;一定要空上一行,否则有错?PR?TSEG?ASM_TEST SEGMENT CODEPUBLIC ASM_LOOKUP_ROUTINERSEG ?PR?TSEG?ASM_TESTusing 0ASM_LOOKUP_ROUTINE:MOV DPTR , #TABLEMOV A , #4MOVC A , A+DPTRCLR P0.0RETEND如果两个include没有空行,会出现以下的错误提示:assembling ASM_TEST.ASM.ASM_TEST.ASM(3): error A34: , EXPECTEDASM_TEST.ASM(3): error A34: , EX
24、PECTEDASM_TEST.ASM(3): error A34: , EXPECTEDASM_TEST.ASM(3): error A9: SYNTAX ERRORASM_TEST.ASM(3): error A34: , EXPECTEDASM_TEST.ASM(14): error A45: UNDEFINED SYMBOLASM_TEST.ASM - 6 Error(s), 0 Warning(s).从C中访问位于汇编函数中的表格TEST.C: 包含调用汇编函数的C程序。ASM_TEST.ASM: 包含使用查表的汇编函数。LOOKUPTABLE.INC: 包含查表。每个文件的内容如下面
25、所示。为了将查表定义在一个固定的地址0x1000,打开工程选项(Project-Options),选择Target-BL51 Locate。在代码段(Code Segment)字段中输入段名(起始地址)。例如在本例中,你应该输入LOOKUPTABLE(0x1000)。对于你的程序,你可能需要从MAP文件(*.M51)中查找段名。 LOOKUPTABLE.INCLOOKUPTABLE SETMENT CODERSEG LOOKUPTABLETABLE: DB 02H, 03H, 04H, 05H, 06H, 07H, 08H, 09H ASM_TEST.ASMNAME ASMTEST$inclu
26、de(LOOKUPTABLE.INC)?PR?TSEG?ASM_TEST SEGMENT CODEPUBLIC ASM_LOOKUP_ROUTINERSEG ?PR?TSEG?ASM_TESTusing 0ASM_LOOKUP_ROUTINE: MOV DPTR, #TABLE ; DPTR指向查表的起始位置 MOV A, #4 ; A是从查表的起始位置的偏移量 MOVC A, A + DPTR ; 把第A+1项送到累加器中 RET END TEST.Cextern void ASM_LOOKUP_ROUTINE(void);void main(void) ASM_LOOKUP_ROUTINE(); / 调用查表子程序 while(1);(范文素材和资料部分来自网络,供参考。可复制、编制,期待你的好评与关注)