51單片機(jī)匯編指令總結(jié)
數(shù)據(jù)傳輸指令
一.片內(nèi)RAM數(shù)據(jù)傳輸指令
1.以累加器A為目的操作數(shù)的指令:MOVA,RnMOVA,directMOVA,@RiMOVA,#data
2.以寄存器Rn為目的操作數(shù)的指令:MOVRn,AMOVRn,directMOVRn,data
3.以直接地址為目的操作數(shù)的指令:MOVdirect,AMOVdirect,RnMOVdirect1,derect2MOVdirect,@RiMOVdirect,#data
4.間接地址為目的操作數(shù)的指令:MOV@Ri,AMOV@Ri,directMOV@Ri,#data5.十六位數(shù)據(jù)傳送指令:MOVDPTR,#data16
二.累加器A與片外RAM數(shù)據(jù)傳送指令: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.字節(jié)交換指令:
XCHA,RnXCHA,directXCHA,@Ri
2.半字節(jié)交換指令:XCHDA,@Ri3.累加器半字節(jié)交換指令:SWAPA五.棧操作指令:1.PUSH(入棧指令)PUSHdirect2.POP(出棧指令)POPdirect
算術(shù)運(yùn)算指令:
一.加法減法指令:
1.加法指令:
ADDA,RnADDA,directADDA,@RiADDA,#data2.帶進(jìn)位加法指令:
ADDCA,RnA←(A)+(Rn)+CYADDCA,directA←(A)+(direct)+CYADDCA,@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)高字節(jié)放在B中,低字節(jié)放在A中2.除法指令:
DIVABA←(A)÷(B)的商,(B)←(A)÷(B)的余數(shù)三.加1減1指令:
1.加1指令:
INCAA←(A)+1INCRnRn←(Rn)+1
INCdirectdirect←(direct)+1INC@Ri(Ri)←((Ri))+1INCDPTRDPTR←(DPTR)+12.減1指令:DECADECRnDECdirectDEC@Ri四.十進(jìn)制調(diào)制指令:
DAA調(diào)整累加器A的內(nèi)容為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
三.循環(huán)位移指令:1.累加器A循環(huán)左移指令:RLA2.累加器A循環(huán)右移指令:RRA3.累加器A連同進(jìn)位位循環(huán)左移指令:RLCA4.累加器A連同進(jìn)位位循環(huán)右移指令:RRCA控制轉(zhuǎn)移指令:
一.無(wú)條件轉(zhuǎn)移指令:
1.絕對(duì)轉(zhuǎn)移指令:
AJMPaddr11(先PC+2,然后將addr11的低十位傳給PC,PC的高六位不變)
2.長(zhǎng)轉(zhuǎn)移指令:
LJMPaddr16(用addr16的值替換PC的值)3.相對(duì)轉(zhuǎn)移(短轉(zhuǎn)移)指令:
SJMPrel(帶符號(hào)的偏移字節(jié)數(shù))(PC+2,再加rel賦值給PC)4.間接轉(zhuǎn)移指令:
JMP@A+DPTR(A)+(DPTR)→(PC)
二.條件轉(zhuǎn)移指令:
1.累加器判零轉(zhuǎn)移指令:
JZrel先PC+2;后判斷,A為0時(shí)轉(zhuǎn)移,PC+rel賦值給PC;否則順序執(zhí)行
JNZrel先PC+2,后判斷,A不為0時(shí)轉(zhuǎn)移,PC+rel賦值給PC;否則順序執(zhí)
行2.比較轉(zhuǎn)移指令:CJNE目的操作數(shù),源操作數(shù),relCJNEA,direct,rel先PC+3傳回PC,再比較目的操作數(shù)和原操作數(shù)CJNEA,#data,rel目>源時(shí),程序轉(zhuǎn)移,PC+rel傳回PC且CY=0CJNERn,#data,rel目=源時(shí),程序順序執(zhí)行CJNE@Ri,#data,rel目ORLC,bitORLC,bit
三.位清零、置一、取反指令:
1.位清零指令:
CLRCCLRbit2.位置一指令:
SETBCSTEBbi3.位取反指令:
CPLCCPLbit
這類(lèi)指令的功能執(zhí)行的結(jié)果不影響標(biāo)志位,當(dāng)直接尋址位地址為端口P0~P3中的某一位時(shí),具有“讀-改-寫(xiě)”的功能。
四.位條件轉(zhuǎn)移指令:
1.位累加器C判斷轉(zhuǎn)移指令
JCrel先pc+2后判斷,(C)=1時(shí),則PC+rel賦值給PC,反之順序執(zhí)行JNCrel先pc+2后判斷,(C)=0時(shí),則PC+rel賦值給PC,反之順序執(zhí)行2.判位變量轉(zhuǎn)移指令:
JBbit,rel先PC+3,判斷,若(bit)=1,PC+rel賦值給PC,反之順序
往下執(zhí)行
JNBbit,rel先PC+3,判斷,若(bit)=0,PC+rel賦值給PC,反之順
序往下執(zhí)行
3.判位變量轉(zhuǎn)移指令:
JBCbit,rel先PC+3,判斷,若(bit)=0,PC+rel賦值給PC,且bit
←0,反之順序往下執(zhí)行
擴(kuò)展閱讀:51單片機(jī)匯編指令總結(jié)
單片機(jī)指令功能一覽表助記符代碼說(shuō)明
MOVA,RnE8~EF寄存器A
MOVA,directE5dircet直接字節(jié)送AMOVA,@RiER~E7間接RAM送AMOVA,#data74data立即數(shù)送AMOVRn,AF8~FFA送寄存器
MOVRn,dircetA8~AFdircet直接字節(jié)送寄存器MOVRn,#data78~7Fdata立即數(shù)送寄存器MOVdircet,AF5dircetA送直接字節(jié)
MOVdircet,Rn88~8Fdircet寄存器送直接字節(jié)
MOVdircet1,dircet285dircet1dircet2直接字節(jié)送直接字節(jié)MOVdircet,@Ro86~87間接RAM送直接字節(jié)MOVdircet,#data75dircetdata立即數(shù)送直接字節(jié)MOV@Ri,AF6~F7A送間接RAM
MOV@Ri,#data76~77data直接字節(jié)送間接RAMMOV@Ri,#data76~77data立即數(shù)送間接RAMMOVDPTR,#data1690data15~816位常數(shù)送數(shù)據(jù)指針data7~0
MOVCA,@A+DPTR93由((A)+(DPTR))尋址的程序存貯器字節(jié)選A
MOVCA,@A+PC83由((A)+(PC));尋址的程序存貯器字節(jié)送AMOVXA,@RiE2~E3送外部數(shù)據(jù)(8位地址)送AMOVXA,@DPTRE0送外部數(shù)據(jù)(16位地址)送AMOVX@Ri,AF2~F3A送外部數(shù)據(jù)(8位地址)MOVX@DPTR,AF0A送外部數(shù)據(jù)(16位地址)PUSHdircetC0dircet直接字節(jié)進(jìn)棧,SP加1POPdircetD0dircet直接字節(jié)退棧,SP減1XCHA,RnC8~CF交換A和寄存器XCHA,dircetC5dircet交換A和直接字節(jié)XCHA,@RiC6~C7交換A和間接RAMXCHA,@RiD6~D7交換A和間接RAM的低位SWAPAC
算術(shù)操作(A的二個(gè)半字節(jié)交換)ADDA,Rn28~2F寄存器加到AADDA,dircet25dircet直接字節(jié)加到AADDA,@Ri26~27間接RAM加到AADDA,#data24data立即數(shù)加到AADDA,Rn38~3F寄存器和進(jìn)位位加到AADDA,dircet35dircet直接字節(jié)和進(jìn)位位加到AADDA,@Ri36~37間接字節(jié)和進(jìn)位位加到AADDA,data34data立即數(shù)和進(jìn)位位加到AADDA,Rn98~9FA減去寄存器和進(jìn)位位ADDA,dircet95dircetA減去直接字節(jié)和進(jìn)位位ADDA,@Ri36~37間接RAM和進(jìn)位位加到AADDA,data34data立即數(shù)和進(jìn)位位加到ASUBBA,Rn98~9FA減去寄存器和進(jìn)位位SUBBA,dircet95dircetA減去直接字節(jié)和進(jìn)位位SUBBA,@Ri96~97A減去間接RAM和進(jìn)位位SUBBA,#data94dataA減去立即數(shù)和進(jìn)位位INCA04A加1
INCRn08~0F寄存器加1INCdircet05dircet直接字節(jié)加1INC@Ri06~07間接RAM加1DECA14A減1
DECRn18~1F寄存器減1DECdircet15dircet直接字節(jié)減1DEC@Ri16~17間接RAM減1INCDPTRA3數(shù)據(jù)指針加1MULABA4A乘以BDIVAB84A除以B
DAAD4A的十進(jìn)制加法調(diào)整邏輯操作
ANLA,Rn58~5F寄存器“與”到AANLA,dircet55dircet直接字節(jié)“與”到AANLA,@Ri56~57間接RAm“與”到AANLA,#data54data立即數(shù)“與”到AANLdircetA52dircetA“與”到直接字節(jié)
ANLdircet,#data53dircetdata立即數(shù)“與”到直接字節(jié)ORLA,Rn48~4F寄存器“或”到AORLA,dircet45dircet直接字節(jié)“或”到AORLA,@Ri46~47間接RAM“或”到AORLA,#data44data立即數(shù)“或”到AORLdircet,A42dircetA“或”到直接字節(jié)
ORLdircet,#data43dircetdata立即數(shù)“或”到直接字節(jié)XRLA,Rn68~6F寄存器“異或”到AXRLA,dircet65dircet直接字節(jié)“異或”到AXRLA,@Ri66~67間接RAM“異或”到AXRLA,#data64data立即數(shù)“異或”到AXRLdircetA62dircetA“異或”到直接字節(jié)
XRLdircet,#data63dircetdata立即數(shù)“異或”到直接字節(jié)CLRAE4清零CPLAF4A取反RLA23A左環(huán)移
RLCA33A通過(guò)進(jìn)位左環(huán)移RRA03A右環(huán)移
RRCA13A通過(guò)進(jìn)位右環(huán)移
控制程序轉(zhuǎn)移
ACALLaddr11*1addr(a7~a0)絕對(duì)子程序調(diào)用LCALLaddr1612addr(15~8)長(zhǎng)子程序調(diào)用addr(7~0)
RET22子程序調(diào)用返回RETIaddr1132中斷調(diào)用返回
AJMPaddr11△1addr(a7~a6)絕對(duì)轉(zhuǎn)移LJMPaddr1602addr(15~8)長(zhǎng)轉(zhuǎn)移addr(7~0)
SJMPrel80rel短轉(zhuǎn)移,相對(duì)轉(zhuǎn)移
JMP@A+DPTR73相對(duì)于DPTR間接轉(zhuǎn)移JZrel60relA為零轉(zhuǎn)移JNZrel70relA為零轉(zhuǎn)移
CJNEA,dircet,relB5dircetrel直接字節(jié)與A比較,不等則轉(zhuǎn)移CJNEA,#data,relB4datarel立即數(shù)與A比較,不等則轉(zhuǎn)移
CJNEA,Rn,#data,relB8~BFdatarel立即數(shù)與寄存器比較,不等則轉(zhuǎn)移CJNE@Ri,#data,relB6~B7datarel立即數(shù)與間接RAM比較,不等則轉(zhuǎn)移DJNZRn,relD8~DFrel寄存器減1,不為零則轉(zhuǎn)移DJNZdircet,relB5dircetrel直接字節(jié)減1,不為零則轉(zhuǎn)移NOP00空操作*=a10a9a8l△=a10a9a80
布爾變量操作CLRCC3清零進(jìn)位CLRbitC2清零直接位SETBCD3置位進(jìn)位SETBbitD2置位直接位CPLCB3進(jìn)位取反CPLbitB2直接位取反
ANLC,bit82dit直接數(shù)“與”到進(jìn)位ANLC,/bitB0直接位的反“與”到進(jìn)位ORLC,bit72bit直接位“或”到進(jìn)位ORLC,/bitA0bit直接位的反“或”到進(jìn)位MOVC,bitA2bit直接位送進(jìn)位MOVbit,C92bit進(jìn)位送直接位JCrel40rel進(jìn)位位為1轉(zhuǎn)移JNCrel50rel進(jìn)位位為0轉(zhuǎn)移JBbit,rel20bitrel直接位為1相對(duì)轉(zhuǎn)移JNBbit,rel30bitrel直接位為0相對(duì)轉(zhuǎn)移
JBCbit,rel10bitrel直接位為1相對(duì)轉(zhuǎn)移,然后清零該位
[1].循環(huán)移位指令(4條)RLA;累加器A中的內(nèi)容左移一位RRA;累加器A中的內(nèi)容右移一位
RLCA;累加器A中的內(nèi)容連同進(jìn)位位CY左移一位RRCA;累加器A中的內(nèi)容連同進(jìn)位位CY右移一位
[2].累加器半字節(jié)交換指令(1條)SWAPA;累加器中的內(nèi)容高低半字節(jié)互換
[3].求反指令(1條)
CPLA;累加器中的內(nèi)容按位取反
[4].清零指令(1條)
CLRA;0→(A),累加器中的內(nèi)容清0
[5].邏輯與操作指令(6條)
ANLA,data;累加器A中的內(nèi)容和直接地址單元中的內(nèi)容執(zhí)行與邏輯操作。結(jié)果存在寄存器A中。
ANLdata,#data;直接地址單元中的內(nèi)容和立即數(shù)執(zhí)行與邏輯操作。結(jié)果存在直接地址單元中。
ANLA,#data;累加器A的內(nèi)容和立即數(shù)執(zhí)行與邏輯操作。結(jié)果存在累加器A中。ANLA,Rn;累加器A的內(nèi)容和寄存器Rn中的內(nèi)容執(zhí)行與邏輯操作。結(jié)果存在累加器A中。
ANLdata,A;直接地址單元中的內(nèi)容和累加器A的內(nèi)容執(zhí)行與邏輯操作。結(jié)果存在直接地址單元中。
ANLA,@Ri;累加器A的內(nèi)容和工作寄存器Ri指向的地址單元中的內(nèi)容執(zhí)行與邏輯操作。結(jié)果存在累加器A中。
[6].邏輯或操作指令(6條)
這組指令的作用是將兩個(gè)單元中的內(nèi)容執(zhí)行邏輯或操作。如果直接地址是I/O地址,則為“讀修改寫(xiě)”操作。
ORLA,data;累加器A中的內(nèi)容和直接地址單元中的內(nèi)容執(zhí)行邏輯或操作。結(jié)果存在寄存器A中。
ORLdata,#data;直接地址單元中的內(nèi)容和立即數(shù)執(zhí)行邏輯或操作。結(jié)果存在直接地址單元中。
ORLA,#data;累加器A的內(nèi)容和立即數(shù)執(zhí)行邏輯或操作。結(jié)果存在累加器A中。ORLA,Rn;累加器A的內(nèi)容和寄存器Rn中的內(nèi)容執(zhí)行邏輯或操作。結(jié)果存在累加器A中。
ORLdata,A;直接地址單元中的內(nèi)容和累加器A的內(nèi)容執(zhí)行邏輯或操作。結(jié)果存在直接地址單元中。
ORLA,@Ri;累加器A的內(nèi)容和工作寄存器Ri指向的地址單元中的內(nèi)容執(zhí)行邏輯或操作。結(jié)果存在累加器A中。
[7].邏輯異或操作指令(6條)
XRLA,data;累加器A中的內(nèi)容和直接地址單元中的內(nèi)容執(zhí)行邏輯異或操作。結(jié)果存在寄存器A中。
XRLdata,#data;直接地址單元中的內(nèi)容和立即數(shù)執(zhí)行邏輯異或操作。結(jié)果存在直接地址單元中。
XRLA,#data;累加器A的內(nèi)容和立即數(shù)執(zhí)行邏輯異或操作。結(jié)果存在累加器A中。
XRLA,Rn;累加器A的內(nèi)容和寄存器Rn中的內(nèi)容執(zhí)行邏輯異或操作。結(jié)果存在累加器A中。
XRLdata,A;直接地址單元中的內(nèi)容和累加器A的內(nèi)容執(zhí)行邏輯異或操作。結(jié)果存在直接地址單元中。
XRLA,@Ri;累加器A的內(nèi)容和工作寄存器Ri指向的地址單元中的內(nèi)容執(zhí)行邏輯異或操作。結(jié)果存在累加器A中
控制轉(zhuǎn)移類(lèi)指令分析
[1].無(wú)條件轉(zhuǎn)移指令(4條)LJMPaddr16;addr16→(PC),給程序計(jì)數(shù)器賦予新值(16位地址)AJMPaddr11;(PC)+2→(PC),addr11→(PC10-0)程序計(jì)數(shù)器賦予新值(11位地址),(PC15-11)不改變
SJMPrel;(PC)+2+rel→(PC)當(dāng)前程序計(jì)數(shù)器先加上2再加上偏移量給程序計(jì)數(shù)器賦予新值
JMP@A+DPTR;(A)+(DPTR)→(PC),累加器所指向地址單元的值加上數(shù)據(jù)指針的值給程序計(jì)數(shù)器賦予新值
[2].條件轉(zhuǎn)移指令(8條)
JZrel;A=0,(PC)+2+rel→(PC),累加器中的內(nèi)容為0,則轉(zhuǎn)移到偏移量所指向的地址,否則程序往下執(zhí)行
JNZrel;A≠0,(PC)+2+rel→(PC),累加器中的內(nèi)容不為0,則轉(zhuǎn)移到偏移量所指向的地址,否則程序往下執(zhí)行
CJNEA,data,rel;A≠(data),(PC)+3+rel→(PC),累加器中的內(nèi)容不等于直接地址單元的內(nèi)容,則轉(zhuǎn)移到偏移量所指向的地址,否則程序往下執(zhí)行CJNEA,#data,rel;A≠#data,(PC)+3+rel→(PC),累加器中的內(nèi)容不等于立即數(shù),則轉(zhuǎn)移到偏移量所指向的地址,否則程序往下執(zhí)行
CJNERn,#data,rel;A≠#data,(PC)+3+rel→(PC),工作寄存器Rn中的內(nèi)容不等于立即數(shù),則轉(zhuǎn)移到偏移量所指向的地址,否則程序往下執(zhí)行CJNE@Ri,#data,rel;A≠#data,(PC)+3+rel→(PC),工作寄存器Ri指向地址單元中的內(nèi)容不等于立即數(shù),則轉(zhuǎn)移到偏移量所指向的地址,否則程序往下執(zhí)行
布爾變量操作指令分析
[1].位傳送指令(2條)
MOVC,bit;bit→CY,某位數(shù)據(jù)送CYMOVbit,C;CY→bit,CY數(shù)據(jù)送某位
[2].位置位復(fù)位指令(4條)CLRC;0→CY,清CYCLRbit;0→bit,清某一位SETBC;1→CY,置位CYSETBbit;1→bit,置位某一位
[3].位運(yùn)算指令(6條)ANLC,bit;(CY)∧(bit)→CYANLC,/bit;(CY)∧()→CYORLC,bit;(CY)∨(bit)→CYORLC,/bit;(CY)∧()→CYCPLC;()→CYCPLbit;()→bir
[4].位控制轉(zhuǎn)移指令(5)
JCrel;(CY)=1轉(zhuǎn)移,(PC)+2+rel→PC,否則程序往下執(zhí)行,(PC)+2→PC。JNCrel;(CY)=0轉(zhuǎn)移,(PC)+2+rel→PC,否則程序往下執(zhí)行,(PC)+2→PC。JBbit,rel;位狀態(tài)為1轉(zhuǎn)移。JNBbit,rel;位狀態(tài)為0轉(zhuǎn)移。
JBCbit,rel;位狀態(tài)為1轉(zhuǎn)移,并使該位清“0”。
友情提示:本文中關(guān)于《51單片機(jī)匯編指令總結(jié)》給出的范例僅供您參考拓展思維使用,51單片機(jī)匯編指令總結(jié):該篇文章建議您自主創(chuàng)作。
來(lái)源:網(wǎng)絡(luò)整理 免責(zé)聲明:本文僅限學(xué)習(xí)分享,如產(chǎn)生版權(quán)問(wèn)題,請(qǐng)聯(lián)系我們及時(shí)刪除。