51单片机汇编指令总结

51单片机汇编指令总结
51单片机汇编指令总结

51单片机汇编指令总结

51单片机汇编指令总结

数据传输指令

一.片内RAM数据传输指令

1.以累加器A为目的操作数的指令:MOVA,RnMOVA,directMOVA,@RiMOVA,#data

2.以寄存器Rn为目的操作数的指令:MOVRn,AMOVRn,directMOVRn,data

3.以直接地址为目的操作数的指令:MOVdirect,AMOVdirect,RnMOVdirect1,derect2MOVdirect,@RiMOVdirect,#data

4.间接地址为目的操作数的指令:MOV@Ri,AMOV@Ri,directMOV@Ri,#data

5.十六位数据传送指令:MOVDPTR,#data16

二.累加器A与片外RAM数据传送指令:MOVXA,@RiMOVXA,@DPTRMOVX@Ri,AMOVX@DPTR,A三.查表寻址:MOVCA,@A+DPTR(先PC←(PC)+1,后A←((A)+(DPTR)))+MOVCA,@A+PC(先PC←(PC)+1,后A←((A)+(PC)))四.交换指令:

1.字节交换指令:

XCHA,RnXCHA,directXCHA,@Ri

2.半字节交换指令:XCHDA,@Ri

3.累加器半字节交换指令:SWAPA五.栈操作指令:1.PUSH(入栈指令)PUSHdirect2.POP(出栈指令)POPdirect

算术运算指令:

一.加法减法指令:

1.加法指令:

ADDA,RnADDA,directADDA,@RiADDA,#data2.带进位加法指令:

ADDCA,RnA←(A)+(Rn)+CYADDCA,directA←(A)+(direct)+CYAD DCA,@RiA←(A)+((Ri))+CYADDCA,#dataA←(A)+(data)+CY3.带借位减法指令:

SUBBA,RnA←(A)-CY-(Rn)SUBBA,directA←(A)-CY-(direct)SUBBA,

@RiA←(A)-CY-((Ri))SUBBA,#dataA←(A)-CY-#data二.乘法除法指令:

1.乘法指令:

MULABBA←(A)×(B)高字节放在B中,低字节放在A中2.除法指令:

DIVABA←(A)÷(B)的商,(B)←(A)÷(B)的余数三.加1减1指令:

1.加1指令:

INCAA←(A)+1INCRnRn←(Rn)+1

INCdirectdirect←(direct)+1INC@Ri(Ri)←((Ri))+1INCDPTRDPTR←(DPTR)+12.减1指令:DECADECRnDECdirectDEC@Ri四.十进制调制指令:

DAA调整累加器A的内容为BCD码

逻辑操作指令:

一.逻辑与、或、异或指令:1.逻辑与指令:ANLA,RnANLA,directANLA,@RiANLA,#data2.逻辑或这令:ORLA,RnORLA,directORLA,@RiORLA,#dataORLdirect,AORLdirect,#data3.逻辑异或指令:XRLA,RnXRLA,directXRLA,@RiXRLA,#dataXRLdirect,AXRLdirect,#data二.清零、取反指令:1.累加器A清零指令:CRLA2.累加器A取反指令:CPLA

三.循环位移指令:1.累加器A循环左移指令:RLA2.累加器A循环右移指令:RRA3.累加器A连同进位位循环左移指令:RLCA4.累加器A连同进位位循环右移指令:RRCA控制转移指令:

一.无条件转移指令:

1.绝对转移指令:

AJMPaddr11(先PC+2,然后将addr11的低十位传给PC,PC的高六位不变) 2.长转移指令:

LJMPaddr16(用addr16的值替换PC的值)3.相对转移(短转移)指令:

SJMPrel(带符号的偏移字节数)(PC+2,再加rel赋值给PC)4.间接转移指令:

JMP@A+DPTR(A)+(DPTR)→(PC)

二.条件转移指令:

1.累加器判零转移指令:

JZrel先PC+2;后判断,A为0时转移,PC+rel赋值给PC;否则顺序执行

JNZrel先PC+2,后判断,A不为0时转移,PC+rel赋值给PC;否则顺序执行 2.比较转移指令:CJNE目的操作数,源操作数,relCJNEA,direct,rel 先PC+3传回PC,再比较目的操作数和原操作数CJNEA,#data,rel目>源时,程序转移,PC+rel传回PC且CY=0CJNERn,#data,rel目=源时,程序顺序执行CJNE@Ri,#data,rel目ORLC,bitORLC,bit

