51單片機(jī)指令集設(shè)計(jì)實(shí)例
掃描二維碼
隨時(shí)隨地手機(jī)看文章
當(dāng)你編寫完一個(gè)程序后,通過軟件調(diào)試,你可以看到程序的指令集,從指令集你就能知道單片機(jī)內(nèi)部是如何工作的,比如數(shù)據(jù)存取的寄存器與地址,下面是電工之家找的一篇指令集,講的蠻好的。
一、數(shù)據(jù)傳送類指令(7種助記符)
MOV(英文為Move):對(duì)內(nèi)部數(shù)據(jù)寄存器RAM和特殊功能寄存器SFR的數(shù)據(jù)進(jìn)行傳送;
MOVC(Move Code)讀取程序存儲(chǔ)器數(shù)據(jù)表格的數(shù)據(jù)傳送;
MOVX(Move External RAM)對(duì)外部RAM的數(shù)據(jù)傳送;
XCH(Exchange)字節(jié)交換;
XCHD(Exchange low-order Digit)低半字節(jié)交換;
PUSH(Push onto Stack)入棧;
POP (Pop from Stack)出棧;
二、算術(shù)運(yùn)算類指令(8種助記符)
ADD(Addition) 加法;
ADDC(Add with Carry) 帶進(jìn)位加法;
SUBB(Subtract with Borrow) 帶借位減法;
DA(Decimal Adjust) 十進(jìn)制調(diào)整;
INC(Increment) 加1;
DEC(Decrement) 減1;
MUL(Multiplication、Multiply) 乘法;
DIV(Division、Divide) 除法;
三、邏輯運(yùn)算類指令(10種助記符)
ANL(AND Logic) 邏輯與;
ORL(OR Logic) 邏輯或;
XRL(Exclusive-OR Logic) 邏輯異或;
CLR(Clear) 清零;
CPL(Complement) 取反;
RL(Rotate left) 循環(huán)左移;
RLC(Rotate Left throught the Carry flag) 帶進(jìn)位循環(huán)左移;
RR(Rotate Right) 循環(huán)右移;
RRC(Rotate Right throught the Carry flag) 帶進(jìn)位循環(huán)右移;
SWAP (Swap)低4位與高4位交換;
四、控制轉(zhuǎn)移類指令(17種助記符)
ACALL(Absolute subroutine Call)子程序絕對(duì)調(diào)用;
LCALL(Long subroutine Call)子程序長調(diào)用;
RET(Return from subroutine)子程序返回;
RETI(Return from Interruption)中斷返回;
SJMP(Short Jump)短轉(zhuǎn)移;
AJMP(Absolute Jump)絕對(duì)轉(zhuǎn)移;
LJMP(Long Jump)長轉(zhuǎn)移;
CJNE (Compare Jump if Not Equal)比較不相等則轉(zhuǎn)移;
DJNZ (Decrement Jump if Not Zero)減1后不為0則轉(zhuǎn)移;
JZ (Jump if Zero)結(jié)果為0則轉(zhuǎn)移;
JNZ (Jump if Not Zero) 結(jié)果不為0則轉(zhuǎn)移;
JC (Jump if the Carry flag is set)有進(jìn)位則轉(zhuǎn)移;
JNC (Jump if Not Carry)無進(jìn)位則轉(zhuǎn)移;
JB (Jump if the Bit is set)位為1則轉(zhuǎn)移;
JNB (Jump if the Bit is Not set) 位為0則轉(zhuǎn)移;
JBC(Jump if the Bit is set and Clear the bit) 位為1則轉(zhuǎn)移,并清除該位;
NOP (No Operation)空操作;
五、位操作指令(1種助記符)
CLR 位清零;
SETB(Set Bit)位 置1 。
8種常用偽指令
1.ORG 16位地址 ;
此指令用在原程序或數(shù)據(jù)塊的開始,指明此語句后面目標(biāo)程序或數(shù)據(jù)塊存放的起始地址。
2.[標(biāo)號(hào):] DB 字節(jié)數(shù)據(jù)項(xiàng)表;
將項(xiàng)表中的字節(jié)數(shù)據(jù)存放到從標(biāo)號(hào)開始的連續(xù)字節(jié)單元中。例如:SEG: DB 88H,100,“7”,“C”
3.[標(biāo)號(hào):]DW 雙字節(jié)數(shù)據(jù)項(xiàng)表;
定義16位地址表,16地址按低位地址存低位字節(jié),高位地址存高位字節(jié)。
例如:TAB: DW 1234H,7BH
4.名字 EQU 表達(dá)式 或名字=表達(dá)式;
用與給一個(gè)表達(dá)式賦值或給字符串起名字。之后名字可用做程序地址,數(shù)據(jù)地址或立即數(shù)地址使用。名字必須是一字母開頭的字母數(shù)字串。
例如:COUNT=10 或 SPACE EQU 10H
5.名字 DATA 直接字節(jié)地址;
給8位內(nèi)部RAM單元起個(gè)名字,名字必須是一字母開頭的字母數(shù)字串。同一單元可起多個(gè)名字。
例如:ERROR DATA 80H
6.名字 XDATA 直接字節(jié)地址;
給8位外部RAM起個(gè)名字,名字規(guī)定同DATA偽指令。
例如:IO_PORT XDATA 0CF04H
7.名字 BIT 位指令;
給一可位尋址的位單元起個(gè)名字,規(guī)定同DATA偽指令。
例如:SWT BIT 30H
8.[標(biāo)號(hào):]END;
指出源程序到此結(jié)束,匯編對(duì)其后的程序語句不予理睬。源程序只在主程序最后使用一個(gè)END。
1.數(shù)據(jù)傳送指令(30條)
MOV A,Rn 寄存器送 A 1 1 E8--EF
MOV A,data 直接字節(jié)送A 2 1 E5
MOV A,@Ri 間接RAM 送A 1 1 E6--E7
MOV A,#data 立接數(shù)送 A 2 1 74
MOV Rn,A A 送寄存器 1 1 F8--FF
MOV Rn,data 直接數(shù)送寄存器 2 2 A8--AF
MOV Rn,#data 立即數(shù)送寄存器 2 1 78--7F
MOV data,A A 送直接字節(jié) 2 1 F5
MOV data,Rn 寄存器送直接字節(jié) 2 1 88—8F
MOV data,data 直接字節(jié)送直接字節(jié) 3 2 85
MOV data,@Ri 間接 Rn 送直接字節(jié) 2 2 86;87
MOV data,#data 立即數(shù)送直接字節(jié) 3 2 75
MOV @Ri,A A 送間接 Rn 1 2 F6;F7
MOV @Ri,data 直接字節(jié)送間接Rn 1 1 A6;A7
MOV @Ri,#data 立即數(shù)送間接 Rn 2 2 76;77
MOV DPTR,#data16 16 位常數(shù)送數(shù)據(jù)指針 3 1 90
MOV C,bit 直接位送進(jìn)位位 2 1 A2
MOV bit,C 進(jìn)位位送直接位 2 2 92
MOVC A,@A+DPTR A+DPTR 尋址程序存貯字節(jié)送 A 3 2 93
MOVC A,@A+PC A+PC 尋址程序存貯字節(jié)送A 1 2 83
MOVX A,@Ri 外部數(shù)據(jù)送A(8 位地址) 1 2 E2;E3
MOVX A,@DPTR 外部數(shù)據(jù)送A(16 位地址) 1 2 E0
MOVX @Ri,A A 送外部數(shù)據(jù)(8 位地址) 1 2 F2;F3
MOVX @DPTR,A A 送外部數(shù)據(jù)(16 位地址) 1 2 F0
PUSH data 直接字節(jié)進(jìn)棧道,SP 加1 2 2 C0
POP data 直接字節(jié)出棧,SP 減1 2 2 D0
XCH A,Rn 寄存器與 A 交換 1 1 C8—CF
XCH A,data 直接字節(jié)與A 交換 2 1 C5
XCH A,@Ri 間接Rn 與A 交換 1 1 C6;C7
XCHD A,@Ri 間接Rn 與A 低半字節(jié)交換 1 1 D6;D7
2.邏輯運(yùn)算指令(35條)
ANL A,Rn 寄存器與到A 1 1 58—5F
ANL A,data 直接字節(jié)與到A 2 1 55
ANL A,@Ri 間接RAM與到A 1 1 56;57
ANL A,#data 立即數(shù)與到A 2 1 54
ANL data,A A與到直接字節(jié) 2 1 52
ANL data,#data 立即數(shù)與到直接字節(jié) 3 2 53
ANL C,bit 直接位與到進(jìn)位位 2 2 82
ANL C,/bit 直接位的反碼與到進(jìn)位位 2 2 B0
ORL A,Rn 寄存器或到A 1 1 48—4F
ORL A,data 直接字節(jié)或到A 2 1 45
ORL A,@Ri 間接RAM或到A 1 1 46;47
ORL A,#data 立即數(shù)或到A 2 1 44
ORL data,A A或到直接字節(jié) 2 1 42
ORL data,#data 立即數(shù)或到直接字節(jié) 3 2 43
ORL C,bit 直接位或到進(jìn)位位 2 2 72
ORL C,/bit 直接位的反碼或到進(jìn)位位 2 2 A0
XRL A,Rn 寄存器異或到A 1 1 68—6F
XRL A,data 直接字節(jié)異或到A 2 1 65
XRL A,@Ri 間接RAM異或到A 1 1 66;67
XRL A,#data 立即數(shù)異或到A 2 1 64
XRL data,A A異或到直接字節(jié) 2 1 62
XRL data,#data 立即數(shù)異或到直接字節(jié) 3 2 63
SETB C 進(jìn)位位置 1 1 1 D3
SETB bit 直接位置 1 2 1 D2
CLR A A清0 1 1 E4
CLR C 進(jìn)位位清 0 1 1 C3
CLR bit 直接位清 0 2 1 C2
CPL A A求反碼 1 1 F4
CPL C 進(jìn)位位取反 1 1 B3
CPL bit 直接位取反 2 1 B2
RL A A循環(huán)左移一位 1 1 23
RLC A A 帶進(jìn)位左移一位 1 1 33
RR A A右移一位 1 1 03
RRC A A 帶進(jìn)位右移一位 1 1 13
SWAP A A 半字節(jié)交換 1 1 C4
3.算術(shù)運(yùn)算指令(24條)
ADD A,Rn 寄存器加到A 1 1 28—2F
ADD A,data 直接字節(jié)加到A 2 1 25
ADD A,@Ri 間接RAM 加到A 1 1 26;27
ADD A,#data 立即數(shù)加到A 2 1 24
ADDC A,Rn 寄存器帶進(jìn)位加到 A 1 1 38—3F
ADDC A,data 直接字節(jié)帶進(jìn)位加到A 2 1 35
ADDC A,@Ri 間接RAM 帶進(jìn)位加到A 1 1 36;37
ADDC A,#data 立即數(shù)帶進(jìn)位加到 A 2 1 34
SUBB A,Rn 從A 中減去寄存器和進(jìn)位 1 1 98—9F
SUBB A,data 從A 中減去直接字節(jié)和進(jìn)位 2 1 95
SUBB A,@Ri 從A 中減去間接RAM 和進(jìn)位 1 1 96;97
SUBB A,#data 從A 中減去立即數(shù)和進(jìn)位 2 1 94
INC A A加1 1 1 04
INC Rn 寄存器加 1 1 1 08—0F
INC data 直接字節(jié)加1 2 1 05
INC @Ri 間接RAM 加1 1 1 06;07
INC DPTR 數(shù)據(jù)指針加1 1 2 A3
DEC A A減1 1 1 14
DEC Rn 寄存器減 1 1 1 18—1F
DEC data 直接字節(jié)減1 2 1 15
DEC @Ri 間接RAM 減1 1 1 16;17
MUL AB A乘B 1 4 A4
DIV AB A被B除 1 4 84
DA A A十進(jìn)制調(diào)整 1 1 D4
4.轉(zhuǎn)移指令(22條)
AJMP addr 11 絕對(duì)轉(zhuǎn)移 2 2 *1
LJMP addr 16 長轉(zhuǎn)移 3 2 02
SJMP rel 短轉(zhuǎn)移 2 2 80
JMP @A+DPTR 相對(duì)于DPTR 間接轉(zhuǎn)移 1 2 73
JZ rel 若A=0 則轉(zhuǎn)移 2 2 60
JNZ rel 若A≠0 則轉(zhuǎn)移 2 2 70
JC rel 若C=1 則轉(zhuǎn)移 2 2 40
JNC rel 若C≠1 則轉(zhuǎn)移 2 2 50
JB bit,rel 若直接位=1 則轉(zhuǎn)移 3 2 20
JNB bit,rel 若直接位=0 則轉(zhuǎn)移 3 2 30
JBC bit,rel 若直接位=1 則轉(zhuǎn)移且清除 3 2 10
CJNE A,data,rel 直接數(shù)與 A 比較,不等轉(zhuǎn)移 3 2 B5
CJNE A,#data,rel 立即數(shù)與 A 比較,不等轉(zhuǎn)移 3 2 B4
CJNE @Ri,#data,rel 立即數(shù)與間接RAM比較,不等轉(zhuǎn)移 3 2 B6;B7
CJNE Rn,#data,rel 立即數(shù)與寄存器比較不等轉(zhuǎn)移 3 2 B8—BF
DJNZ Rn,rel 寄存器減 1 不為0 轉(zhuǎn)移 2 2 D8—DF
DJNZ data,rel 直接字節(jié)減1 不為 0 轉(zhuǎn)移 3 2 D5
ACALL addr 11 絕對(duì)子程序調(diào)用 2 2 *1
LCALL addr 16 子程序調(diào)用 3 2 12
RET 子程序調(diào)用返回 1 2 22
RETI 中斷程序調(diào)用返回 1 2 32
NOP 空操作 1 1 00