當(dāng)你編寫完一個程序后,通過軟件調(diào)試,你可以看到程序的指令集,從指令集你就能知道單片機(jī)內(nèi)部是如何工作的,比如數(shù)據(jù)存取的寄存器與地址,下面是網(wǎng)上找的一篇指令集,講的蠻好的。
一、數(shù)據(jù)傳送類指令(7種助記符)
MOV(英文為Move):對內(nèi)部數(shù)據(jù)寄存器RAM和特殊功能寄存器SFR的數(shù)據(jù)進(jìn)行傳送;
MOVC(MoveCode)讀取程序存儲器數(shù)據(jù)表格的數(shù)據(jù)傳送;
MOVX (MoveExternalRAM) 對外部RAM的數(shù)據(jù)傳送;
XCH (Exchange) 字節(jié)交換;
XCHD (Exchangelow-orderDigit) 低半字節(jié)交換;
PUSH (PushontoStack) 入棧;
POP (PopfromStack) 出棧;
二、算術(shù)運(yùn)算類指令(8種助記符)
ADD(Addition)加法;
ADDC(AddwithCarry)帶進(jìn)位加法;
SUBB(SubtractwithBorrow)帶借位減法;
DA(DecimalAdjust)十進(jìn)制調(diào)整;
INC(Increment)加1;
DEC(Decrement)減1;
MUL(Multiplication、Multiply)乘法;
DIV(Division、Divide)除法;
三、邏輯運(yùn)算類指令(10種助記符)
ANL(ANDLogic)邏輯與;
ORL(ORLogic)邏輯或;
XRL(Exclusive-ORLogic)邏輯異或;
CLR(Clear)清零;
CPL(Complement)取反;
RL(Rotateleft)循環(huán)左移;
RLC(RotateLeftthroughttheCarryflag)帶進(jìn)位循環(huán)左移;
RR(RotateRight)循環(huán)右移;
RRC (RotateRightthroughttheCarryflag)帶進(jìn)位循環(huán)右移;
SWAP(Swap) 低4位與高4位交換;
四、控制轉(zhuǎn)移類指令(17種助記符)
ACALL(AbsolutesubroutineCall)子程序絕對調(diào)用;
LCALL(LongsubroutineCall)子程序長調(diào)用;
RET(Returnfromsubroutine)子程序返回;
RETI(ReturnfromInterruption)中斷返回;
SJMP(ShortJump)短轉(zhuǎn)移;
AJMP(AbsoluteJump)絕對轉(zhuǎn)移;
LJMP(LongJump)長轉(zhuǎn)移;
CJNE(CompareJumpifNotEqual)比較不相等則轉(zhuǎn)移;
DJNZ(DecrementJumpifNotZero)減1后不為0則轉(zhuǎn)移;
JZ(JumpifZero)結(jié)果為0則轉(zhuǎn)移;
JNZ(JumpifNotZero)結(jié)果不為0則轉(zhuǎn)移;
JC(JumpiftheCarryflagisset)有進(jìn)位則轉(zhuǎn)移;
JNC(JumpifNotCarry)無進(jìn)位則轉(zhuǎn)移;
JB(JumpiftheBitisset)位為1則轉(zhuǎn)移;
JNB(JumpiftheBitisNotset)位為0則轉(zhuǎn)移;
JBC(JumpiftheBitissetandClearthebit)位為1則轉(zhuǎn)移,并清除該位;
NOP(NoOperation) 空操作;
五、位操作指令(1種助記符)
CLR位清零;
SETB(SetBit) 位置1。
8種常用偽指令
1.ORG16位地址;
此指令用在原程序或數(shù)據(jù)塊的開始,指明此語句后面目標(biāo)程序或數(shù)據(jù)塊存放的起始地址。
2.[標(biāo)號:]DB字節(jié)數(shù)據(jù)項表;
將項表中的字節(jié)數(shù)據(jù)存放到從標(biāo)號開始的連續(xù)字節(jié)單元中。例如:SEG:DB88H,100,“7”,“C”
3.[標(biāo)號:]DW雙字節(jié)數(shù)據(jù)項表;
定義16位地址表,16地址按低位地址存低位字節(jié),高位地址存高位字節(jié)。
例如:TAB:DW1234H,7BH
4.名字EQU表達(dá)式或名字=表達(dá)式;
用與給一個表達(dá)式賦值或給字符串起名字。之后名字可用做程序地址,數(shù)據(jù)地址或立即數(shù)地址使用。名字必須是一字母開頭的字母數(shù)字串。
例如:COUNT=10或SPACEEQU10H
5.名字DATA直接字節(jié)地址;
給8位內(nèi)部RAM單元起個名字,名字必須是一字母開頭的字母數(shù)字串。同一單元可起多個名字。
例如:ERRORDATA80H
6.名字XDATA直接字節(jié)地址;
給8位外部RAM起個名字,名字規(guī)定同DATA偽指令。
例如:IO_PORTXDATA0CF04H
7.名字BIT位指令;
給一可位尋址的位單元起個名字,規(guī)定同DATA偽指令。
例如:SWTBIT30H
8.[標(biāo)號:] END;
指出源程序到此結(jié)束,匯編對其后的程序語句不予理睬。源程序只在主程序最后使用一個END。
1.數(shù)據(jù)傳送指令(30條)
MOVA,Rn寄存器送A11E8--EF
MOVA,data直接字節(jié)送A21E5
MOVA,@Ri間接RAM送A11E6--E7
MOVA,#data立接數(shù)送A2174
MOVRn,AA送寄存器11F8--FF
MOVRn,data直接數(shù)送寄存器22A8--AF
MOVRn,#data立即數(shù)送寄存器2178--7F
MOVdata,AA送直接字節(jié)21F5
MOVdata,Rn寄存器送直接字節(jié)2188—8F
MOVdata,data直接字節(jié)送直接字節(jié)3285
MOVdata,@Ri間接Rn送直接字節(jié)2286;87
MOVdata,#data立即數(shù)送直接字節(jié)3275
MOV@Ri,AA送間接Rn12F6;F7
MOV@Ri,data直接字節(jié)送間接Rn11A6;A7
MOV@Ri,#data立即數(shù)送間接Rn2276;77
MOVDPTR,#data1616位常數(shù)送數(shù)據(jù)指針3190
MOVC,bit直接位送進(jìn)位位21A2
MOVbit,C進(jìn)位位送直接位2292
MOVCA,@A+DPTRA+DPTR尋址程序存貯字節(jié)送A3293
MOVCA,@A+PCA+PC尋址程序存貯字節(jié)送A1283
MOVXA,@Ri外部數(shù)據(jù)送A(8位地址)12E2;E3
MOVXA,@DPTR外部數(shù)據(jù)送A(16位地址)12E0
MOVX@Ri,AA送外部數(shù)據(jù)(8位地址)12F2;F3
MOVX@DPTR,AA送外部數(shù)據(jù)(16位地址)12F0
PUSHdata直接字節(jié)進(jìn)棧道,SP加122C0
POPdata直接字節(jié)出棧,SP減122D0
XCHA,Rn寄存器與A交換11C8—CF
XCHA,data直接字節(jié)與A交換21C5
XCHA,@Ri間接Rn與A交換11C6;C7
XCHDA,@Ri間接Rn與A低半字節(jié)交換11D6;D7
2.邏輯運(yùn)算指令(35條)
ANLA,Rn寄存器與到A1158—5F
ANLA,data直接字節(jié)與到A2155
ANLA,@Ri間接RAM與到A1156;57
ANLA,#data立即數(shù)與到A2154
ANLdata,AA與到直接字節(jié)2152
ANLdata,#data立即數(shù)與到直接字節(jié)3253
ANLC,bit直接位與到進(jìn)位位2282
ANLC,/bit直接位的反碼與到進(jìn)位位22B0
ORLA,Rn寄存器或到A1148—4F
ORLA,data直接字節(jié)或到A2145
ORLA,@Ri間接RAM或到A1146;47
ORLA,#data立即數(shù)或到A2144
ORLdata,AA或到直接字節(jié)2142
ORLdata,#data立即數(shù)或到直接字節(jié)3243
ORLC,bit直接位或到進(jìn)位位2272
ORLC,/bit直接位的反碼或到進(jìn)位位22A0
XRLA,Rn寄存器異或到A1168—6F
XRLA,data直接字節(jié)異或到A2165
XRLA,@Ri間接RAM異或到A1166;67
XRLA,#data立即數(shù)異或到A2164
XRLdata,AA異或到直接字節(jié)2162
XRLdata,#data立即數(shù)異或到直接字節(jié)3263
SETBC進(jìn)位位置111D3
SETBbit直接位置121D2
CLRAA清011E4
CLRC進(jìn)位位清011C3
CLRbit直接位清021C2
CPLAA求反碼11F4
CPLC進(jìn)位位取反11B3
CPLbit直接位取反21B2
RLAA循環(huán)左移一位1123
RLCAA帶進(jìn)位左移一位1133
RRAA右移一位1103
RRCAA帶進(jìn)位右移一位1113
SWAPAA半字節(jié)交換11C4
3.算術(shù)運(yùn)算指令(24條)
ADDA,Rn寄存器加到A1128—2F
ADDA,data直接字節(jié)加到A2125
ADDA,@Ri間接RAM加到A1126;27
ADDA,#data立即數(shù)加到A2124
ADDCA,Rn寄存器帶進(jìn)位加到A1138—3F
ADDCA,data直接字節(jié)帶進(jìn)位加到A2135
ADDCA,@Ri間接RAM帶進(jìn)位加到A1136;37
ADDCA,#data立即數(shù)帶進(jìn)位加到A2134
SUBBA,Rn從A中減去寄存器和進(jìn)位1198—9F
SUBBA,data從A中減去直接字節(jié)和進(jìn)位2195
SUBBA,@Ri從A中減去間接RAM和進(jìn)位1196;97
SUBBA,#data從A中減去立即數(shù)和進(jìn)位2194
INCAA加11104
INCRn寄存器加11108—0F
INCdata直接字節(jié)加12105
INC@Ri間接RAM加11106;07
INCDPTR數(shù)據(jù)指針加112A3
DECAA減11114
DECRn寄存器減11118—1F
DECdata直接字節(jié)減12115
DEC@Ri間接RAM減11116;17
MULABA乘B14A4
DIVABA被B除1484
DAAA十進(jìn)制調(diào)整11D4
4.轉(zhuǎn)移指令(22條)
AJMPaddr11絕對轉(zhuǎn)移22*1
LJMPaddr16長轉(zhuǎn)移3202
SJMPrel短轉(zhuǎn)移2280
JMP@A+DPTR相對于DPTR間接轉(zhuǎn)移1273
JZrel若A=0則轉(zhuǎn)移2260
JNZrel若A≠0則轉(zhuǎn)移2270
JCrel若C=1則轉(zhuǎn)移2240
JNCrel若C≠1則轉(zhuǎn)移2250
JBbit,rel若直接位=1則轉(zhuǎn)移3220
JNBbit,rel若直接位=0則轉(zhuǎn)移3230
JBCbit,rel若直接位=1則轉(zhuǎn)移且清除3210
CJNEA,data,rel直接數(shù)與A比較,不等轉(zhuǎn)移32B5
CJNEA,#data,rel立即數(shù)與A比較,不等轉(zhuǎn)移32B4
CJNE@Ri,#data,rel立即數(shù)與間接RAM比較,不等轉(zhuǎn)移32B6;B7
CJNERn,#data,rel立即數(shù)與寄存器比較不等轉(zhuǎn)移32B8—BF
DJNZRn,rel寄存器減1不為0轉(zhuǎn)移22D8—DF
DJNZdata,rel直接字節(jié)減1不為0轉(zhuǎn)移32D5
ACALLaddr11絕對子程序調(diào)用22*1
LCALLaddr16子程序調(diào)用3212
RET子程序調(diào)用返回1222
RETI中斷程序調(diào)用返回1232
NOP空操作1100