東南大學(xué)單片機教程1概述4指令系統(tǒng)_第1頁
東南大學(xué)單片機教程1概述4指令系統(tǒng)_第2頁
東南大學(xué)單片機教程1概述4指令系統(tǒng)_第3頁
東南大學(xué)單片機教程1概述4指令系統(tǒng)_第4頁
東南大學(xué)單片機教程1概述4指令系統(tǒng)_第5頁
已閱讀5頁,還剩51頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、第第4 4章章 MCS-51MCS-51的指令系統(tǒng)的指令系統(tǒng) 4.1 4.1 指令系統(tǒng)概述指令系統(tǒng)概述 指令和助記符指令和助記符: 指令本身是一組二進制數(shù)代碼,為了便于記憶,將這些代碼指令本身是一組二進制數(shù)代碼,為了便于記憶,將這些代碼用具有一定含義的指令助記符來表示,助記符一般采用英文用具有一定含義的指令助記符來表示,助記符一般采用英文單詞的縮寫。單詞的縮寫。 指令代碼指令代碼 助記符助記符 功能功能 740A MOV A740A MOV A,#0AH #0AH 將十六進制數(shù)將十六進制數(shù)0AH0AH 放入累加器放入累加器A A中中指令分類說明:指令分類說明:MCS-51MCS-51的基本指令

2、共的基本指令共111111條條按功能分類按功能分類 (1 1)數(shù)據(jù)傳送類)數(shù)據(jù)傳送類(28(28條條) ) (2 2)算術(shù)操作類)算術(shù)操作類(24(24條條 (3 3)邏輯運算類)邏輯運算類(25(25條條) ) (4 4)控制轉(zhuǎn)移類)控制轉(zhuǎn)移類(17(17條條) ) (5 5)位操作類)位操作類(17(17條條) )按指令所占的字節(jié)來分按指令所占的字節(jié)來分 (1) (1) 單字節(jié)指令單字節(jié)指令(49(49條條) ) (2) (2) 雙字節(jié)指令雙字節(jié)指令(45(45條條) ) (3) (3) 三字節(jié)指令三字節(jié)指令(17(17條條) )按指令的執(zhí)行時間來分按指令的執(zhí)行時間來分(1) 1(1) 1

3、個機器周期個機器周期(64(64條條) )(2) 2(2) 2個機器周期個機器周期(45(45條條) )(3) (3) 乘、除兩條指令的執(zhí)行乘、除兩條指令的執(zhí)行 時間為時間為4 4個機器周期個機器周期4.2 4.2 數(shù)據(jù)傳送類指令數(shù)據(jù)傳送類指令 通用格式:通用格式: MOV MOV , ( (屬屬“復(fù)制復(fù)制”性質(zhì),而性質(zhì),而不是不是“搬家搬家”) ) ( (數(shù)據(jù)傳送類指令數(shù)據(jù)傳送類指令不影響標志位不影響標志位:CyCy、AcAc和和OVOV,影響奇偶標志位影響奇偶標志位P P) ) 1 1、以累加器為目的操作數(shù)的指令、以累加器為目的操作數(shù)的指令 MOV A,RnMOV A,Rn ; (Rn)A

4、 ; (Rn)A,n=0n=07 7 MOV A,RiMOV A,Ri ; (Ri)A,i ; (Ri)A,i=0,1=0,1 MOV A,directMOV A,direct ; (direct)A ; (direct)A MOV A,#dataMOV A,#data ; #dataA ; #dataA例:例: MOV A,R6MOV A,R6 ;(R6)A ;(R6)A,寄存器尋址,寄存器尋址 MOV A,70HMOV A,70H ;(70H)A ;(70H)A,直接尋址,直接尋址 MOV A,R0MOV A,R0 ;(R0)A ;(R0)A,間接尋址,間接尋址 MOV A,#78HMOV

5、 A,#78H ;78HA ;78HA,立即尋址,立即尋址 2 2、以、以RnRn為目的操作數(shù)的指令為目的操作數(shù)的指令 MOV Rn,AMOV Rn,A ; (A)Rn ; (A)Rn, n=0, n=07 7 MOV Rn,directMOV Rn,direct ; (direct)Rn ; (direct)Rn, n=0, n=07 7 MOV Rn,#dat MOV Rn,#dat ; #dataRn ; #dataRn, n=0, n=07 7 功能:功能:把源操作數(shù)的內(nèi)容送入把源操作數(shù)的內(nèi)容送入當前一組當前一組工作寄存器區(qū)工作寄存器區(qū) 的的R0R0R7R7中的某一個寄存器。中的某一個

6、寄存器。3 3、以直接地址、以直接地址directdirect為目的操作數(shù)的指令為目的操作數(shù)的指令 MOV direct,AMOV direct,A ;(A)direct ;(A)direct MOVMOVdirect,Rndirect,Rn ;(Rn)direct ;(Rn)direct, n=0, n=07 7 MOV direct1,direct2MOV direct1,direct2 ;direct2direct1 ;direct2direct1 MOV direct,RiMOV direct,Ri ;(Ri)direct ;(Ri)direct MOVMOVdirect,#datad

