5/19/2020汪哲2012.3.18整理单片机指令集51单片机汇编指令集(指令集带英文翻译)一、数据传送类指令(7种助记符)MOV(英文为Move):对内部数据寄存器RAM和特殊功能寄存器SFR的数据进行传送;MOVC(MoveCode)读取程序存储器数据表格的数据传送;MOVX(MoveExternalRAM)对外部RAM的数据传送;XCH(Exchange)字节交换;XCHD(Exchangelow-orderDigit)低半字节交换;PUSH(PushontoStack)入栈;POP(PopfromStack)出栈;二、算术运算类指令(8种助记符)ADD(Addition)加法;ADDC(AddwithCarry)带进位加法;SUBB(SubtractwithBorrow)带借位减法;DA(DecimalAdjust)十进制调整;INC(Increment)加1;DEC(Decrement)减1;MUL(Multiplication、Multiply)乘法;DIV(Division、Divide)除法;三、逻辑运算类指令(10种助记符)ANL(ANDLogic)逻辑与;ORL(ORLogic)逻辑或;XRL(Exclusive-ORLogic)逻辑异或;CLR(Clear)清零;CPL(Complement)取反;RL(Rotateleft)循环左移;RLC(RotateLeftthroughttheCarryflag)带进位循环左移;RR(RotateRight)循环右移;RRC(RotateRightthroughttheCarryflag)带进位循环右移;SWAP(Swap)低4位与高4位交换;四、控制转移类指令(17种助记符)ACALL(AbsolutesubroutineCall)子程序绝对调用;LCALL(LongsubroutineCall)子程序长调用;RET(Returnfromsubroutine)子程序返回;RETI(ReturnfromInterruption)中断返回;SJMP(ShortJump)短转移;AJMP(AbsoluteJump)绝对转移;LJMP(LongJump)长转移;CJNE(CompareJumpifNotEqual)比较不相等则转移;DJNZ(DecrementJumpifNotZero)减1后不为0则转移;JZ(JumpifZero)结果为0则转移;JNZ(JumpifNotZero)结果不为0则转移;JC(JumpiftheCarryflagisset)有进位则转移;5/19/2020汪哲2012.3.18整理单片机指令集JNC(JumpifNotCarry)无进位则转移;JB(JumpiftheBitisset)位为1则转移;JNB(JumpiftheBitisNotset)位为0则转移;JBC(JumpiftheBitissetandClearthebit)位为1则转移,并清除该位;NOP(NoOperation)空操作;五、位操作指令(1种助记符)CLR位清零;SETB(SetBit)位置1。8种常用伪指令1.ORG16位地址;此指令用在原程序或数据块的开始,指明此语句后面目标程序或数据块存放的起始地址。2.[标号:]DB字节数据项表;将项表中的字节数据存放到从标号开始的连续字节单元中。例如:SEG:DB88H,100,“7”,“C”3.[标号:]DW双字节数据项表;定义16位地址表,16地址按低位地址存低位字节,高位地址存高位字节。例如:TAB:DW1234H,7BH4.名字EQU表达式或名字=表达式;用与给一个表达式赋值或给字符串起名字。之后名字可用做程序地址,数据地址或立即数地址使用。名字必须是一字母开头的字母数字串。例如:COUNT=10或SPACEEQU10H5.名字DATA直接字节地址;给8位内部RAM单元起个名字,名字必须是一字母开头的字母数字串。同一单元可起多个名字。例如:ERRORDATA80H6.名字XDATA直接字节地址;给8位外部RAM起个名字,名字规定同DATA伪指令。例如:IO_PORTXDATA0CF04H7.名字BIT位指令;给一可位寻址的位单元起个名字,规定同DATA伪指令。例如:SWTBIT30H8.[标号:]END;指出源程序到此结束,汇编对其后的程序语句不予理睬。源程序只在主程序最后使用一个END。1.数据传送指令(30条)MOVA,Rn寄存器送AMOVA,direct直接字节送AMOVA,@Ri间接RAM送AMOVA,#data立接数送AMOVRn,AA送寄存器5/19/2020汪哲2012.3.18整理单片机指令集MOVRn,direct直接数送寄存器MOVRn,#data立即数送寄存器MOVdirect,AA送直接字节MOVdirect,Rn寄存器送直接字节MOVdirect,direct直接字节送直接字节MOVdirect,@Ri间接Rn送直接字节MOVdrect,#data立即数送直接字节MOV@Ri,AA送间接RnMOV@Ri,direct直接字节送间接RnMOV@Ri,#data立即数送间接RnMOVDPTR,#data1616位常数送数据指针MOVC,bit直接位送进位位MOVbit,C进位位送直接位MOVCA,@A+DPTRA+DPTR寻址程序存贮字节送AMOVCA,@A+PCA+PC寻址程序存贮字节送AMOVXA,@Ri外部数据送A(8位地)MOVXA,@DPTR外部数据送A(16位地址)MOVX@Ri,AA送外部数据(8位地址)MOVX@DPTR,AA送外部数据(16位地址)1PUSHdirect直接字节进栈道,SP加1POPdirect直接字节出栈,SP减1XCHA,Rn寄存器与A交换XCHA,direct直接字节与A交换XCHA,@Ri间接Rn与A交换XCHDA,@Ri间接Rn与A低半字节交换2.逻辑运算指令(35条)ANLA,Rn寄存器与到AANLA,direct直接字节与到AANLA,@Ri间接RAM与到AANLA,#data立即数与到AANLdirect,AA与到直接字节ANLdirect,#data立即数与到直接字节ANLC,bit直接位与到进位位ANLC,/bit直接位的反码与到进位位ORLA,Rn寄存器或到AORLA,direct直接字节或到AORLA,@Ri间接RAM或到AORLA,#data立即数或到AORLdirect,AA或到直接字节ORLdirect,#data立即数或到直接字节ORLC,bit直接位或到进位位ORLC,/bit直接位的反码或到进位位XRLA,Rn寄存器异或到AXRLA,direct直接字节异或到A5/19/2020汪哲2012.3.18整理单片机指令集XRLA,@Ri间接RAM异或到AXRLA,#data立即数异或到AXRLdirect,AA异或到直接字节XRLdirect,#data立即数异或到直接字节SETBC进位位置SETBbit直接位置CLRAA清0CLRC进位位清0CLRbit直接位清0CPLAA求反码CPLC进位位取反CPLbit直接位取反RLAA循环左移一位RLCAA带进位左移一位RRAA右移一位RRCAA带进位右移一位SWAPAA半字节交换3.算术运算指令(24条)ADDA,Rn寄存器加到AADDA,direct直接字节加到AADDA,@Ri间接RAM加到AADDA,#data立即数加到AADDCA,Rn寄存器带进位加到AADDCA,direct直接字节带进位加到AADDCA,@Ri间接RAM带进位加到AADDCA,#data立即数带进位加到ASUBBA,Rn从A中减去寄存器和进位SUBBA,direct从A中减去直接字节和进位SUBBA,@Ri从A中减去间接RAM和进位SUBBA,#data从A中减去立即数和进位INCAA加1INCRn寄存器加1INCdirect直接字节加1INC@Ri间接RAM加1INCDPTR数据指针加1DECAA减1DECRn寄存器减1DECdirect直接字节减1DEC@Ri间接RAM减1MULABA乘BDIVABA被B除DAAA十进制调整4.转移指令(22条)AJMPaddr11绝对转移5/19/2020汪哲2012.3.18整理单片机指令集LJMPaddr16长转移SJMPrel短转移2280JMP@A+DPTR相对于DPTR间接转移JZrel若A=0则转移JNZrel若A≠0则转移JCrel若C=1则转移JNCrel若C≠1则转移JBbit,rel若直接位=1则转移JNBbit,rel若直接位=0则转移JBCbit,rel若直接位=1则转移且清除CJNEA,direct,rel直接数与A比较,不等转移CJNEA,#data,rel立即数与A比较,不等转移CJNE@Ri,#data,rel立即数与间接RAM比较,不等转移CJNERn,#data,rel立即数与寄存器比较不等转移DJNZRn,rel寄存器减1不为0转移DJNZdirect,rel直接字节减1不为0转移ACALLaddr11绝对子程序调用LCALLaddr16子程序调用RET子程序调用返回RETI中断程序调用返回NOP空操作