三.位清零、置一、取反指令:

1.位清零指令:

CLRCCLRbit2.位置一指令:

SETBCSTEBbi3.位取反指令:

CPLCCPLbit

这类指令的功能执行的结果不影响标志位,当直接寻址位地址为端口P0~P3中的某一位时,具有“读-改-写”的功能。

四.位条件转移指令:

1.位累加器C判断转移指令

JCrel先pc+2后判断,(C)=1时,则PC+rel赋值给PC,反之顺序执行JNCrel 先pc+2后判断,(C)=0时,则PC+rel赋值给PC,反之顺序执行2.判位变量转移指令:

JBbit,rel先PC+3,判断,若(bit)=1,PC+rel赋值给PC,反之顺序

往下执行

JNBbit,rel先PC+3,判断,若(bit)=0,PC+rel赋值给PC,反之顺

序往下执行

3.判位变量转移指令:

JBCbit,rel先PC+3,判断,若(bit)=0,PC+rel赋值给PC,且bit

←0,反之顺序往下执行

扩展阅读:51单片机汇编指令总结

单片机指令功能一览表助记符代码说明

MOVA,RnE8~EF寄存器A

MOVA,directE5dircet直接字节送AMOVA,@RiER~E7间接RAM送

AMOVA,#data74data立即数送AMOVRn,AF8~FFA送寄存器

MOVRn,dircetA8~AFdircet直接字节送寄存器MOVRn,#data78~7Fdata立即数送寄存器MOVdircet,AF5dircetA送直接字节

MOVdircet,Rn88~8Fdircet寄存器送直接字节

MOVdircet1,dircet285dircet1dircet2直接字节送直接字节

MOVdircet,@Ro86~87间接RAM送直接字节MOVdircet,#data75dircetdata立即数送直接字节MOV@Ri,AF6~F7A送间接RAM

MOV@Ri,#data76~77data直接字节送间接RAMMOV@Ri,#data76~77data立即数送间接RAMMOVDPTR,#data1690data15~816位常数送数据指针data7~0

MOVCA,@A+DPTR93由((A)+(DPTR))寻址的程序存贮器字节选A

MOVCA,@A+PC83由((A)+(PC));寻址的程序存贮器字节送AMOVXA,@RiE2~E3送外部数据(8位地址)送AMOVXA,@DPTRE0送外部数据(16位地址)送

AMOVX@Ri,AF2~F3A送外部数据(8位地址)MOVX@DPTR,AF0A送外部数据(16位地址)PUSHdircetC0dircet直接字节进栈,SP加1POPdircetD0dircet直接字节退栈,SP减1XCHA,RnC8~CF交换A和寄存器XCHA,dircetC5dircet交换A和直接字节XCHA,@RiC6~C7交换A和间接RAMXCHA,@RiD6~D7交换A和间接RAM的低位SWAPAC

算术操作(A的二个半字节交换)ADDA,Rn28~2F寄存器加到

AADDA,dircet25dircet直接字节加到AADDA,@Ri26~27间接RAM加到

AADDA,#data24data立即数加到AADDA,Rn38~3F寄存器和进位位加到

AADDA,dircet35dircet直接字节和进位位加到AADDA,@Ri36~37间接字节和进位位加到AADDA,data34data立即数和进位位加到AADDA,Rn98~9FA减去寄存器和进位位ADDA,dircet95dircetA减去直接字节和进位位ADDA,@Ri36~37间接RAM和进位位加到AADDA,data34data立即数和进位位加到ASUBBA,Rn98~9FA减去寄存器和进位位SUBBA,dircet95dircetA减去直接字节和进位位SUBBA,@Ri96~97A 减去间接RAM和进位位SUBBA,#data94dataA减去立即数和进位位INCA04A加1 INCRn08~0F寄存器加1INCdircet05dircet直接字节加1INC@Ri06~07间接RAM 加1DECA14A减1

DECRn18~1F寄存器减1DECdircet15dircet直接字节减1DEC@Ri16~17间接RAM 减1INCDPTRA3数据指针加1MULABA4A乘以BDIVAB84A除以B

DAAD4A的十进制加法调整逻辑操作