7、irect,#data ;#datadirect ;#datadirect 功能:功能:把源操作數(shù)送入直接地址指出的存儲單元。把源操作數(shù)送入直接地址指出的存儲單元。 directdirect指的是內(nèi)部指的是內(nèi)部RAMRAM或或SFRSFR的地址。的地址。4 4、以寄存器間接地址為目的操作數(shù)的指令、以寄存器間接地址為目的操作數(shù)的指令 MOV Ri,AMOV Ri,A ;(A)(Ri ;(A)(Ri), i=0,1), i=0,1 MOV Ri,directMOV Ri,direct ;(direct)(Ri ;(direct)(Ri) MOV Ri,#dataMOV Ri,#data ;#dat

8、a(Ri ;#data(Ri) 功能:功能:把源操作數(shù)指定的內(nèi)容送入以把源操作數(shù)指定的內(nèi)容送入以R0R0或或R1R1中內(nèi)容中內(nèi)容 為地址的片內(nèi)存儲單元。為地址的片內(nèi)存儲單元。 例:例:MOV R0MOV R0,A A MOV R1 MOV R1,20H20H MOV R0 MOV R0,#34H#34H5 5、1616位數(shù)傳送指令位數(shù)傳送指令 MOV DPTR,#data16MOV DPTR,#data16 ; #data16DPTR ; #data16DPTR 唯一的唯一的1616位數(shù)據(jù)的傳送指令位數(shù)據(jù)的傳送指令 立即數(shù)的高立即數(shù)的高8 8位送入位送入DPHDPH,立即數(shù)的低,立即數(shù)的低8

9、8位送入位送入DPLDPL。 例:例:MOV DPTRMOV DPTR,#1234H#1234H 執(zhí)行后執(zhí)行后DPHDPH中的值為中的值為12H12H,DPLDPL中的值為中的值為34H34H。 如果我們分別向如果我們分別向DPHDPH,DPLDPL送數(shù),則結(jié)果也一樣。送數(shù),則結(jié)果也一樣。 如下面兩條指令如下面兩條指令 MOV DPHMOV DPH,#35H#35H MOV DPL MOV DPL,#12H#12H。 相當于執(zhí)行了相當于執(zhí)行了 MOV DPTRMOV DPTR,#3512H#3512H。6 6、堆棧操作指令、堆棧操作指令 堆棧區(qū)堆棧區(qū) 先進后出先進后出 堆棧指針堆棧指針SPSP

10、(1)(1)進棧指令進棧指令 PUSH directPUSH direct 先將棧指針先將棧指針SPSP加加1 1,然后把然后把directdirect中的內(nèi)容中的內(nèi)容 送到棧指針送到棧指針SPSP指示的內(nèi)部指示的內(nèi)部RAMRAM單元中單元中 例如:例如: 當(當(SPSP)=60H,=60H,(A A)=30H,=30H,(B B)=70H=70H時時 PUSH ACCPUSH ACC ;(SP)+1=61HSP,(A)61H(SP)+1=61HSP,(A)61H PUSH BPUSH B ;(SP)+1=62HSP,(B)62H(SP)+1=62HSP,(B)62H 結(jié)果:結(jié)果:(61H)

11、=30H,(62H)=70H,(SP)=62H(61H)=30H,(62H)=70H,(SP)=62H (2)(2)出棧指令出棧指令 POP directPOP direct SP SP指示的單元內(nèi)容送入指示的單元內(nèi)容送入directdirect字節(jié)字節(jié) 單元中,棧指針單元中,棧指針SPSP減減1 1。 例如例如: : 當當 (SP)=62H(SP)=62H,(62H)=70H(62H)=70H,(61H)=30H(61H)=30H時時 POP DPHPOP DPH ;(SP)DPH,(SP)-1SP ;(SP)DPH,(SP)-1SP POP DPLPOP DPL ;(SP)DPL,(SP)

12、-1SP ;(SP)DPL,(SP)-1SP 結(jié)果:結(jié)果:(DPTR)=7030H(DPTR)=7030H,(SP)=60H(SP)=60H7 7、累加器、累加器A A與外部數(shù)據(jù)存儲器傳送指令與外部數(shù)據(jù)存儲器傳送指令 MOVX A,DPTRMOVX A,DPTR ;(DPTR)A, ;(DPTR)A,讀外部讀外部RAMRAM或或I/OI/O MOVX A,RiMOVX A,Ri ;(Ri)A ;(Ri)A, ,讀外部讀外部RAMRAM或或I/OI/O MOVX DPTR,A MOVX DPTR,A ;(A)(DPTR),;(A)(DPTR),寫外部寫外部RAMRAM或或I/OI/O MOVX

13、Ri,AMOVX Ri,A ;(A)(Ri ;(A)(Ri),),寫外部寫外部RAMRAM或或I/OI/O 功能:功能:讀外部讀外部RAMRAM存儲器或存儲器或I/OI/O中的一個字節(jié),或把中的一個字節(jié),或把A A中中 一個字節(jié)的數(shù)據(jù)寫到外部一個字節(jié)的數(shù)據(jù)寫到外部RAMRAM存儲器或存儲器或I/OI/O中。中。 注意:注意:/RD/RD或或/WR/WR信號有效信號有效 采用采用DPTRDPTR間接尋址間接尋址,高,高8 8位地址(位地址(DPHDPH)由)由P2P2口輸出,口輸出, 低低8 8位地址(位地址(DPLDPL)由)由P0P0口輸出??谳敵觥?采用采用RiRi(i=0,1i=0,1)

14、間接尋址)間接尋址,可尋址片外,可尋址片外RAMRAM的的256256個個 單元范圍。高單元范圍。高8 8位地址為位地址為P2P2口上一次鎖存輸出,低口上一次鎖存輸出,低8 8位位 地址(地址(RiRi)由)由P0P0口輸出??谳敵?。8 8、查表指令、查表指令 共兩條,用于讀程序存儲器中的數(shù)據(jù)表格的指令共兩條,用于讀程序存儲器中的數(shù)據(jù)表格的指令 (1) (1) MOVC A,A+PCMOVC A,A+PC 以以PCPC作基址寄存器,作基址寄存器,A A的內(nèi)容的內(nèi)容和和PCPC中的內(nèi)容(下一條指中的內(nèi)容(下一條指 令的起始地址)令的起始地址)相加后得到一個相加后得到一個1616位的地址,位的地址

15、,該地址該地址 指出的程序存儲單元的內(nèi)容送到累加器指出的程序存儲單元的內(nèi)容送到累加器A A。 注意:注意:/PSEN/PSEN信號有效信號有效。 例如例如: : (A)=30H (A)=30H時時, ,執(zhí)行地址執(zhí)行地址1000H1000H處的指令處的指令 1000H1000H: MOVC A,A+PCMOVC A,A+PC ( (本條指令為本條指令為1 1字節(jié)指令字節(jié)指令),),執(zhí)行結(jié)果將程序存儲執(zhí)行結(jié)果將程序存儲 器中器中1031H1031H的內(nèi)容送入的內(nèi)容送入A A 表格只能存放在該條查表指令后面的表格只能存放在該條查表指令后面的256256個單元之內(nèi),個單元之內(nèi), 表格的大小受到限制,且

16、表格只能被一段程序所利用。表格的大小受到限制,且表格只能被一段程序所利用。(2)(2) MOVC A,A+DPTRMOVC A,A+DPTR 以以DPTRDPTR作為基址寄存器,作為基址寄存器,A A的內(nèi)容和的內(nèi)容和DPTRDPTR的內(nèi)容相加得到的內(nèi)容相加得到 一個一個1616位的地址,把由該地址指出的程序存儲器單元的內(nèi)位的地址,把由該地址指出的程序存儲器單元的內(nèi) 容送到累加器容送到累加器A. A. 例如例如:(DPTR)=8100H(DPTR)=8100H,(A)=40H(A)=40H,執(zhí)行指令,執(zhí)行指令 MOVC A,A+DPTRMOVC A,A+DPTR 執(zhí)行結(jié)果只和指針執(zhí)行結(jié)果只和指針

17、DPTRDPTR及累加器及累加器A A的內(nèi)容有關(guān),與的內(nèi)容有關(guān),與 該指令存放的地址,表格的大小和位置可以在該指令存放的地址,表格的大小和位置可以在64K64K 程序存儲器中任意安排,一個表格可為各個程序塊程序存儲器中任意安排,一個表格可為各個程序塊 公用。公用。9 9、字節(jié)交換指令、字節(jié)交換指令 XCH A,RnXCH A,Rn XCH A,directXCH A,direct XCH A,RiXCH A,Ri 例如:例如:(A)=80H,(R7)=08H,(40H)=F0H,(R0)=30H,(30H)=OFH(A)=80H,(R7)=08H,(40H)=F0H,(R0)=30H,(30H

18、)=OFH 執(zhí)行下列指令執(zhí)行下列指令 XCH A,R7XCH A,R7 ;(A) ;(A)與與(R7)(R7)互換互換 XCH A,40HXCH A,40H ;(A) ;(A)與與(40H)(40H)互換互換 XCH A,R0XCH A,R0 ;(A) ;(A)與與(R0)(R0)互換互換 結(jié)果結(jié)果 (A)=0FH,(R7)=80H,(40H)=08H,(30H)=F0H(A)=0FH,(R7)=80H,(40H)=08H,(30H)=F0H 1010、半字節(jié)交換指令、半字節(jié)交換指令 XCHD A,RiXCHD A,Ri 累加器的低累加器的低4 4位與內(nèi)部位與內(nèi)部RAMRAM低低4 4位交換。

19、位交換。 例如:例如: (R0)=60H,(60H)=3EH,(A)=59H (R0)=60H,(60H)=3EH,(A)=59H 執(zhí)行執(zhí)行 XCHD A,ROXCHD A,RO 則則(A)=5EH,(60H)=39H(A)=5EH,(60H)=39H。 1111、累加器、累加器A A半字節(jié)交換指令半字節(jié)交換指令 SWAP ASWAP A ;A A4 47 7 A A0 03 34.3 4.3 算術(shù)運算類指令算術(shù)運算類指令主要用于主要用于8 8位無符號數(shù)運算;也可用于帶符號數(shù)運算。位無符號數(shù)運算;也可用于帶符號數(shù)運算。包括:包括:加、減、乘、除、加加、減、乘、除、加1 1、減、減1 1運算指令

20、運算指令. .指令操作將影響指令操作將影響PSWPSW中有關(guān)狀態(tài)位。中有關(guān)狀態(tài)位。1 1、加法指令、加法指令A(yù)DD AADD A,#data #data ; A AdataAdataAADD AADD A,direct direct ; A A(direct )A(direct )AADD AADD A,RnRn ; A ARnARnAADD AADD A,RiRi ; A A(Ri)A(Ri)A 用途:用途:將將A A中的值與源操作數(shù)所指內(nèi)容相加,最終中的值與源操作數(shù)所指內(nèi)容相加,最終 結(jié)果存在結(jié)果存在A A中。中。(1 1)不帶進位位的加法指令)不帶進位位的加法指令例例1 1: ADD A

21、ADD A,#47H#47H ADD A ADD A,34H34H ADD A ADD A,R7R7 ADD A ADD A,R0R0例例2 2: MOV AMOV A,#0AEH #0AEH ADD A ADD A,#81H#81H 執(zhí)行完,執(zhí)行完,A A中的值為中的值為2FH2FH PSWPSW中狀態(tài)位中狀態(tài)位 C=1,AC=0,OV=1,P=1C=1,AC=0,OV=1,P=1 對無符號數(shù):結(jié)果為對無符號數(shù):結(jié)果為12FH;12FH; 對帶符號數(shù):對帶符號數(shù):OV=1OV=1,有錯。,有錯。(2 2)帶進位位的加法指令)帶進位位的加法指令A(yù)DDC AADDC A,RnRn; A ARnR

22、nCYACYAADDC AADDC A,directdirect; A A(direct )(direct )CYACYAADDC AADDC A,RiRi ; A A(Ri(Ri) )CYACYAADDC AADDC A,#data#data; A AdatadataCYACYA 用途:用途:將將A A中的值和操作數(shù)的值以及進位位中的值和操作數(shù)的值以及進位位C C中的值相中的值相 加,結(jié)果存在加,結(jié)果存在A A。常用于多字節(jié)數(shù)運算中。常用于多字節(jié)數(shù)運算中。例例1 1: 先做先做67H+A0H=107H67H+A0H=107H,而,而1 107H07H顯然超過了顯然超過了0FF0FFH H,因

23、此最,因此最終保存在終保存在A A中的是中的是07H07H,PSWPSW中的中的CY=1CY=1 。換言之,。換言之,CYCY就就相當于是相當于是100H100H。 然后再做然后再做10H + 30H + 10H + 30H + CYCY,結(jié)果是,結(jié)果是41H41H,所以最終的,所以最終的結(jié)果是結(jié)果是4107H4107H。1067H + 30A0H1067H + 30A0H0001 0000 0110 0111 0011 0000 1010 0000 0100 0001 0000 0111 1067H1067H30A0H30A0H4107H4107H例例2 2: 先做先做67H+20H=87H

24、67H+20H=87H,沒有超過,沒有超過0FF0FFH H,因此最終保存在,因此最終保存在A A中的是中的是87H87H,而,而PSWPSW中的中的CY=0CY=0。 然后再做然后再做10H + 30H + 10H + 30H + CYCY,結(jié)果是,結(jié)果是40H40H,所以最終的結(jié),所以最終的結(jié)果是果是4087H4087H。1067H + 3020H1067H + 3020H0001 0000 0110 0111 0011 0000 0010 0000 0100 0000 1000 0111 1067H1067H3020H3020H4087H4087H(3 3) 加加1 1指令指令I(lǐng)NC A

25、INC A;A+1A+1AA,影響,影響P P標志標志INC RnINC Rn ;Rn+1RnRn+1RnINC directINC direct;(direct)+1(direct)(direct)+1(direct)INC RiINC Ri;(Rn)+1(Rn)(Rn)+1(Rn)INC DPTRINC DPTR;DPTR+1DPTRDPTR+1DPTR例:例:A=12H,R0=33H,(21H)=32H,(34H)=22H,DPTR=1234HA=12H,R0=33H,(21H)=32H,(34H)=22H,DPTR=1234H。 INC AINC A ; A=13HA=13H INC

26、R0INC R0 ; R0=34HR0=34H INC 21H INC 21H ;(;(21H21H)=33H=33H INC R0 INC R0 ;(;(34H34H)=23H=23H INC DPTRINC DPTR ; DPTR=1235HDPTR=1235HDA ADA A在進行在進行BCDBCD碼加法運算時,跟在碼加法運算時,跟在ADDADD和和ADDCADDC指令之后,指令之后,用來對用來對BCDBCD碼加法運算結(jié)果碼加法運算結(jié)果進行進行自動修正自動修正。例:例:A=00010101A=00010101 ADD AADD A,#8#8 ; A=1DH; A=1DH,按二進制規(guī)律加,

27、按二進制規(guī)律加 DA ADA A ; A=23H ; A=23H,按十進制規(guī)律加,按十進制規(guī)律加(4 4) 十進制調(diào)整指令十進制調(diào)整指令修正方法應(yīng)是:修正方法應(yīng)是:(a a)累加器低累加器低4 4位位大于大于9 9或輔助進位位或輔助進位位Ac=1Ac=1, 則進行則進行低低4 4位加位加6 6修正修正。(b b)累加器高累加器高4 4位位大于大于9 9或進位位或進位位Cy=1Cy=1,則進,則進 行行高高4 4位加位加6 6修正修正。2 2、減法指令、減法指令SUBB ASUBB A,RnRn ;A ARnRnCYACYASUBB ASUBB A,directdirect ;A A(direc

28、t )(direct )CYACYASUBB ASUBB A,RiRi ;A A(Ri(Ri) )CYACYASUBB ASUBB A,#data#data ;A AdatadataCYACYA將將A A中的值減去源操作數(shù)所指內(nèi)容以及進位位中的值減去源操作數(shù)所指內(nèi)容以及進位位C C中的中的值,最終結(jié)果存在值,最終結(jié)果存在A A中。中。說明:說明:沒有不帶借位的減法指令,如果需要做不帶沒有不帶借位的減法指令,如果需要做不帶位的減法指令(在做第一次相減時),只要先將位的減法指令(在做第一次相減時),只要先將CYCY清零即可。清零即可。(1 1)帶借位的減法指令)帶借位的減法指令(2 2)減)減1

29、1指令指令DEC ADEC A ;A-1AA-1ADEC RnDEC Rn;Rn-1RnRn-1RnDEC directDEC direct ;(direct)-1(direct)(direct)-1(direct)DEC RiDEC Ri;(Rn)-1(Rn)(Rn)-1(Rn) 3 3、乘法指令、乘法指令MUL ABMUL AB ;A ABBABBA此指令的功能是將此指令的功能是將A A和和B B中的兩個中的兩個8 8位無符號數(shù)相乘,結(jié)果位無符號數(shù)相乘,結(jié)果將為將為1616位無符號數(shù)。其中高位無符號數(shù)。其中高8 8位放在位放在B B中,低中,低8 8位放在位放在A A中。中。在乘積大于在乘

30、積大于FFHFFH時,時,0V0V置置1 1,否則,否則OVOV為為0 0;而;而CYCY總是總是0 0。例:例: A=4EHA=4EH,B=5DHB=5DH, 執(zhí)行執(zhí)行 MUL ABMUL AB 指令后,乘積是指令后,乘積是1C56H1C56H,所以,所以 在在B B中放的是中放的是1CH1CH,而,而A A中放的則是中放的則是56H56H。 4 4、除法指令、除法指令DIV ABDIV AB;(A(AB) B) 商商A A 余數(shù)余數(shù)BB此指令的功能是將此指令的功能是將A A中的中的8 8位無符號數(shù)除位無符號數(shù)除B B中的中的8 8位位無符號數(shù),商放在無符號數(shù),商放在A A中,余數(shù)放在中,余

31、數(shù)放在B B中。中。如果在做除法前如果在做除法前B B中的值是中的值是00H00H,也就是除數(shù)為,也就是除數(shù)為0 0,那么那么0V=10V=1。例:例:A=11HA=11H,B=04HB=04H 執(zhí)行執(zhí)行 DIV ABDIV AB 指令后,結(jié)果為:指令后,結(jié)果為:A=04HA=04H,B=1B=1。4.4 4.4 邏輯運算與循環(huán)類指令邏輯運算與循環(huán)類指令主要用于對主要用于對2 2個字節(jié)操作數(shù)個字節(jié)操作數(shù)( (按位按位) )進行邏輯操進行邏輯操作,結(jié)果送到作,結(jié)果送到A A或直接尋址單元。或直接尋址單元。主要操作主要操作與、或、異或、移位、取反、清零等與、或、異或、移位、取反、清零等對標志位的影

32、響對標志位的影響除了目的操作數(shù)為除了目的操作數(shù)為ACCACC的指令影響奇偶的指令影響奇偶標志標志P P外,一般不影響標志位。外,一般不影響標志位。1 1、邏輯或指令、邏輯或指令ORL AORL A,RnRn ;ARnAARnAORL AORL A,directdirect ;A(direct)AA(direct)AORL AORL A,RiRi ;A(Ri)AA(Ri)AORL AORL A,#data#data ;AdataAAdataAORL directORL direct,A A ;(direct)A(direct)(direct)A(direct)ORL directORL dire

33、ct,#data#data ;(direct)data(direct)(direct)data(direct)影響影響P P標志標志例:例:71H71H和和56H56H相或:相或:01110001 01110001 (71H71H) ) 01010110 01010110 (56H56H) 01110111 01110111 即即(77H)(77H)后兩條指令,若直接地址為后兩條指令,若直接地址為I/OI/O端口,則端口,則為為“讀改寫讀改寫”操作。操作。2 2、邏輯與指令、邏輯與指令 ANL AANL A,RnRn ;ARnAARnAANL AANL A,directdirect ;A(di

34、rect)AA(direct)AANL AANL A,RiRi ;A(Ri)AA(Ri)AANL AANL A,#data#data ;AdataAAdataAANL directANL direct,A A ;(direct)A(direct)(direct)A(direct)ANL directANL direct,#data#data ;(direct)data(direct)(direct)data(direct)影響影響P P標志標志例:例:71H71H和和56H56H相與:相與:01110001 01110001 (71H71H) ) 01010110 01010110 (56H5

35、6H) 01010000 01010000 即即(50H)(50H)后兩條指令,若直接地址為后兩條指令,若直接地址為I/OI/O端口,則端口,則為為“讀改寫讀改寫”操作。操作。3 3、邏輯、邏輯異或異或指令指令 XRL AXRL A,RnRn ;ARnAARnAXRL AXRL A,directdirect ;A(direct)AA(direct)AXRL AXRL A,RiRi ;A(Ri)AA(Ri)AXRL AXRL A,#data#data ;AA dataAdataAXRL directXRL direct,A A ;(direct)(direct) A(directA(direct

36、) )XRL directXRL direct,#data#data ;(direct)(direct) data(directdata(direct) )影響影響P P標志標志例:例:71H71H和和56H56H相相異或異或:01110001 01110001 (71H71H) ) 01010110 01010110 (56H56H) 00100111 00100111 即即(27H)(27H)后兩條指令,若直接地址為后兩條指令,若直接地址為I/OI/O端口,則端口,則為為“讀改寫讀改寫”操作。操作。 4 4、取反與清、取反與清0 0指令指令取反:取反: CPL ACPL A ;/AA/AA

