还剩12页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
51单片机汇编指令及伪指令小结51单片机汇编指令及伪指令小结51单片机汇编指令小结
一、数据传送类指令MOV用法MOVA,RnMOVA,@RiMOVA,ttdataMOVA,directMOVRn,AMOVRn,ttdataMOVRn,directMO V@Ri,AMOV@Ri,#dataMOV@Ri,directMOVdirect,AMOVdirect,@RiMOVdirect,Rn功能寄存器送累加器立即数送累加器直接寻址单元送累加器累加器送寄存器立即数送寄存器直接寻址单元送寄存器字节数122122周期1XCH不能出现两个直接寻址地址R0和R1只能寻址片内低128字节或者片外低256字节MOVX必须通过A与外部RAM传值,另一个操作数必须用寄存器间接寻址MOVC必须通过A进行注意事项MOV指令中不能出现两个工作寄存器间接寄存器寻址只能用R0和R1RO和R1只能寻址片内低128字节或者片外低256字节(SFR不能通过工作寄存器寻址)DPTR为唯一16位寄存器内部RAM单元送累加器1累加器送内部RAM单元1立即数送内部RAM单元2直接寻址单元送内部RAM单元累加器送直接寻址单元内部RAM单元送直接寻址单元寄存器送直接寻址单元址单元223223MOVdirect,#data立即数送直接寻址单元MOVdirect2,directl直接寻址单元送直接寻MOVDPTR,#datal616位立即数送数据指针3M0VXM0VXA,@Ri外部RAM单元送累加器1(8位地址)MOVXA,@DPTRMOVX@Ri,AMOVX@DPTR,AMOVCMOVCAA+DPTRXCHXCHD,@外部RAM单元送累加器[程序块2]ENDIF当IF指令中的表达式为真时,被汇编的代码段是程序块1;当IF指令中的表达式为假时,被汇编的代码段是程序块2在一个条件结构中,仅有一个代码段被汇编,其它的则被忽略
16、INCLUDE功能:利用此伪指令可将一个源文件插入到当前源文件中一起汇编,最终成为一个完整的源程序格式INCLUDE[驱动器名][路径名]文件名注意
1、文件名中若没有扩展名,则系统默认是ASM(该文件必须是能打开的)
2、被插入的源程序中不能包含END伪指令,否则汇编会停止运行被链接文件的每一行,在程序清单中以“I”开头
3、链接伪指令可有8级嵌套,若要求嵌套的多,则要修改DOS中的CONFIGo SYS文件的FILES参数
17、ISEG功能:绝对选择指令ISEG内部间接寻址绝对数据段idata格式ISEG[AT绝对地址表达式]
18、MACRO宏指令格式[宏指令名]MACRO[形式参数,]代码段ENDM宏调用格式[宏指令名][实在参数,]功能:LIST伪指令使汇编时主生程序清单,但即使不用该指令,汇编也会自动产生清单但如果使用了NOLIST伪指令后需要继续主生清单则必须使用L IST伪指令格式$LIST
20、NAME功能用来给当前模块命名格式NAME模块名例如NAMETIMER定义一个模块名为TIMER的模块
21、N0C0DE格式SNOCODEN0C0DE伪指令使得在汇编时,条件汇编程序结构中那些真值为假的条件不产生清单有关条件汇编结构在下面介绍如果没有这条伪指令,汇编将主生所有条件下的清单,不论其真值是否为真但是假的条件,不产生目标码而N0C0DE伪指令使汇编清单中只列出那些由汇编程序用到的部分,因此,当使用N0C0DE伪指令时,程序清单与源程序并非逐行对应
22、NOLIST格式$NOLIST功能:NOLIST伪指令使汇编时不产生清单,所有包含此伪指令及在这条伪指令之后的语句都不进入列表文件当不需要任何列表文件,并且不需要显示程序清单时,可以在启动汇编时不加.L附加项,且在源代码的第一行加上NOLIST指令使用NOLIST伪指令与附加项/L不同之处是NOLIST伪指令可加在源程序中,与LIST伪指令配合使用,使源程序中某些部分不产生清单而不加附加项/L则不产生任何程序清单不过,不管有无$1^^5丁伪指令,程序在汇编时检查到的错误都将在屏幕上显示出错的源代码行及错误信息
23、PAGE功能:PAGE伪指令用于形成新的一中定义一面的行数格式$PAGE表达式若表达式缺省则开始新的一页,若有表达式,则每页行数重新定义汇编开始时页长为66行一页中除出页外,剩余55行用于打印源程序,这一格式适用于标准打印纸如果变元值小于66,页内可打印的源代码行将相应减少页长最小值为12若小于12时,每页内除页上只打印一行源程序页长变元是16位字节,因而每页最长可定义到65535行,这时分页打印变为连续打印,在屏幕显示程序清单或在卷筒纸上打印程序清单时,常常使用连续打印,如果在启动汇编时用/N选项,页长就是
6553524、PUBLIC功能:声明可被其它模块使用的公共函数名格式PUBLIC符号[,符号,符号[,]]PUBLIC后可跟多个函数名,用逗号格开每个函数名都必须是在模块内定义过的例如PUBLICINTER,_OUTER其中_OUTER可供C调用功能再定位段选择指令为RSEG,用于选择一个已在前面定义过的再定义段作为当前段,格式RSEG段名段名必须是在前面声明过的再定位段例如DATASSEGMENTDATA声明一个再定位DATA段CODESSEGMENTCODE;声明一个再定位CODE段BSEGAT60HRSEGC0DES;选择前面声明的再定位CODE段作为当前段
26、SEGMENT功能:SEGMENT指令用来声明一个再定位段和一个可选的再定位类型格式再定位段型SEGMENT段类型(再定位类型)段类型用于指定所声明的段将处的储存器地址空间,可用的段类型有CODE/XDATA/DATA/IDATA和BIT例如FLAGSEGMENTBITPONITERSEGMENTIDATA
27、SET功能:SET指令类似于EQU指令,不同的是SET指令定义过的符号可重定义格式符号名SET表达式符号名SET寄存器名例如MAXSET201WAXSET
300028、TTILE功能:TITLE伪指令用于在列表文件页头建立一个标题格式$TITLE标题行这里标量行就是将出现在页头的标量与通常的字符串定义不同这里标量行不加引号汇编从$TITLE之后的第一个可打印字符开始,到回车符之间的字符串作为标量标量的最大长度是60个字符,基标量行省略,则标题行为空行若T ITL E伪指令在一页,它说明的标量行包含在本页,否则,标题将出现在下页页头
29、XDATA功能:XDATA指令用于将一个外部RAM的地址赋给指定的符号名格式符号名XDATA表达式例如RSEGXSEG1;选择一个外部数据段0RG100HMINGDS10;在标号MING处保留10个字节H0URXDATAMING+5MUNITXDATAH0UR+
530、XSEG功能绝对选择指令XSEG外部绝对数据段xdata格下XSEG[AT绝对地址表达式](16位地址)累加器送外部RAM单元(8位地址)累加器送外部RAM单元(16位地址)查表数据送累加器(DPTR为基址)查表数据送累加器(PC为基址)累加器与寄存器交换累加器与内部RAM单元交换累加器与直接寻址单元交换累加器与内部RAM单元111111121M0VCA,@A+PCXCHA,RnXCHA,@RiXCHA,directXCHDA,@Ri低4位交换PUSHPOPPOPdirectPUSHdirect栈顶弹出指令直接寻址单元直接寻址单元压入栈顶2222用ACC表示累加器堆栈在用户RAM区
二、算术运算类指令指令A加用法ADDA,RnADDA,@RiADDA,directADDA,ttdataADDCADDCA,RnADDCA,@RiADDCA,ttdataADDCA,directINCINCAINCRnINCdirectINC@Ri功能累加器加寄存器累加器加内部RAM单元累加器加直接寻址单元累加器加立即数累加器加寄存器和进位标志累加器加内部RAM单元和进位标志累加器加立即数和进位标志累加器加直接寻址单元和进位标志累加器加1寄存器加1直接寻址单元加1内部RAM单元加1字节数周期注意事项A加可以产生进位,但不考虑进位加法类指令只能通过A进行加法类的和超过8位时,CY置1,0V置1ADDC可以产生进位,也考虑进位除了INCA改变奇偶标识位,其他都不改变PSW(不改变CY)INCDPTRDASUBBDAASUBBA,RnSUBBA,@RiSUBBA,ttdataSUBBA,directDECDECADECRnDEC@RiDECdirectMULMULABDIV数据指针加1十进制调整累加器减寄存器和进位标志累加器减内部RAM单元和进位标志累加器减立即数和进位标志累加器减直接寻址单元和进位标志累加器减1寄存器减1内部RAM单元减1直接寻址单元减1累加器乘寄存器结果存储为BAA、B为单字节无符号数乘积大于255时(结果中B不为0),0V置1CY总为0结果储存为商A,余数B除数为0时,OV置1与INC类似DIVAB累加器除以寄存器B14
三、逻辑运算类指令指令ANL用法ANLA,RnANLA,@RiANLA,ttdataANLA,directANLdirect,AANLdirect,ttdataORLORL A,RnORLA,@Ri ORLA,ttdataORLA,direct功能累加器与寄存器累加器与内部RAM单元累加器与立即数累加器与直接寻址单元直接寻址单元与累加器直接寻址单元与立即数累加器或寄存器累加器或内部RAM单元累加器或立即数累加器或直接寻址单字节数1122231122周期注意事项111111111元ORLdirect,AORLdirect,#dataXRLXRLA,RnXRLA,@RiXRLA,WdataXRLA,directXRLdirect,AXRLdirect,WdataRLARRARLCARRCACPLACLRA直接寻址单元或累加器直接寻址单元或立即数累加器异或寄存器累加器异或内部RAM单元累加器异或立即数累加器异或直接寻址单元直接寻址单元异或累加器直接寻址单元异或立即数累加器左循环移位累加器右循环移位累加器连进位标志左循环移位累加器连进位标志右循环移位累加器取反累加器清零边上一位移入CY,另一侧一位从CY移入ANL、ORL、XRL均可以对接口进行操作
四、控制转移类指令类指令用法ACALLaddrll功能2KB范围内绝对调用字节数2周期注意事项2Addr0^10赋给pco~iopcn15不变调用时,地址分两次压栈调用时,地址分两次〜压栈A+DPTR赋给PCLCALLaddr16AJMPaddr11LJMPaddr16SJMPrelJMP@
五、位操作类指令MOVMOVC,bitMOVbit,C直接寻址位送CC送直接寻址DJNZRn,relDJNZdirect,relNOP直接寻址单元减1不为零转移空操作寄存器减1不为零转移2312212Bit为RAM中20r2FH中128个可寻址位,或SFR中可寻址储存单元必须通过C传送SETBJBbit,relJNBbit,relJBCbit,relSETBCSETBbit bit为1则转移并清零3331222211逻辑操作与字节中的一致51汇编常用伪指令
1.0RG16位地址此指令用在原程序或数据块的开始,指明此语句后面目标程序或数据块存放的起始地址;
2.【标号】DB字节数据项表奖项表中的字节数据存放到从标号开始的连续字节单元中例如SEG:DB88H,100,、7〃,、C〃;
3.【标号】DW双字节数据项表定义16位地址表,16地址按低位地址存低位字节,高位地址存高位字节例如TAB:DW1234H,7BH名字EQU表达式或名字二表达式用于给一个表达式赋值或给字符串起名字之后名字可用作程序地址,数据地址或立即数地址使用名字必须是一字母开头的字母数据串例如C0UNT=10或SPACEEQU10H
5.名字DATA直接字节地址给8位内部或外部RAM单元起个名字,名字必须是一字母开头的字母数据串同一单元可起多个名字例如ERR0RDATA80H
6.XDATA直接字节地址给8位外部RAM起个名字,名字规定同DATA伪指令例如I0_P0TRXDATA0CF04H
7.名字Bit指令给一位可寻址的位单元起个名字,规定同DATA伪指令例如:SWTBIT30H
8.【标号】END:指出源程序到此结束,汇编对其后的程序语句不予理睬源程序只在主程序最后使用一个END注DATA和EQU的区别在于用DATA定义的字符名称作为标号登记在符号表中,故可先使用后定义;而用EQU定义的字符名称必须先定义后使用,其原因是EQU不定义在符号表中51单片机汇编伪指令集合
1、ALTNAME功能:这一伪指令用来自定义名字,以替换源程序中原来的保留字,替换的保留字均可等效地用于子程序中格式ALTNAME保留字自定义名注意自定义名与保留字之间首字符必须相同
1、BIT功能:指令用于将一个位地址赋给指定的符号名格式符号名BIT位地址经BIT指令定义过的位符号名不能更改例如X_0NBIT60H;定义一个绝对位地址X_0FFBIT24h.2;定义一个绝对位地址
2、BSEG功能:绝对选择指令指令BSEG选择绝对位寻址数据段格式:BSEG[AT绝对地址表达式]
3、CODE功能:用于将程序存储器ROM地址赋给指定的符号名格式:符号名CODE表达式例如RESETCODEOOH
4、CSEG功能:绝对选择指令CSEG选择绝对代码段;格式CSEG[AT绝对地址表达式]
5、DATA BYTE功能:指令用于将一个内部RAM的地址赋给指定的符号名格式符号名DATA表达式数值表达式的值应在0255之间,表达式必须是一个简单〜再定位表达式例如REGBUFDATABYTE40HP0RT0DATABYTE80HDATA与BYTE的区别:DATA与BYTE是相类似的伪指令当程序运行到DATA伪指令定义的符号名时,该符号名将被显示;而由BYTE定义的符号名不被显示
6、DB功能:DB伪指令用于定义一个连续的存储区,给该存储区的存储单元赋值该伪指令的参数即为存储单元的值,在表达式中对变元个数没有限制,只要此条伪指令能容纳在源程序的一行内格式标号DB表达式只要表达式不是字符串,每一表达式值都被赋给一个字节计算表达式值时按16位处理,但其结果只取低8位,若多个表达式出现在一个DB伪指令中,它们必须以逗号分开表达式中有字符串时,以单引号“〃”作分隔符,每个字符占一个字节,字符串不加改变地被存在各字节中,并不将小写字母转换成大写字母例如DB00H01H03H46HDB,zThisisademo!/z
7、DBIT功能:在内部数据区的BIT段以位为单位保留存储空间格式[标号]DBIT数值表达式其操作类似于DB
8、DS功能:DS为定义存储内容的伪指令,用它定义一个存储区,并用指定的参数填满该存储区DS伪指令包含两个变元,第一个变元定义了存储区的长度的字节数,在汇编时,汇编程序将跳过这些单元把其它指令汇编在这些字节之后,因此在使用D S伪指令时第一个变元不可活力第二个变元表示在这些单元中真入什么值,第二个变元可以活力活力时这些字节将不处理下例中0173处有一条DS9,则空出9个字节,下一第指令被汇编到017C处;在017C处空出1BH个单元,在这些字节中被27H所填充格式标号DS表达式1,表达式2表达式1定义了存储区的长度(以字节为单位)这个变元不能省略表达式2是可选择的,它的值低8位用以填入所定义的存储区若省略则这部分存储单元不处理例如000004INCA0001DS9000A04INCA000BDS1BH,27H002604INCA
9、DSEG功能:绝对选择指令DSEG内部绝对数据段格式DSEG[AT绝对地址表达式]
10、DW功能:DW为以字节为单元(十六位二进制)来给一个的存储区赋值格式标号DW表达式例如00003035D46BDW12341,54379,
11、END功能:END语句标志源代码的结束,汇编程序遇到END语句即停止运行若没有END语句,汇编将报错END语句有一个参数,可以是数值0,也可以是表达式格式:标号:END表达式它的值就是程序的地址并且作为一个特殊的记录写入HEX文件若这个表达式省略,HEX文件中其值就是
012、EQU=功能:存器名赋给一个指定符号名格式符号名EQU=表达式符号名EQU=寄存器名经过EQU指令赋值的符号可在程序的其它地方使用,以代替其赋值例如MAXEQU201*则在程序的其它地方出现MAX,就用201*代替
13、EXTRN功能:EXTRN是与PUBLIC配套使用的,要调用其它模块的函数,就必须先在模块前声明格式EXTRN段类型符号,符号例如EXTRNC0DET0NGXING,ZHUANHUAN调用外部T0NGXING和ZHUANHUAN程序
14、IDATA功能:IDATA指令用于将一个间接寻址的内部RAM地址赋给指定的符号名格式符号名IDATA表达式例如FULLERIDATA60H
15、IF格式IF表达式[程序块1][ELSE]。
个人认证
优秀文档
获得点赞 0