ANLA,Rn58~5F寄存器“与”到AANLA,dircet55dircet直接字节“与”到AANLA,@Ri56~57间接RAm“与”到AANLA,#data54data立即数“与”到AANLdircetA52dircetA“与”到直接字节

ANLdircet,#data53dircetdata立即数“与”到直接字节ORLA,Rn48~4F寄存器“或”到AORLA,dircet45dircet直接字节“或”到AORLA,@Ri46~47间接RAM“或”到AORLA,#data44data立即数“或”到

AORLdircet,A42dircetA“或”到直接字节

ORLdircet,#data43dircetdata立即数“或”到直接字节XRLA,Rn68~6F寄存器“异或”到AXRLA,dircet65dircet直接字节“异或”到AXRLA,@Ri66~67间接RAM“异或”到AXRLA,#data64data立即数“异或”到

AXRLdircetA62dircetA“异或”到直接字节

XRLdircet,#data63dircetdata立即数“异或”到直接字节CLRAE4清零CPLAF4A取反RLA23A左环移

RLCA33A通过进位左环移RRA03A右环移

RRCA13A通过进位右环移

控制程序转移

ACALLaddr11*1addr(a7~a0)绝对子程序调用LCALLaddr1612addr(15~8)长子程序调用addr(7~0)

RET22子程序调用返回RETIaddr1132中断调用返回

AJMPadd r11△1addr(a7~a6)绝对转移LJMPaddr1602addr(15~8)长转移

addr(7~0)

SJMPrel80rel短转移,相对转移

JMP@A+DPTR73相对于DPTR间接转移JZrel60relA为零转移JNZrel70relA为零转移

CJNEA,dircet,relB5dircetrel直接字节与A比较,不等则转移

CJNEA,#data,relB4datarel立即数与A比较,不等则转移

CJNEA,Rn,#data,relB8~BFdatarel立即数与寄存器比较,不等则转移

CJNE@Ri,#data,relB6~B7datarel立即数与间接RAM比较,不等则转移DJNZRn,relD8~DFrel寄存器减1,不为零则转移DJNZdircet,relB5dircetrel 直接字节减1,不为零则转移NOP00空操作*=a10a9a8l△=a10a9a80

布尔变量操作CLRCC3清零进位CLRbitC2清零直接位SETBCD3置位进位SETBbitD2置位直接位CPLCB3进位取反CPLbitB2直接位取反

ANLC,bit82dit直接数“与”到进位ANLC,/bitB0直接位的反“与”到进位ORLC,bit72bit直接位“或”到进位ORLC,/bitA0bit直接位的反“或”到进位MOVC,bitA2bit直接位送进位MOVbit,C92bit进位送直接位JCrel40rel进位位为1转移JNCrel50rel进位位为0转移JBbit,rel20bitrel直接位为1相对转移JNBbit,rel30bitrel直接位为0相对转移

JBCbit,rel10bitrel直接位为1相对转移,然后清零该位

[1].循环移位指令(4条)RLA;累加器A中的内容左移一位RRA;累加器A中的内容右移一位

RLCA;累加器A中的内容连同进位位CY左移一位RRCA;累加器A中的内容连同进位位CY右移一位

[2].累加器半字节交换指令(1条)SWAPA;累加器中的内容高低半字节互换

[3].求反指令(1条)

CPLA;累加器中的内容按位取反

[4].清零指令(1条)

CLRA;0→(A),累加器中的内容清0

[5].逻辑与操作指令(6条)

ANLA,data;累加器A中的内容和直接地址单元中的内容执行与逻辑操作。结果存在寄存器A中。

ANLdata,#data;直接地址单元中的内容和立即数执行与逻辑操作。结果存在直接地址单元中。

ANLA,#data;累加器A的内容和立即数执行与逻辑操作。结果存在累加器A中。ANLA,Rn;累加器A的内容和寄存器Rn中的内容执行与逻辑操作。结果存在累加器A中。

ANLdata,A;直接地址单元中的内容和累加器A的内容执行与逻辑操作。结果存在直接地址单元中。

ANLA,@Ri;累加器A的内容和工作寄存器Ri指向的地址单元中的内容执行与逻辑操作。结果存在累加器A中。

[6].逻辑或操作指令(6条)

这组指令的作用是将两个单元中的内容执行逻辑或操作。如果直接地址是I/O 地址,则为“读修改写”操作。