37、例:例:若若 A = 5CHA = 5CH, 執(zhí)行執(zhí)行 CPL ACPL A 結(jié)果結(jié)果 A = A3HA = A3H清清0 0: CLR ACLR A ;0A0A5 5、循環(huán)移位指令、循環(huán)移位指令A(yù).7 A.0A.7 A.0循環(huán)左移循環(huán)左移 RL ARL A循環(huán)右移循環(huán)右移 RR ARR AA.7 A.0CYCYA.7 A.0此兩條指令,影響此兩條指令,影響P P和和CYCY標志。標志。帶進位位循環(huán)左移帶進位位循環(huán)左移 RLC ARLC A帶進位位帶進位位循環(huán)右移循環(huán)右移 RRC ARRC A例:例:若若A=5CHA=5CH,CY=1CY=1 執(zhí)行執(zhí)行 RLC ARLC A 后后 結(jié)果結(jié)果 A

38、=B9HA=B9H,CY=0CY=0,P=1P=1v 對對RLCRLC、RRCRRC指令,在指令,在CY=0CY=0時時 RLCRLC相當于相當于乘乘以以2 2 RRCRRC相當于相當于除除以以2 20101 11000101 11001 11011 10011011 10010 0綜合舉例:綜合舉例:ANL AANL A,#0FH#0FH ;屏蔽;屏蔽A A的高的高4 4位位SWAP ASWAP AANL P1ANL P1,#0FH#0FH ;清;清P1P1口高口高4 4位位ORL P1ORL P1,A A ;P1P1口高口高4 4位輸出位輸出A A的低的低4 4位;位; 把累加器把累加器A

