51汇编伪指令定义系统堆栈1.docx
- 文档编号:27664964
- 上传时间:2023-07-03
- 格式:DOCX
- 页数:12
- 大小:22.46KB
51汇编伪指令定义系统堆栈1.docx
《51汇编伪指令定义系统堆栈1.docx》由会员分享,可在线阅读,更多相关《51汇编伪指令定义系统堆栈1.docx(12页珍藏版)》请在冰豆网上搜索。
51汇编伪指令定义系统堆栈1
51单片机汇编伪指令
命令按字母排序:
1、ALTNAME
功能:
这一伪指令用来自定义名字,以替换源程序中原来的保留字,替换的保留字均可等效地用于子程序中。
格式:
ALTNAME保留字自定义名注意:
自定义名与保留字之间首字符必须相同。
1、BIT
功能:
指令用于将一个位地址赋给指定的符号名。
指令格式:
符号名BIT位地址经BIT指令定义过的位符号名不能更改。
例如:
X_ONBIT60H;定义一个绝对位地址X_OFFBIT24h.2;定义一个绝对位地址
BIT---定义位命令格式:
字符名称BIT位地址
其功能用于给字符名称定义位地址。
SPKBITP3.7经定义后,允许在指令中用SPK代替P3.7。
2、BSEG
功能:
绝对选择指令指令BSEG选择绝对位寻址数据段指令格式如下:
BSEG[AT绝对地址表达式]
3、CODE
功能:
用于将程序存储器ROM地址赋给指定的符号名。
指令格式:
符号名CODE表达式
例如:
RESETCODE00H
4、CSEG
功能:
绝对选择指令CSEG选择绝对代码段;指令格式如下:
CSEG[AT绝对地址表达式]
5、DATA(BYTE
功能:
指令用于将一个内部RAM的地址赋给指定的符号名指令格式:
符号名DATA表达式
数值表达式的值应在0~255之间,表达式必须是一个简单再定位表达式。
例如:
REGBUFDATA(BYTE40HPORT0DATA(BYTE80H
DATA与BYTE的区别:
DATA与BYTE是相类似的伪指令。
当程序运行到DATA伪指令定义的符号名时,该符号名将被显示;而由BYTE定义的符号名不被显示。
6、DB
功能:
DB伪指令用于定义一个连续的存储区,给该存储区的存储单元赋值。
该伪指令的参数即为存储单元的值,在表达式中对变元个数没有限制,只要此条伪指令能容纳在源程序的一行内,其格式为:
标号:
DB表达式只要表达式不是字符串,每一表达式值都被赋给一个字节。
计算表达式值时按16位处理,但其结果只取低8位,若多个表达式出现在一个DB伪指令中,它们必须以逗号分开。
表达式中有字符串时,以单引号“'”作分隔符,每个字符占一个字节,字符串不加改变地被存在各字节中,并不将小写字母转换成大写字母。
例如:
DB00H01H03H46HDB'Thisisademo!
'
7、DBIT
功能:
在内部数据区的BIT段以位为单位保留存储空间。
指令格式:
[标号:
]DBIT数值表达式其操作类似于DB。
8、DS
功能:
DS为定义存储内容的伪指令,用它定义一个存储区,并用指定的参数填满该存储区。
DS伪指令包含两个变元,第一个变元定义了存储区的长度的字节数,在汇编时,汇编程序将跳过这些单元把其它指令汇编在这些字节之后,因此在使用DS伪指令时第一个变元不可活力第二个变元表示在这些单元中真入什么值,第二个变元可以活力活力时这些字节将不处理。
下例中0173处有一条DS9,则空出9个字节,下一第指令被汇编到017C处;在017C处空出1BH个单元,在这些字节中被27H所填充。
DS指令的格式如下:
标号:
DS表达式1,表达式2
表达式1定义了存储区的长度(以字节为单位。
这个变元不能省略。
表达式2是可选择的,它的值低8位用以填入所定义的存储区。
若省略则这部分存储单元不处理。
例:
000004INCA0001DS9
000A04INCA000BDS1BH,27H002604INCA
DS---预留存储区命令格式:
〔标号:
〕DS表达式值
其功能是从指定地址开始,定义一个存储区,以备源程序使用。
存储区预留的存储单元数由表达式的值决定。
TMP:
DS1从标号TEP地址处开始保留1个存储单元(字节。
9、DSEG
功能:
绝对选择指令DSEG内部绝对数据段指令格式如下:
DSEG[AT绝对地址表达式]
10、DW
功能:
DW为以字节为单元(十六位二进制来给一个的存储区赋值,其格式为:
标号:
DW表达式例如:
00003035D46BDW12341,54379,10110100101110B
11、END
功能:
END语句标志源代码的结束,汇编程序遇到END语句即停止运行。
若没有END语句,汇编将报错。
END语句有一个参数,可以是数值0,也可以是表达式,其格式是:
标号:
END表达式
它的值就是程序的地址并且作为一个特殊的记录写入HEX文件。
若这个表达式省略,HEX文件中其值就是0。
12、EQU(=
存器名赋给一个指定符号名。
指令格式:
符号名EQU(=表达式符号名EQU(=寄存器名经过EQU指令赋值的符号可在程序的其它地方使用,以代替其赋值。
例如:
MAXEQU2000
则在程序的其它地方出现MAX,就用2000代替。
表达式必须是一个简单再定位表达式。
用EQU指令赋值以后的字符名,可以用作数据地址、代码地址、位地址或者直接当做一个立即数使用。
13、EXTRN
EXTRN是与PUBLIC配套使用的,要调用其它模块的函数,就必须先在模块前声明。
指令格式:
EXTRN段类型(符号,符号······例如:
EXTRNCODE(TONGXING,ZHUANHUAN
调用外部TONGXING和ZHUANHUAN程序。
14、IDATA
IDATA指令用于将一个间接寻址的内部RAM地址赋给指定的符号名。
指令格式:
符号名IDATA表达式例如:
FULLERIDATA60H
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模块名例如:
NAMETIMER
定义一个模块名为TIMER的模块。
21、NOCODE
其格式为$NOCODENOCODE伪指令使得在汇编时,条件汇编程序结构中那些真值为假的条件不产生清单。
有关条件汇编结构在下面介绍。
如果没有这条伪指令,汇编将主生所有条件下的清单,不论其真值是否为真。
但是假的条件,不产生目标码。
而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后可跟多个函数名,用逗号格开。
每个函数名都必须是在模块内定义过的。
例如:
PUBLICINTER,_OUTER其中_OUTER可供C调用。
25、RSEG
功能:
再定位段选择指令为RSEG,用于选择一个已在前面定义过的再定义段作为当前段,指令格式:
RSEG段名段名必须是在前面声明过的再定位段。
例如:
DATASSEGMENTDATA:
声明一个再定位DATA段CODESSEGMENTCODE;声明一个再定位CODE段BSEGAT60H
RSEGCODES;选择前面声明的再定位CODE段作为当前段。
绝对段选择指令
CSEG---绝对代码段
DSEG---内部绝对数据段XSEG---外部绝对数据段ISEG---内部间接寻址数据段BSEG---绝对位寻址数据段格式:
CSEG[AT绝对地址表达式]DSEG[AT绝对地址表达式]XSEG[AT绝对地址表达式]
ISEG[AT绝对地址表达式]BSEG[AT绝对地址表达式]
括号内是可选项,用来指定当前绝对段的基地址。
CSEGAT0000HAJMPMAIN
26、SEGMENT
功能:
SEGMENT指令用来声明一个再定位段和一个可选的再定位类型。
指令格式:
再定位段型SEGMENT段类型(再定位类型段类型用于指定所声明的段将处的储存器地址空间,可用的段类型有CODE/XDATA/DATA/IDATA和BIT。
例如:
FLAGSEGMENTBITPONITERSEGMENTIDATA
27、SET
功能:
SET指令类似于EQU指令,不同的是SET指令定义过的符号可重定义。
指令格式:
符号名SET表达式符号名SET寄存器名
例如:
MAXSET2000MAXSET3000
28、TTILE
功能:
TITLE伪指令用于在列表文件页头建立一个标题,其格式为:
$TITLE标题行
这里标量行就是将出现在页头的标量与通常的字符串定义不同。
这里标量行不加引号。
汇编从$TITLE之后的第一个可打印字符开始,到回车符之间的字符串作为标量标量的最大长度是60个字符,基标量行省略,则标题行为空行。
若TITLE伪指令在一页,它说明的标量行包含在本页,否则,标题将出现在下页页头。
29、XDATA
功能:
XDATA指令用于将一个外部RAM的地址赋给指定的符号名。
指令格式:
符号名XDATA表达式例如:
RSEGXSEG1;选择一个外部数据段ORG100H
MINGDS10;在标号MING处保留10个字节HOURXDATAMING+5
MUNITXDATAHOUR+5
30、XSEG
功能:
绝对选择指令XSEG外部绝对数据段xdata指令格式如下:
XSEG[AT绝对地址表达式]
31、USING指令USING指令通知汇编器使用8051的哪一个工作寄存器组。
格式:
USING表达式(值必须为0-3,默认值为0。
USING0使用第0组工作寄存器。
32、ORG指令ORG指令用来改变汇编器的计数器,从而设定一个新的程序起始地址。
格式:
ORG表达式表达式必须是绝对或简单再定位表达式。
ORG0000HAJMPMAIN设定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代码段CSEGLDW数据段DSEGDDW外部段XSEGXXE
功能段FSEGFFG位段BSEGBBB说明:
(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的包含文件,以下的程序出错:
NAMEASMTEST
$include(LOOKUPTABLE.INC
;$include(REG52.INC;一定要空上一行,否则有错?
PR?
TSEG?
ASM_TESTSEGMENTCODE
PUBLICASM_LOOKUP_ROUTINE
RSEG?
PR?
TSEG?
ASM_TEST
using0ASM_LOOKUP_ROUTINE:
MOVDPTR,#TABLEMOVA,#4
MOVCA,@A+DPTRCLRP0.0
RET
END
错误提示是:
ASM_TEST.ASM(15:
errorA45:
UNDEFINEDSYMBOL程序中加上了这个文件包含后就对了。
在汇编程序中包含文件的定义
NAMEASMTEST
$include(LOOKUPTABLE.INC
$include(REG52.INC;一定要空上一行,否则有错?
PR?
TSEG?
ASM_TESTSEGMENTCODE
PUBLICASM_LOOKUP_ROUTINE
RSEG?
PR?
TSEG?
ASM_TEST
using0
ASM_LOOKUP_ROUTINE:
MOVDPTR,#TABLEMOVA,#4
MOVCA,@A+DPTR
CLRP0.0
RET
END
如果两个include没有空行,会出现以下的错误提示:
assemblingASM_TEST.ASM...
ASM_TEST.ASM(3:
errorA34:
','EXPECTEDASM_TEST.ASM(3:
errorA34:
','EXPECTED
ASM_TEST.ASM(3:
errorA34:
','EXPECTEDASM_TEST.ASM(3:
errorA9:
SYNTAXERRORASM_TEST.ASM(3:
errorA34:
','EXPECTED从C中访问位于汇编函数中的表格TEST.C:
包含调用汇编函数的C程序。
ASM_TEST.ASM:
包含使用查表的汇编函数。
LOOKUPTABLE.INC:
包含查表。
每个文件的内容如下面所示。
为了将查表定义在一个固定的地址0x1000,打开工程-选项(Project-Options),选择Target-BL51Locate。
在代码段(CodeSegment)字段中输入段名(起始地址)。
例如在本例中,你应该输入LOOKUPTABLE(0x1000。
对于你的程序,你可能需要从MAP文件(*.M51)中查找段名。
LOOKUPTABLE.INCLOOKUPTABLESETMENTCODERSEGLOOKUPTABLETABLE:
DB02H,03H,04H,05H,06H,07H,08H,09HASM_TEST.ASMNAMEASMTEST$include(LOOKUPTABLE.INC?
PR?
TSEG?
ASM_TESTSEGMENTCODEASM_TEST.ASM(14:
errorA45:
UNDEFINEDSYMBOLASM_TEST.ASM-6Error(s,0Warning(s.PUBLICASM_LOOKUP_ROUTINERSEG?
PR?
TSEG?
ASM_TESTusing0ASM_LOOKUP_ROUTINE:
MOVDPTR,#TABLE;DPTR指向查表的起始位置MOVA,#4;A是从查表的起始位置的偏移量MOVCA,@A+DPTR;把第A+1项送到累加器中RETENDTEST.CexternvoidASM_LOOKUP_ROUTINE(void;voidmain(void{ASM_LOOKUP_ROUTINE(;//调用查表子程序while(1;}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 51 汇编 指令 定义 系统 堆栈