ORLA,data;累加器A中的内容和直接地址单元中的内容执行逻辑或操作。结果存在寄存器A中。

ORLdata,#data;直接地址单元中的内容和立即数执行逻辑或操作。结果存在直接地址单元中。

ORLA,#data;累加器A的内容和立即数执行逻辑或操作。结果存在累加器A中。ORLA,Rn;累加器A的内容和寄存器Rn中的内容执行逻辑或操作。结果存在累加器A中。

ORLdata,A;直接地址单元中的内容和累加器A的内容执行逻辑或操作。结果存在直接地址单元中。

ORLA,@Ri;累加器A的内容和工作寄存器Ri指向的地址单元中的内容执行逻辑或操作。结果存在累加器A中。

[7].逻辑异或操作指令(6条)

XRLA,data;累加器A中的内容和直接地址单元中的内容执行逻辑异或操作。结果存在寄存器A中。

XRLdata,#data;直接地址单元中的内容和立即数执行逻辑异或操作。结果存在直接地址单元中。

XRLA,#data;累加器A的内容和立即数执行逻辑异或操作。结果存在累加器A 中。

XRLA,Rn;累加器A的内容和寄存器Rn中的内容执行逻辑异或操作。结果存在累加器A中。

XRLdata,A;直接地址单元中的内容和累加器A的内容执行逻辑异或操作。结果存在直接地址单元中。

XRLA,@Ri;累加器A的内容和工作寄存器Ri指向的地址单元中的内容执行逻辑异或操作。结果存在累加器A中

控制转移类指令分析

[1].无条件转移指令(4条)LJMPaddr16;addr16→(PC),给程序计数器赋予新值(16位地址)AJMPaddr11;(PC)+2→(PC),addr11→(PC10-0)程序计数器赋予新值(11位地址),(PC15-11)不改变

SJMPrel;(PC)+2+r el→(PC)当前程序计数器先加上2再加上偏移量给程序计数器赋予新值

JMP@A+DPTR;(A)+(DPTR)→(PC),累加器所指向地址单元的值加上数据指针的值给程序计数器赋予新值

[2].条件转移指令(8条)

JZrel;A=0,(PC)+2+rel→(PC),累加器中的内容为0,则转移到偏移量所指向的地址,否则程序往下执行

JNZrel;A≠0,(PC)+2+rel→(PC),累加器中的内容不为0,则转移到偏移量所指向的地址,否则程序往下执行

CJNEA,data,rel;A≠(data),(PC)+3+rel→(PC),累加器中的内容不等于直接地址单元的内容,则转移到偏移量所指向的地址,否则程序往下执行CJNEA,#data,rel;A≠#data,(PC)+3+rel→(PC),累加器中的内容不等于立即数,则转移到偏移量所指向的地址,否则程序往下执行

CJNERn,#data,rel;A≠#data,(PC)+3+rel→(PC),工作寄存器Rn中的内容不等于立即数,则转移到偏移量所指向的地址,否则程序往下执行

CJNE@Ri,#dat a,rel;A≠#data,(PC)+3+rel→(PC),工作寄存器Ri指向地址单元中的内容不等于立即数,则转移到偏移量所指向的地址,否则程序往下执行布尔变量操作指令分析

[1].位传送指令(2条)

MOVC,bit;bit→CY,某位数据送CYMOVbit,C;CY→bit,CY数据送某位

[2].位置位复位指令(4条)CLRC;0→CY,清CYCLRbit;0→bit,清某一位SETBC;1→CY,置位CYSETB bit;1→bit,置位某一位

[3].位运算指令(6条)

ANLC,bit;(CY)∧(bit)→CYANLC,/bit;(CY)∧()→CYORLC,bit;(CY)∨(bit)→C YORLC,/bit;(CY)∧()→CYCPLC;()→CYCPLbit;()→bir

[4].位控制转移指令(5)

JCrel;(CY)=1转移,(PC)+2+rel→PC,否则程序往下执行,(PC)+2→PC。JNCrel;(CY)=0转移,(PC)+2+rel→PC,否则程序往下执行,(PC)+2→PC。JBbit,rel;位状态为1转移。JNBbit,rel;位状态为0转移。

JBCbit,rel;位状态为1转移,并使该位清“0”。

相关主题
相关文档
最新文档