版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1,第三章MCS-51指令系統(tǒng),3.1 指令系統(tǒng)概述3.2 尋址方式3.3 指令系統(tǒng),2,MCS-51系列單片機(jī)指令基本情況,51系列單片機(jī)指令集含有111條指令 每條指令在程序存儲(chǔ)器ROM中占據(jù)一定空間,以字節(jié)為單位按指令所占字節(jié)數(shù)分類(lèi): 單字節(jié)(49條);雙字節(jié)(46條);3字節(jié)(16條) 每條指令在執(zhí)行時(shí)要花去一定的時(shí)間,以機(jī)器周期為單位按指令執(zhí)行時(shí)間分類(lèi): 單周期(64條);雙周期(45條);4周期(2條
2、)按指令的功能分類(lèi),可分為5大類(lèi): 數(shù)據(jù)傳送類(lèi)(29條);算術(shù)運(yùn)算類(lèi)(24條) 邏輯運(yùn)算及移位類(lèi)(24);控制轉(zhuǎn)移類(lèi)(17條) 位操作類(lèi)(17條),第三章節(jié)MCS-51指令系統(tǒng),3,ASM-51指令格式,51系列單片機(jī)采用ASM-51指令格式,格式如下:,[標(biāo)號(hào):]操作碼 [目的操作數(shù)][,源操作數(shù)][;注釋],其中包含:方括符[ ]表示可選項(xiàng)標(biāo)號(hào)代表指令所在地址,1-8個(gè)字母/數(shù)字,“:”結(jié)尾操作碼就是指令功能助記
3、符,指令實(shí)體目的操作數(shù)源操作數(shù)注釋?zhuān)浴?”開(kāi)頭,4,第一節(jié) MCS-51系列單片機(jī)尋址方式,尋址方式:計(jì)算機(jī)指令中操作數(shù)(按地址)獲取的方式,MCS-51系列單片機(jī)提供了7種尋址方式,如果一條指令中包含多個(gè)操作數(shù),就可能用到一種以上的尋址方式,1、立即尋址2、直接尋址3、寄存器尋址4、寄存器間接尋址5、變址尋址6、相對(duì)尋址7、位尋址,5,1、立即尋址(一),在指令中直接給出操作數(shù)的尋址方式稱(chēng)為立即尋址。這個(gè)操作數(shù)叫立
4、即數(shù),如指令: MOV A, #3AH該指令是將立即數(shù)3AH送累加器,由于MCS-51單片機(jī)的片內(nèi)存儲(chǔ)器是8位存儲(chǔ)器,因此立即數(shù)一般為8位二進(jìn)制數(shù)。在MCS-51的指令系統(tǒng)中,用#來(lái)識(shí)別立即數(shù)。,74H,,,,,A,,,操作碼,立即數(shù),程序存儲(chǔ)器,PC,PC+1,,,3AH,3AH,6,1、立即尋址(二),在有的指令中,也會(huì)用到16位立即數(shù),如:MOV DPTR, #0123H該指令是將1
5、6位立即數(shù)0123H送數(shù)據(jù)指針DPTR(用于對(duì)16位地址的存儲(chǔ)器尋址),DPTR由兩個(gè)特殊功能寄存器DPH和DPL組成,在后面的尋址方式中會(huì)使用到DPTR。,90H,,,,,,,,,,,,,PC,PC+1,PC+2,操作碼,高位立即數(shù),低位立即數(shù),程序存儲(chǔ)器,,,SFR,DPH,DPL,7,2、直接尋址,在指令中直接給出操作數(shù)地址的尋址方式稱(chēng)為直接尋址,直接尋址何以尋址特殊功能寄存器、內(nèi)部RAM(128字節(jié))和位地址,如:MOV A
6、, 70H; A←(70H)該指令是將RAM單元70H(地址)的內(nèi)容送累加器。,74H,,,,,,,,,70H,PC,PC+1,操作碼,直接地址,程序存儲(chǔ)器,,內(nèi)部RAM,70H,,A,,,XX,XX,,,,8,3、寄存器尋址,在指令的操作碼中包含了某一工作寄存器的地址(Rn:R0—R7),而操作數(shù)則存放在該寄存器中,如:MOV A, R5; A←(R5)該指令是將R5的內(nèi)容送累加器。,,,,,,,,101,PC,操作碼
7、,程序存儲(chǔ)器,內(nèi)部RAM,R5,,A,XX,XX,,,,,,R6,R7,,,1101,9,4、寄存器間接尋址,在指令的操作碼中包含了某一工作寄存器的地址(可用作地址指針的工作寄存器是@Ri:R0、R1),而操作數(shù)地址則存放在該寄存器中,如:MOV A, @R1; A←((R1))該指令是將R1的內(nèi)容送作為地址,將該地址所對(duì)應(yīng)的RAM單元的內(nèi)容送累加器。,,,,,,,,1,PC,操作碼,程序存儲(chǔ)器,內(nèi)部RAM,R1,,A,XX,
8、,,,68H,,,111001,,XX,68H,10,5、變址尋址,將PC或DPTR的值作為基地址,將Acc的值作為變址地址,二者向加得到的值作為操作數(shù)的地址,如:MOV A, @A+DPTR; A←((A)+(DPTR))這種尋址方式一般用于常數(shù)表,DPTR的內(nèi)容為表頭地址,Acc的內(nèi)容就是數(shù)據(jù)在表中的位置。,,,,,,,,PC,操作碼,程序存儲(chǔ)器,SFR,,,,A,10010011,1EH,02H,,030FH,XX,,F
9、1H,,,02F1H,,,,02F1H,+1EH=030FH,,XX,11,6、相對(duì)尋址(一),相對(duì)尋址以PC當(dāng)前值(PC當(dāng)前值是執(zhí)行完指令后的值,也就是當(dāng)前指令的PC值+指令所占的字節(jié)數(shù))作為基地址,與指令中給定的偏移量rel相加,所得的結(jié)果作為程序的轉(zhuǎn)移地址,指令中的偏移量rel是一個(gè)用補(bǔ)碼表示的8位帶符號(hào)數(shù)。相對(duì)尋址用于相對(duì)轉(zhuǎn)移指令中,如: JZ 30H; 當(dāng)A=0時(shí),PC←PC+2+rel 當(dāng)A≠0時(shí),PC←
10、PC+2 //程序順序執(zhí)行該指令以累加器Acc的值是否為0為轉(zhuǎn)移條件,如果為Acc的值0則轉(zhuǎn)移,如果Acc的值不為0則程序順序執(zhí)行。程序的執(zhí)行過(guò)程見(jiàn)相對(duì)尋址(二)。在MCS-51的指令系統(tǒng)中,相對(duì)轉(zhuǎn)移指令多為2字節(jié)指令,因此目的地址一般是PC+2+rel;如果是3字節(jié)指令,目的地址是PC+3+rel。偏移量rel是一個(gè)8位帶符號(hào)數(shù),因此程序轉(zhuǎn)移的范圍在PC當(dāng)前值的+127—-128之間。,12,6、相對(duì)尋址(二),,60H,,,PC
11、,操作碼,程序存儲(chǔ)器,,PC,0102H,,,30H,,XX,0100H,,PC+1,0101H,,PC+2,0102H,,偏移量,,,,,,,,0102H,+30H=,0132H,,,,rel=30H,,0132H,13,7、位尋址,MCS-51系列單片機(jī)中有專(zhuān)用的位運(yùn)算指令,可以對(duì)位尋址區(qū)的每一個(gè)位進(jìn)行數(shù)據(jù)傳送、邏輯運(yùn)算等操作,如:MOV C, 07H; C←(07H)該指令屬于位操作指令,作用是將位地址為70H的位單元(
12、字節(jié)地址20H單元的D7位)傳送到位累加器C中。,,,,,,,PC,操作碼,程序存儲(chǔ)器,C,,20H,A2H,00,,,,,,,,,,,,,,,,,,PC+1,07H,PSW,X,07,SFR,X,,,,14,MCS-51指令集(包含5大類(lèi)功能),1、數(shù)據(jù)傳送類(lèi)指令: (29條),2、算術(shù)運(yùn)算類(lèi)指令: (24條),3、邏輯運(yùn)算及移位類(lèi)指令:
13、 (24條),4、控制轉(zhuǎn)移類(lèi)指令: (17條),5、位操作指令: (17條),15,1、數(shù)據(jù)傳送類(lèi)指令(一),片內(nèi)數(shù)據(jù)存儲(chǔ)器間傳送: (MOV—16條),片外數(shù)據(jù)存儲(chǔ)器送累加器: (MOVX—4條),程序存儲(chǔ)器送累加器: (MOVC—2條),數(shù)據(jù)交換: (XCH,X
14、CHD,SWAP—5條),數(shù)據(jù)交換: (PUSH,POP—2條),16,1、數(shù)據(jù)傳送類(lèi)指令(二),片內(nèi)數(shù)據(jù)存儲(chǔ)器間傳送: (MOV—16條),MOV類(lèi)指令帶有兩個(gè)操作數(shù),前一個(gè)是目的地址,后一個(gè)是源操作數(shù)。作用是將源操作數(shù)送目的地址,如:MOV A, 30H; A←(70H),Acc,Direct直接尋址,@Ri間接尋址,Rn寄存器尋址,#data立即數(shù),,,,,,,,,,,
15、,,,,17,1、數(shù)據(jù)傳送類(lèi)指令(三),片外數(shù)據(jù)存儲(chǔ)器數(shù)據(jù)送累加器:(MOVX—4條),MOVX類(lèi)指令可以在累加器和@Ri或@DPTR(@Ri為8位地址;@DPTR為16位地址)所指向的外部數(shù)據(jù)存儲(chǔ)器間相互傳送數(shù)據(jù),具體指令有:MOVX A, @Ri; A←((Ri))MOVX A, @DPTR; A←((DPTR))MOVX @Ri, A; ((Ri)) ←
16、 AMOVX @DPTR, A; ((DPTR)) ←A,18,1、數(shù)據(jù)傳送類(lèi)指令(四),程序存儲(chǔ)器數(shù)據(jù)送累加器:(MOVC—2條),MOVX類(lèi)指令采用變址尋址方式進(jìn)行尋址。該類(lèi)指令通常稱(chēng)為查表指令,送入累加器Acc的數(shù)據(jù)是事先寫(xiě)入的表格數(shù)據(jù),通常使用偽指令DB或DW預(yù)先定義在程序存儲(chǔ)器中,具體指令有:MOVC A, A+@DPTR; MOVX A, A+@PC;,19,1、數(shù)據(jù)傳送類(lèi)指令(五),數(shù)據(jù)交換指
17、令:(5條),XCH A,direct (字節(jié)互換)XCH A,@Ri (字節(jié)互換)XCH A,Rn (字節(jié)互換)XCHD A,@Ri 累加器Acc的低4位與((Ri))的低4位互換,各自的高4位不變SWAP A 累加器Acc的高低4位互換,20,1、數(shù)據(jù)傳送類(lèi)指令(六),堆棧操作指令:(2條),PUSH 壓棧指令POP 彈
18、棧指令 堆棧由特殊功能寄存器SP(堆棧指針)進(jìn)行管理 理論上堆棧在存儲(chǔ)器中可以放在任意位置,但為了不和工作寄存器沖突,一般將堆棧放在存儲(chǔ)器靠后的位置 堆棧指針SP總是指向棧頂(自動(dòng)變化,見(jiàn)第二章相關(guān)內(nèi)容) PUSH和POP一般是成對(duì)使用的,21,2、算術(shù)運(yùn)算類(lèi)指令(一),加法運(yùn)算: (ADD—4條),帶進(jìn)位加法運(yùn)算: (ADDC—4條),帶借位減法運(yùn)算: (SUBB—4
19、條),加1/減1操作: (INC,DEC—9條),單字節(jié)乘/除法運(yùn)算: (MUL,DIV—2條),算術(shù)運(yùn)算類(lèi)指令共有6種24條,十進(jìn)制調(diào)整: (DA A—1條),22,2、算術(shù)運(yùn)算類(lèi)指令(二),加法運(yùn)算: (ADD—4條)帶進(jìn)位加法運(yùn)算: (ADDC—4條)帶借位減法運(yùn)算: (SUBB—4條),所有的加法(ADD)、帶進(jìn)位
20、加法(ADDC)、帶借位減法(SUBB)運(yùn)算都是以 Acc為一個(gè)加數(shù)或被減數(shù),最終結(jié)果也存進(jìn) Acc,加法(ADD)、帶進(jìn)位加法(ADDC) 以及帶借位減法(SUBB)運(yùn)算中,如果產(chǎn)生了進(jìn)位或借位,將自動(dòng)對(duì)PSW中的Cy標(biāo)志位置“1”,帶進(jìn)位加法(ADDC):(A) ← (A)+(Cy)+(第二操作數(shù))帶借位減法(SUBB):(A) ← (A)- (Cy)- (第二操作數(shù)),23,2、算術(shù)運(yùn)算類(lèi)指令(三),加1/減1操作: (IN
21、C,DEC—9條)INC, DEC與用加/減法指令做加1/減1 操作不同之處在于INC、DEC不影響標(biāo)志位。,單字節(jié)乘/除運(yùn)算: (MUL,DIV—2條)兩個(gè)單字節(jié)數(shù)的乘/除法運(yùn)算只在A與B之間進(jìn)行。MUL AB: (A)與(B)相乘, 積為16位數(shù), (A) ←積的高8位; (B) ←積的低8位DIV AB: (A)除以(B),結(jié)果用2字節(jié)表示, (A) ←商的整數(shù)部分;(B) ←余
22、數(shù),24,2、算術(shù)運(yùn)算類(lèi)指令(四),十進(jìn)制調(diào)整: (DA A—1條)用于兩個(gè)BCD碼之間的相加,這條指令只能跟在 ADD 或 ADDC 之后,BCD碼是指“用二進(jìn)制表達(dá)的十進(jìn)制數(shù)”。如:十進(jìn)制數(shù)20可以用二進(jìn)制數(shù)00010100B表示; 也可以用十六進(jìn)制數(shù)14H表示;還可以用BCD碼 00100000B 或 20H 表示。,4個(gè)二進(jìn)制位就可以表示一位BCD碼:0000~1001 可表示十進(jìn)制數(shù)(BCD數(shù)) 0~9;
23、8個(gè)二進(jìn)制位就可以表示兩位壓縮的BCD碼:00000000~10011001 表示 00~99。,25,2、算術(shù)運(yùn)算類(lèi)指令(五),DA A指令的執(zhí)行過(guò)程,若(A)3~0>9或(AC)=1則(A)3~0 ←(A)3~0+6;若(A)7~4>9或(CY)=1則(A)7~4 ←(A)7~4+6;,如:兩個(gè)十進(jìn)制數(shù)“65”與“58”相加,根據(jù)常識(shí),顯然其和應(yīng)當(dāng)為“123”。,MOV A, #65HADD A, #58HDA
24、 A結(jié)果:(A) = 23H (Cy) = 1,6 5 0110 0101 5 8 0101 1000,,,+),6,6,0110,0110,+),,,19,18,0011,,3,2,,0010,1,,,,26,3、邏輯運(yùn)算及移位類(lèi)指令(一),該類(lèi)指令共有5種24條,邏輯與運(yùn)算: (ANL—6條),邏
25、輯或運(yùn)算: (ORL—6條),邏輯異或運(yùn)算: (XRL—6條),累加器清零/取反: (CLR,CPL—2條),累加器移位操作: (RL,RLC,RR,RRC—4條),27,3、邏輯運(yùn)算及移位類(lèi)指令(二),邏輯與(ANL),邏輯或(ORL),邏輯異或(XRL):,累加器清零/取反操作 (CLR,CPL—2條),CLR A —對(duì)累加器清零 1 Byte 1 TmCPL A
26、 ——對(duì)累加器按位取非 1 Byte 1 Tm,28,3、邏輯運(yùn)算及移位類(lèi)指令(三),邏輯運(yùn)算指令在程序中的應(yīng)用(下面的例子認(rèn)為Acc的內(nèi)容為9AH),邏輯與ANL運(yùn)算用于對(duì)某些位進(jìn)行清0或者保留:例: ANL A, #0FH; 則(A) = 0AH,邏輯或ORL運(yùn)算用于對(duì)某些位進(jìn)行置1或者保留:例: ORL A, #0FH; 則(A) = 9FH,邏輯異或XRL運(yùn)算用于對(duì)某些位進(jìn)行取反或者保留:例: XRL
27、A, #0FH; 則(A) = 95H (A) ? 1001 1010 #0FH ? 0000 1111 95H ? 1001 0101,29,RRC A 帶進(jìn)位循環(huán)左移,,,,,3、邏輯運(yùn)算及移位類(lèi)指令(四),累加器移位操
28、作: (RL,RLC,RR,RRC—4條),RL A 循環(huán)右移,,,,,,,,,,,,Cy,RR A 循環(huán)左移,RLC A
29、 帶進(jìn)位循環(huán)右移,,,,累加器Acc,累加器Acc,累加器Acc,累加器Acc,Cy,30,4、控制轉(zhuǎn)移類(lèi)指令(一),控制轉(zhuǎn)移類(lèi)指令用于對(duì)程序的執(zhí)行順序進(jìn)行控制(即改變PC指針的當(dāng)前值),該類(lèi)指令共有4種17條,無(wú)條件轉(zhuǎn)移:(LJMP,AJMP,SJMP,JMP—4條),條件轉(zhuǎn)移(判斷跳轉(zhuǎn)):(JZ,JNZ,CJNE,DJNZ—8條),子程序調(diào)用及
30、返回:(LCALL,ACALL,RET,RETI—4條),空操作:(NOP—1條) “消耗”一個(gè)機(jī)器周期,31,4、控制轉(zhuǎn)移類(lèi)指令(二),無(wú)條件轉(zhuǎn)移:(LJMP,AJMP,SJMP,JMP—4條),LJMP addr16 長(zhǎng)跳轉(zhuǎn)指令 ——可在64K范圍內(nèi)跳轉(zhuǎn),AJMP addr11 絕對(duì)跳轉(zhuǎn)指令 ——可在指令所在的2K范圍內(nèi)跳轉(zhuǎn),S
31、JMP rel 相對(duì)跳轉(zhuǎn)指令 ——可在當(dāng)前PC-128與+127范圍內(nèi)跳轉(zhuǎn),JMP @A+DPTR 間接長(zhǎng)跳轉(zhuǎn)指令 ——可在以DPTR為基址 + A為偏移量 之和所指向的64K程序范圍內(nèi)跳轉(zhuǎn),32,4、控制轉(zhuǎn)移類(lèi)指令(三),條件轉(zhuǎn)移:(JZ,JNZ,CJNE,DJNZ—8條),JZ
32、 relJNZ rel ——根據(jù)Acc的內(nèi)容是否為0決定是否跳轉(zhuǎn),DJNZ direct, relDJNZ Rn, rel ——將direct(或Rn)里的內(nèi)容減 1,結(jié)果不 等于0就跳轉(zhuǎn);等于0則不跳轉(zhuǎn)繼續(xù)執(zhí)行 程序,33,4、控制轉(zhuǎn)移類(lèi)指令(四),條件轉(zhuǎn)移:,CJNE A, #data,
33、 relCJNE A, direct, rel CJNE @Ri, #data, relCJNE Rn, #data, rel ——將A(或@Ri,或Rn)與#data(或direct)相比 較,其值不相等就跳轉(zhuǎn);相等則不跳轉(zhuǎn),繼 續(xù)執(zhí)行程序,34,4、控制轉(zhuǎn)移類(lèi)指令(五),子程序調(diào)用及返回:(LCALL,ACALL,RET,RETI—4條),LCALL
34、addr16 子程序長(zhǎng)調(diào)用指令——可在64K范圍內(nèi)調(diào)用子程序,ACALL addr11 子程序絕對(duì)調(diào)用指令——可在指令所在的2K范圍內(nèi)調(diào)用子程序,RET 子程序返回指令——子程序結(jié)束并返回調(diào)用的下一條指令,RETI 中斷服務(wù)子程序返回指令——中斷結(jié)束/返回被打斷處的下一條指令,35,5、位操作指令(一),該類(lèi)指令共有17條,位傳送: (MOV—2條),位清
35、零/置位: (CLR,SETB—4條),位邏輯與/或/非運(yùn)算:(ANL,ORL,CPL—6條),位條件轉(zhuǎn)移: (JC,JNC,JB,JNB,JBC—5條),36,5、位操作指令(二),位傳送指令(2條): MOV C, bit —— (C)?(bit) MOV bit, C —— (bit)?(C) 注: bit表示位地址,位清零/置位指令(4條): CLR bi
36、t(或C) —— (bit或 C)?“0” SETB bit(或C) —— (bit或 C)?“1”,位邏輯與/或/非指令(6條): ANL C,bit(或/bit) ORL C,bit(或/bit) CPL bit (或 C) 注: “/bit”表示對(duì)bit位先取反然后再參加運(yùn)算,37,5、位操作指令(三),判位條件轉(zhuǎn)移指令(5條):,JC rel —— (Cy)=“1”就跳轉(zhuǎn);否則不跳轉(zhuǎn),JNC r
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- mcs-51指令系統(tǒng)
- 第三章mcs-51單片機(jī)的指令系統(tǒng)
- 第三章 8086指令系統(tǒng)
- mcs-51指令
- mcs-51指令集
- 第三章 指令系統(tǒng)
- 第三章 指令系統(tǒng)及特點(diǎn)
- 第三章 指令系統(tǒng)部分練習(xí)
- 第3章 mcs-51 的指令系統(tǒng)new1
- 第三章_pic單片機(jī)指令系統(tǒng)
- 基于MCS-51指令集的CPU硬核設(shè)計(jì).pdf
- 兼容MCS-51指令集的軟核設(shè)計(jì).pdf
- 3指令系統(tǒng)
- 2附錄二mcs—51指令表
- 第三章 80x86尋址方式與指令系統(tǒng)
- 51指令
- mcs-51 匯編指令集
- 第三章s7-300400的編程語(yǔ)言與指令系統(tǒng)
- 一種兼容MCS-51指令集的高速M(fèi)CU設(shè)計(jì)與驗(yàn)證.pdf
- 一種兼容MCS-51指令集的高速M(fèi)CU的設(shè)計(jì)及實(shí)現(xiàn).pdf
評(píng)論
0/150
提交評(píng)論