51单片机伪指令和指令详解

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1ASM-51汇编伪指令一、伪指令分类1.符号定义SEGMENT,EQU,SET,DATA,IDATA,XDATA,BIT,CODE2.存储器初始化/保留DS,DB,DW,DBIT3.程序链接PUBILC,EXTRN,NAME4.汇编程序状态控制ORG,END5.选择段的伪指令RSEG,CSEG,DSEG,XSEG,ISEG,BSEG,USING二、伪指令具体说明1.符号定义伪指令1)SEGMENT伪指令格式:段名SEGMENT段类型说明:SEGMENT伪指令说明一个段。段就是一块程序代码或数据存储器。允许使用的段类型为:●CODE代码空间●DATA可以直接寻址的内部数据空间●XDATA外部数据空间●IDATA可以间接寻址的整个内部数据空间●BIT位空间例子:(段符号用于表达式时,代表被连接段的基地址)STACKSEGMENTIDATARSEGSTACKDS10H;保留16字节做堆栈MOVSP,#STACK-1;堆栈指针初始化22)EQU伪指令格式:符号名EQU表达式符号名EQU特殊汇编符号说明:EQU表示把一个数值或特殊汇编符号赋予规定的名字。一个表达式赋予一个符号,必须是不带向前访问的表达式。例子:N27EQU27;ACCUMEQUA;定义ACCUM代替特殊汇编符号A(累加器)HEREEQU$;HERE为当前位置计数器的值3)SET伪指令格式:符号名SET表达式符号名SET特殊汇编符号说明:SET类似EQU,区别在于可以用另一个SET伪指令在以后对定义过的符号重新定义。例子:COUNTSET0COUNTSETCOUNT+14)BIT伪指令格式:符号名BIT位地址说明:BIT伪指令把一个地址赋予规定的符号名。该符号类型取段类型BIT.例子:RSEGDATA_SEG;CONTROL:DS1ALATMBITCONTROL.0;OPEN_BOARDBITALATM+1;下一位RESET_BOARDBIT60H;下一个绝对的位5)DATA伪指令格式:符号名DATA表达式说明:DATA伪指令把片内的数据地址赋予所规定的符号名。符号段类型为DATA.例子:CONINDATASBUF;定义CONIN到串行口缓冲器的地址3TABLE_BASEDATA70H;把TABLE_BASE定义到位置70H6)XDATA伪指令格式:符号名XDATA表达式说明:XDATA伪指令把片外的数据地址赋予所规定的符号名。段类型为XDATA.例子:RSEGXSEG1ORG100HDATEDS5;定义DATE在偏离XSEG1的100H处TIMEXDATADATE+5;定义TIME为DATE后面的5个字节.7)IDATA伪指令格式:符号名IDATA表达式说明:IDATA伪指令将间接的内部数据地址赋予所规定的符号名。类型为IDATA.例子:BUFFERIDATA60HBUFFER_LENEQU20HBUFFER_ENDIDATABUFFER+BUFFER_LEN-18)CODE伪指令格式:符号名CODE表达式说明:CODE伪指令把一个代码地址赋予所规定的符号名。符号段类型为CODE。2.存储器初始化及保留1)DS伪指令格式:标号DS表达式说明:DS伪指令以字节为单位保留空间。可以用于除BIT类型段以外的任何段。2)DBIT伪指令格式:标号DBIT表达式说明:DBIT伪指令以位为单位保留空间。它仅用于BIT类型段。在BIT段中,位置计数器的基本单位是位而不是字节。3)DB伪指令4格式:标号DB表达式说明:DB伪指令用字节值对代码存储器初始化。段类型为CODE型,其表达式列表是一个由逗号(,)分开的一个或多个字节值或串。例子:AGE:DB‘MARY’,0,27ORIMES:DB1,2,3,54)DW伪指令格式:标号DW表达式说明:DW伪指令是用字(16位)值对代码存储器初始化。段类型为CODE型。该表达式可以是一个由逗号(,)分开的一个或多个字值,字值可为绝对的或可重新定位的表达式。若在列表中用了位置计数器$,它计算出正被初始化字的代码地址。列表中的每一项以它出现在该列表中的顺序放入存储器,其高字节在前,低字节在后。例子:ARRIVALDW710,‘AM’JUMP_TABLEDWGO_PROC,BREAK_PROC,DISPLAY_PROC;由产生地址的清单成一个跳转表。3.程序的链接1)PUBLIC伪指令格式:PUBLIC符号名列表说明:PUBLIC伪指令允许当前被汇编模块的符号为外部公用。符号名对于一个时,用逗号(,)分开。寄存器或段符号名(通过SEGMENT伪指令声明了的)不可以规定为PUBLIC。例子:PUBLICputctrl,put_data,liner2)EXTRN伪指令格式:ERTRN[段类型(符号名列表)],。。。说明:EXTRN伪指令列出当前模块中要访问的在其他模块中定义了的符号。这个伪指令可以出现在程序的任何地方。外部符号必须符合与上每一个符号相关的段类型。(这些类型是CODE,XDATA,DATA,IDATA,BIT及NUMBER,即一个无类型的符号)例子:EXTRNCODE(pntcrif,putstring,getnum),DATA(count,total)5EXTRNCODE(binas,ascbin),NUMBER(table-size)3)NAME伪指令格式:NAME模块名说明:NAME伪指令用来定义当前的程序模块,应放在该模块全部伪指令及指令代码的前面。若无NAME伪指令,则源文件名作为系统对其设置的名称,但不得以数字开始。4.汇编程序的状态控制1)END格式:END说明:END语句不得有标号,允许在它的行上出现一个注释。END语句是程序的最后一行,否则将产生一个错误。2)ORG格式:ORG表达式说明:ORG伪指令用来对汇编程序的位置计数器做修改,以设置一个新的程序起点。该表达式应当是一个绝对的或是可重新定位的表达式,它访问当前的段而不含向前的访问。ORG伪指令改变位置计数器,但它并不产生一个新段。如果当前段为绝对段,其值便是当前段的一个绝对地址,如果该段是可以重新定位的,其值是当前段基地址的偏移。例子:ORG($+10H)AND0FFF0H;将位置计数器设为下一个16字节边界ORG50:将位置计数器设置为505.段选择伪指令可重定位段:RSEG格式:RSEG段名说明:其段名一定要在前面使用SEGMENT伪指令定义过绝对段:CSEGXSEGDSEGISEGBSEG6格式:●CSEG[AT绝对地址];在代码地址空间选择一个绝对段●XSEG[AT绝对地址];在外部数据地址空间选择一个绝对段●DSEG[AT绝对地址];在内部数据地址空间选择一个绝对段●ISEG[AT绝对地址];在间接内部数据地址空间选择一个绝对段●BSEG[AT绝对地址];在位地址空间选择一个绝对段如果使用[AT绝对地址],汇编器便结束以前规定的绝对段并生成一个从该地址开始的新的绝对段。如果未规定一个绝对地址,该段类型的原来绝对段便继续生效。如果选择段类型为以前未定义的绝对段而且省略了绝对地址,则在位置0开始生成一个段。例子:BSEGAT70HDECIMAL_MODEDBIT1CHAT_MIDEDBIT16.USING伪指令格式:USING表达式说明:USING伪指令通知汇编器其后面的代码所使用的寄存器组。其表达式是一个数(0-3之间),它指向四个寄存器组之一。例子:USING3PUSHAR2;压入第三组的第二个寄存器USING1PUSHAR2;压入第一组的第二个寄存器751单片机汇编指令详解指令格式功能简述字节数周期一、数据传送类指令MOVA,Rn寄存器送累加器11MOVRn,A累加器送寄存器11MOVA,@Ri内部RAM单元送累加器11MOV@Ri,A累加器送内部RAM单元11MOVA,#data立即数送累加器21MOVA,direct直接寻址单元送累加器21MOVdirect,A累加器送直接寻址单元21MOVRn,#data立即数送寄存器21MOVdirect,#data立即数送直接寻址单元32MOV@Ri,#data立即数送内部RAM单元21MOVdirect,Rn寄存器送直接寻址单元22MOVRn,direct直接寻址单元送寄存器22MOVdirect,@Ri内部RAM单元送直接寻址单元22MOV@Ri,direct直接寻址单元送内部RAM单元22MOVdirect2,direct1直接寻址单元送直接寻址单元32MOVDPTR,#data1616位立即数送数据指针32MOVXA,@Ri外部RAM单元送累加器(8位地址)128MOVX@Ri,A累加器送外部RAM单元(8位地址)12MOVXA,@DPTR外部RAM单元送累加器(16位地址)12MOVX@DPTR,A累加器送外部RAM单元(16位地址)12MOVCA,@A+DPTR查表数据送累加器(DPTR为基址)12MOVCA,@A+PC查表数据送累加器(PC为基址)12XCHA,Rn累加器与寄存器交换11XCHA,@Ri累加器与内部RAM单元交换11XCHDA,direct累加器与直接寻址单元交换21XCHDA,@Ri累加器与内部RAM单元低4位交换11SWAPA累加器高4位与低4位交换11POPdirect栈顶弹出指令直接寻址单元22PUSHdirect直接寻址单元压入栈顶22二、算术运算类指令ADDA,Rn累加器加寄存器11ADDA,@Ri累加器加内部RAM单元11ADDA,direct累加器加直接寻址单元21ADDA,#data累加器加立即数219ADDCA,Rn累加器加寄存器和进位标志11ADDCA,@Ri累加器加内部RAM单元和进位标志11ADDCA,#data累加器加立即数和进位标志21ADDCA,direct累加器加直接寻址单元和进位标志21INCA累加器加111INCRn寄存器加111INCdirect直接寻址单元加121INC@Ri内部RAM单元加111INCDPTR数据指针加112DAA十进制调整11SUBBA,Rn累加器减寄存器和进位标志11SUBBA,@Ri累加器减内部RAM单元和进位标志11SUBBA,#data累加器减立即数和进位标志21SUBBA,direct累加器减直接寻址单元和进位标志21DECA累加器减111DECRn寄存器减111DEC@Ri内部RAM单元减111DECdirect直接寻址单元减121MULAB累加器乘寄存器B1410DIVAB累加器除以寄存器B14三、逻辑运算类指令ANLA,Rn累加器与寄存器11ANLA,@Ri累加器与内部RAM单元11ANLA,#data累加器与立即数21ANLA,direct累加器与直接寻址单元21ANLdirect,A直接寻址单元与累加器21ANLdirect,#data直接寻址单元与立即数31ORLA,Rn累加器或寄存器11ORLA,@Ri累加器或内部RAM单元11ORLA,#data累加器或立即数21ORLA,direct累加器或直接寻址单元21ORLdirect,A直接寻址单元或累加器21ORLdirect,#data直接寻址单元或立即数31XRLA,Rn累加器异或寄存器11XRLA,@Ri累加器异或内部RAM单元11XRLA,#data累加器异或立即数21XRLA,direct累加器异或直接寻址单元21XRLdirect,A直接寻址单元异或累加器21XRLdirect,#data直接寻址单元异或立即数32RLA累加器左循环移位11RLCA累加器连进位标志左循环移位1111RRA累加器右循环移位11RRCA累加器连进位标志右循环移位11CPLA累加器取反11CLRA累加器清零11四、控制转移类指令类ACCALLaddr112KB范围内绝对调用22AJMPaddr112KB范围内绝对转移22LCALLaddr162KB范围内长调用32LJMPaddr162KB范围内长转移32SJMPrel相对短转移22JMP@A+DPTR相对长转移12RET子程序返回12RETI中断返回12JZrel累加器为零转移22JNZrel累加

1 / 14
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功