39、 A中的低中的低4 4位狀態(tài),通過位狀態(tài),通過P1P1口的高口的高4 4位輸出,位輸出, P1P1口的低口的低4 4位狀態(tài)不變。位狀態(tài)不變。4.5 4.5 程序轉(zhuǎn)移類指令程序轉(zhuǎn)移類指令此類指令一般不影響此類指令一般不影響PSWPSW。包括以下類型:包括以下類型:無條件轉(zhuǎn)移和條件轉(zhuǎn)移無條件轉(zhuǎn)移和條件轉(zhuǎn)移相對轉(zhuǎn)移和絕對轉(zhuǎn)移相對轉(zhuǎn)移和絕對轉(zhuǎn)移長轉(zhuǎn)移和短轉(zhuǎn)移長轉(zhuǎn)移和短轉(zhuǎn)移調(diào)用與返回指令調(diào)用與返回指令1 1、無條件轉(zhuǎn)移類指令、無條件轉(zhuǎn)移類指令 短轉(zhuǎn)移指令:短轉(zhuǎn)移指令: AJMP addr11AJMP addr11 長轉(zhuǎn)移指令:長轉(zhuǎn)移指令: LJMP addr16LJMP addr16 相對轉(zhuǎn)移指令:相對

40、轉(zhuǎn)移指令: SJMP relSJMP rel 間接轉(zhuǎn)移指令:間接轉(zhuǎn)移指令: JMP A+DPTRJMP A+DPTR前三條指令區(qū)別:前三條指令區(qū)別: 跳轉(zhuǎn)的范圍不同跳轉(zhuǎn)的范圍不同 短轉(zhuǎn)移類指令:短轉(zhuǎn)移類指令:AJMP addr11AJMP addr11 長轉(zhuǎn)移類指令:長轉(zhuǎn)移類指令:LJMP addr16LJMP addr16 相對轉(zhuǎn)移指令:相對轉(zhuǎn)移指令:SJMP relSJMP rel 轉(zhuǎn)移范圍轉(zhuǎn)移范圍: 2KB2KB 64KB 64KB -128 -128+127+127指令構(gòu)成不同。指令構(gòu)成不同。 AJMPAJMP、LJMPLJMP后跟的是后跟的是絕對地址絕對地址, 而而SJMPSJMP后

