原创 51单片机汇编伪指令

2009-9-14 20:43 5924 9 10 分类: MCU/ 嵌入式
最近在学KEIL在进行编译时,生成的SRC文件,里面的许多命令都不大知道,于是自己找资料查了查。
现总结如下,希望对大家有点帮助。
为了大家查找方便,命令按字母排序:
1、ALTNAME


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



格式: ALTNAME  保留字  自定义名 



注意自定义名与保留字之间首字符必须相同。


1、BIT



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



指令格式:符号名 BIT 位地址



BIT
指令定义过的位符号名不能更改。



例如:X_ON   BIT  60H ;定义一个绝对位地址



X_OFF
 BIT  24h.2
;定义一个绝对位地址
2、BSEG
功能:绝对选择指令指令BSEG选择绝对位寻址数据段


指令格式如下:





BSEG
[AT
绝对地址表达式]


3、CODE



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



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



例如:RESET  CODE  00H
4、CSEG
功能:绝对选择指令CSEG选择绝对代码段


指令格式如下:



CSEG
[AT
绝对地址表达式]


5、DATABYTE



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



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



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



例如:REGBUF  DATABYTE  40H



PORT0    DATABYTE  80H



DATABYTE的区别: DATABYTE是相类似的伪指令。 当程序运行到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



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 代替。




13、EXTRN


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



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



例如:EXTRN  CODE (TONGXING,ZHUANHUAN)



调用外部TONGXINGZHUANHUAN 程序。


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 中的CONFIGSYS文件的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 段作为当前段。



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
绝对地址表达式]





PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户188034 2009-9-14 18:56

看着象教科书上的
相关推荐阅读
用户194501 2009-09-17 13:50
利用protues仿真51的中断和定时器实验
步骤:1、利用protues软件,画出电路图,如下图2、利用wave软件,编译你的汇编程序,生成hex文件;**********************************************...
用户194501 2009-09-14 15:42
Keil C51初始化代码 Startup.a51的中文说明
Keil C51初始化代码 Startup.a51的中文说明 Keil C51初始化代码 Startup.a51的中文说明;--------------------------------...
用户194501 2009-09-12 20:53
DS18B20测温系统
经过几天的研究,终于将DS18B20测试温度系统做出来了,下面讲一下DS18B20要点(有些是自己做实验过程中的体会)1、芯片管脚:2、DS18B20内部结构DS18B20内部结构主要由四部分组 成:...
用户194501 2009-09-12 20:10
石英晶体振荡器原理
1、压电效应压电效应简单来说是机械能与电能的互相转换。顺压电效应:物质在沿一定方向上受到外力的作用变形时,内部会产生极化现象,同时在其表面上会产生电荷;当外力去掉后,又重新回到不带电的状态。逆压电效应...
用户194501 2009-09-11 00:50
8段数码管显示深入分析
在开始之前,先推荐一个十分有用的工具:LED代码段生成器,可自己随意修改,下面是图下面进入正题:      光源闪烁就是光源发出的光随时间呈快速、重复的变化,使得光源跳动和不稳定。当然人的肉眼并不能很...
EE直播间
更多
我要评论
1
9
关闭 站长推荐上一条 /3 下一条