41、跟的是后跟的是相對地址相對地址。指令長度不同指令長度不同原則上,原則上,SJMPSJMP或或AJMPAJMP都可以用都可以用LJMPLJMP來替代。來替代。 散轉(zhuǎn)指令:散轉(zhuǎn)指令:JMP A+DPTRJMP A+DPTR 這條指令的用途也是跳轉(zhuǎn),轉(zhuǎn)到什么地方去呢?往往由這條指令的用途也是跳轉(zhuǎn),轉(zhuǎn)到什么地方去呢?往往由運算結(jié)果運算結(jié)果決定。決定。 轉(zhuǎn)移地址由轉(zhuǎn)移地址由A+DPTRA+DPTR形成,并直接送入形成,并直接送入PCPC。 指令對指令對A A、DPTRDPTR和標志位均無影響。和標志位均無影響。 本指令可代替眾多的判別跳轉(zhuǎn)指令,又稱為本指令可代替眾多的判別跳轉(zhuǎn)指令,又稱為散轉(zhuǎn)指令散轉(zhuǎn)指令

42、,多用于多分支程序結(jié)構(gòu)中。多用于多分支程序結(jié)構(gòu)中。第四條指令不同之處:第四條指令不同之處:2 2、條件轉(zhuǎn)移指令、條件轉(zhuǎn)移指令1 1)判)判A A內(nèi)容是否為內(nèi)容是否為0 0轉(zhuǎn)移指令轉(zhuǎn)移指令 JZ relJZ rel ;如果;如果A=0A=0,則轉(zhuǎn)移,否則順序執(zhí)行。,則轉(zhuǎn)移,否則順序執(zhí)行。 JNZ relJNZ rel ;如果;如果A0A0,就轉(zhuǎn)移。,就轉(zhuǎn)移。 符合條件,轉(zhuǎn)移到相對符合條件,轉(zhuǎn)移到相對偏偏移量地址去。即:移量地址去。即: 新的新的PCPC值值 = = 當前當前PC + PC + 偏移量偏移量relrel 在編寫匯編語言源程序時,可以直接寫成:在編寫匯編語言源程序時,可以直接寫成:

43、JZ JZ 標號標號 ;即轉(zhuǎn)移到標號處(目標地址;即轉(zhuǎn)移到標號處(目標地址標號)標號)2 2)比較不等轉(zhuǎn)移指令)比較不等轉(zhuǎn)移指令CJNE ACJNE A, #data#data,relrel CJNE ACJNE A, directdirect,relrelCJNE RnCJNE Rn,#data#data,relrelCJNE RiCJNE Ri,#data#data,relrel 此類指令的功能是先將兩個操作數(shù)進行比較。此類指令的功能是先將兩個操作數(shù)進行比較。 如果兩者相等,就順序執(zhí)行;如果兩者相等,就順序執(zhí)行; 如果不相等,就轉(zhuǎn)移,并影響如果不相等,就轉(zhuǎn)移,并影響C C。 不影響操作數(shù)。

44、不影響操作數(shù)。指令分析:指令分析:使用時,可以將使用時,可以將relrel理解成標號,即:理解成標號,即: CJNE ACJNE A, #data#data,標號,標號 CJNE ACJNE A, directdirect,標號,標號 CJNE RnCJNE Rn,#data#data,標號,標號 CJNE RiCJNE Ri,#data#data,標號,標號利用這些指令,可以判斷兩個數(shù)是否利用這些指令,可以判斷兩個數(shù)是否相等相等。但。但有時還想得知兩個數(shù)有時還想得知兩個數(shù)哪個大哪個大、哪個小哪個小,本指,本指令也具有這樣的功能。令也具有這樣的功能。如果兩個數(shù)不相等,如果兩個數(shù)不相等,CPUC

45、PU還會用還會用C CY Y來反映哪個數(shù)來反映哪個數(shù)大哪個數(shù)小大哪個數(shù)小如果前面的數(shù)大,則如果前面的數(shù)大,則C CY Y=0=0,否則,否則C CY Y=1=1。因此在。因此在程序轉(zhuǎn)移后再次利用程序轉(zhuǎn)移后再次利用C CY Y就可判斷出哪個數(shù)大,就可判斷出哪個數(shù)大,哪個數(shù)小了。哪個數(shù)小了。3 3)減)減1 1不為不為0 0轉(zhuǎn)移指令轉(zhuǎn)移指令 DJNZ Rn DJNZ Rn,relrel DJNZ direct DJNZ direct,relrel DJNZ DJNZ指令的執(zhí)行過程指令的執(zhí)行過程: : 將第一個參數(shù)中的值將第一個參數(shù)中的值減減1 1,然后看這個值是否等于,然后看這個值是否等于0 0。

46、 如果如果等于等于0 0,就往下執(zhí)行;,就往下執(zhí)行; 如果如果不等于不等于0 0,就轉(zhuǎn)移,就轉(zhuǎn)移到第二個參數(shù)所指定的地方去。到第二個參數(shù)所指定的地方去。 例:例: MOV 23H,#0AHMOV 23H,#0AH CLR A CLR A LOOP: ADD A,23H LOOP: ADD A,23H DJNZ 23H,LOOP DJNZ 23H,LOOP SJMP $ SJMP $執(zhí)行過程:執(zhí)行過程:將將23H23H單元中的數(shù)連續(xù)相加,存至單元中的數(shù)連續(xù)相加,存至A A中,每加一次,中,每加一次, 23H23H單元單元中的數(shù)值中的數(shù)值減減1 1,直至減到,直至減到0 0,共加,共加0AH0AH

47、次。次。3 3、子程序調(diào)用與返回指令、子程序調(diào)用與返回指令1 1)調(diào)用指令)調(diào)用指令 LCALL addr16LCALL addr16 ;長調(diào)用指令;長調(diào)用指令 ACALL addr11ACALL addr11 ;短調(diào)用指令;短調(diào)用指令 用在主程序中調(diào)用子程序。用在主程序中調(diào)用子程序。 對短調(diào)用指令,被調(diào)用子程序入口地址必須與調(diào)用指對短調(diào)用指令,被調(diào)用子程序入口地址必須與調(diào)用指 令下一條指令的第一字節(jié)在相同的令下一條指令的第一字節(jié)在相同的2KB2KB存儲區(qū)之內(nèi)。存儲區(qū)之內(nèi)。 使用時可以用標號表示子程序首地址使用時可以用標號表示子程序首地址2 2)返回指令)返回指令 RETRET;子程序返回指令

48、;子程序返回指令 RETIRETI;中斷子程序返回指令;中斷子程序返回指令子程序執(zhí)行完后必須返回到主程序。子程序執(zhí)行完后必須返回到主程序。兩者不能互換使用。兩者不能互換使用。 NOP NOP 空操作,停一個周期,一般用作短時間的延時。空操作,停一個周期,一般用作短時間的延時。3 3)空操作指令)空操作指令 4.6 4.6 位操作指令位操作指令80518051單片機的硬件結(jié)構(gòu)中,有一單片機的硬件結(jié)構(gòu)中,有一個位處理器個位處理器(又稱(又稱布爾處理器布爾處理器),它有一套位變量處理的指令集,包括位變),它有一套位變量處理的指令集,包括位變量傳送、邏輯運算、控制程序轉(zhuǎn)移等。量傳送、邏輯運算、控制程序轉(zhuǎn)移等。在在80518051中,有一部份中,有一部份RAMRAM和一部份和一部份SFRSFR是具有位尋址是具有位尋址功能的。功能的。v 位操作區(qū):內(nèi)部位操作區(qū):內(nèi)部RAMRAM的的20H-2FH20H-2FH這這1616個字節(jié)單元,個字節(jié)單元,即

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論