MCS-51單片微型計算機及其應用:第4章 MCS-51單片機指令系統_第1頁
MCS-51單片微型計算機及其應用:第4章 MCS-51單片機指令系統_第2頁
MCS-51單片微型計算機及其應用:第4章 MCS-51單片機指令系統_第3頁
MCS-51單片微型計算機及其應用:第4章 MCS-51單片機指令系統_第4頁
MCS-51單片微型計算機及其應用:第4章 MCS-51單片機指令系統_第5頁
已閱讀5頁,還剩100頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第4章 MCS-51單片機指令系統4.1機器、匯編和高級語言 4.2 MCS-51指令系統概述 4.3 數據傳送類指令 4.4 算術運算類指令 4.5邏輯運算及移位指令 4.6控制轉移類指令 4.7子程序調用及返回指令 4.8 位操作類指令4.1 機器語言、匯編語言和高級語言二進制代碼表示的指令、數字和符號,簡稱為機器語言。不易懂,難記憶,易出錯。英文助記符表示的指令稱為符號語言或匯編語言不受具體機器的限制,使用了許多數學公式和數學計算上的習慣用語。機器語言匯編語言高級語言匯編語言特點:(1) 面向機器的語言,程序設計員須對MCS-51的硬件有相當深入的了解。(2) 助記符指令和機器指令一一對

2、應,用匯編語言編寫的程序效率高,占用存儲空間小,運行速度快,用匯編語言能編寫出最優化的程序。(3) 能直接管理和控制硬件設備(功能部件),它能處理中斷,也能直接訪問存儲器及I/O接口電路。 匯編語言和機器語言都脫離不開具體機器的硬件,均是面向“機器”的語言,缺乏通用性。 高級語言優點:通用性強,直觀、易懂、易學,可讀性好。可 使用C語言(C51)、PL/M語言來進行MCS-51的應 用程序設計。 對于程序的空間和時間要求很高的場合,匯編語言仍是必不可缺的。 在很多需要直接控制硬件的應用場合,則更是非用匯編語言不可。 可C語言和匯編語言混合編程。4.2 MCS-51單片機指令系統概述4.2.1

3、指令、指令系統的概念指令:是使計算機內部執行的一種操作,提供給用戶編程使用的 一種命令。機器語言:以二進制代碼來描述指令功能的語言。匯編語言:給每條機器語言指令賦予助記符號來表示,這就形成 了匯編語言。是一種指令形式指令系統:計算機能夠執行的全部操作所對應的指令集合。 指令的描述形式有兩種:機器語言形式(指令代碼)和匯編語言(助記符)形式 指令代碼 助記符 功能 740A MOV A,#0AH 將十六進制數0AH 放入累加器A中采用機器語言編寫的程序稱之為目標程序采用匯編語言編寫的程序稱之為源程序 匯編匯編語言程序 機器語言程序 MCS-51的匯編語言的四分段格式如下: 標號字段 操作碼字段

4、操作數字段 注釋字段操作碼:由助記符表示的字符串,它規定了指令的操作功能操作數:參加操作的數據或數據的地址注釋:為該條指令作的說明,以便于閱讀規則:(1)標號字段和操作字碼段之間要有冒號“:”相隔;(2)操作碼字段和操作數字段間的分界符是空格;(3)雙操作數之間用逗號相隔; (4)操作數字段和注釋字段之間的分界符用分號“;”相隔。 操作碼字段和操作數字段為必選項,其余各段為任選 項。 指令一般有功能、時間和空間三種屬性。功能屬性:是指每條指令都對應一個特定的操作功能;時間屬性:是指一條指令執行所用的時間,一般用機器周期來 表示;空間屬性:是指一條指令在程序存儲器中存儲所占用的字節數4.2.2

5、MCS-51單片機指令系統及其指令格式單機器周期(64條)雙機器周期(45條)4個機器周期指令(只有乘、除法)單字節指令(49條)雙字節指令(45條)三節指令(17條)B 空間數據傳送(28條)算術操作(24條)邏輯操作(25條)程序轉移(17條)位操作類(17條)A 功能MCS-51單片機指令系統共有111條指令C 時間 為便于后面的學習,在這里先對描述指令的一些符號的約定意義作以說明: (1) Ri和Rn:表示當前工作寄存器區中的工作寄存器,i取0或1,表示R0或R1。n取07,表示R0R7。 (2) #data:表示包含在指令中的8位立即數。 (3) #data16:表示包含在指令中的1

6、6位立即數。 (4) rel:以補碼形式表示的8位相對偏移量,范圍為-128127,主要用在相對尋址的指令中。 (5) addr16和addr11:分別表示16位直接地址和11位直接地址。 (6) direct:表示直接尋址的地址。 (7) bit:表示可位尋址的直接位地址。 (8) (X):表示X單元中的內容。 (9) (X):表示以X單元的內容為地址的存儲器單元內容,即(X)作地址,該地址單元的內容用(X)表示。 (10) / 和符號:“/”表示對該位操作數取反,但不影響該位的原值。“”表示操作流程,將箭尾一方的內容送入箭頭所指另一方的單元中去。 4.3 29條數據傳送類指令 4.3.1

7、訪問片內數據存儲器的一般數據傳送指令 MOV ,功能:目的操作數單元源操作數(或單元) (屬“復制”性質,而不是“搬家”) (數據傳送類指令不影響標志位:Cy、Ac和OV,影響奇偶標志位P) 1、四條以累加器A為目的操作數的指令MOV A, Rn; A - RnMOV A, direct; A - RnMOV A, Ri ; A - RiMOV A, #data ; A - data Ri為R0、R1。2、三條以寄存器Rn為目的操作數的指令MOV Rn, A; Rn - AMOV Rn, direct; Rn - directMOV Rn, #data; Rn - dataRn為R0R7例:A

8、=5BH,R1=10H,R2=20H,R3=30H,(30H)=4FHMOV R1,AMOV R2,30HMOV R3,#83H執行后:R1,R2,R3為多少?3、五條以直接地址(內部數據存貯器00H7FH及 80HFFH)為目的操作數的指令MOV direct, A; (direct) - AMOV direct, Rn; (direct) - -RnMOV direct, direct; (direct) - (direct)MOV direct, Ri; (direct) - (Ri)MOV direct, #data; (direct) - data例:R0=60H,片內存儲單元(60

9、H)=50H MOV 40H,R0;執行后:40H=?4、三條以間接地址為目的操作數的指令MOV Ri, A ; (Ri) - AMOV Ri, direct; (Ri) - directMOV Ri, #data ; (Ri) - data 間接地址指向內部數據存貯器地址00H7FH及80HFFH地址。Ri:為R0或R1 5、一條16位數據傳送類指令MOV DPTR, #data16; DPH - dataH, DPL 9或(AC)=1,則(A)30(A)30+06H若(A)749或(CY)=1,則(A)74(A)74+60HDA A ; 在進行BCD碼加法運算時,跟在ADD和ADDC指令之

10、后,用來對BCD碼加法運算結果進行自動修正。例:A=00010101 ADD A,#8 ; A=1DH,按二進制規律加 DA A ; A=23H,按十進制規律加 修正方法應是:(a)累加器低4位大于9或輔助進位位Ac=1, 則進行低4位加6修正。(b)累加器高4位大于9或進位位Cy=1,則進 行高4位加6修正。 在計算機中,在遇到十進制調整指令時,中間結果的修正是由ALU硬件中的十進制修正電路自動進行的。用戶不必考慮何時該加“6”,使用時只需要在上述加法指令后面緊跟一條DA A指令即可。DA A指令不適用于減法指令。 例:累加器A中BCD碼數是5,立即數為8,執行加法指令ADD A,#08,在

11、CPU中是按照二進制加法進行的,結果為1101,BCD碼無此值,加6調整后,可得正確的結果,13 例 對BCD碼加法65 + 58DBH,進行十進制調整。 參考程序如下:MOV A,#65H ;(A)65ADD A,#58H ;(A)(A)+58DA A ;十進制調整3.4.3 乘、除法指令MUL AB;(B)(A)(B)158(A)(A)(B)70CY0機器碼:A4H 乘法指令的功能是把累加器A和寄存器B中的兩個8位無符號數相乘,將乘積16位數中的低8位存放在A中,高8位存放在B中。若乘積大于FFH(255),則溢出標志OV置1,否則OV清零。乘法指令執行后進位標志CY總是零,即CY=0。2

12、除法指令DIV AB;(A)(A)(B)之商,(B)(A)(B)之余數(CY)0,(OV)0機器碼:84H 除法指令的功能是把累加器A中的8位無符號整數除以寄存器B中的8位無符號整數,所得商存于累加器A中,余數存于寄存器B中,進位標志位CY和溢出標志位OV均被清零。若B中的內容為0時,溢出標志OV被置1,即OV=1,而CY仍為0。例:試編寫計算1234H+0FE7H的程序,將和的高8位存入41H, 低8位存入40H單元。 先計算低8位,后計算高8位,計算高8位時需要考慮進位位。MOV A,#34HADD A,#0E7HMOV 40H,AMOV A,#12HADDC A,#0FHMOV 41H,

13、A例:把上例中的加法改為減法,其它要求相同CLR CMOV A,#34HSUBB A,#0E7HMOV 40H,AMOV A,#12HSUBB A,#0FHMOV 41H,A例:試編寫計算17H*68H的程序,將乘積的高8位存入31H,低8位存入30H單元。MOV A,#17HMOV B,#68HMUL ABMOV 30H,AMOV 31H,B4.5 邏輯運算及移位指令圖3.5 邏輯指令形式結構圖 與加、減法指令尋址方式相同的邏輯指令;(b) 與加、減法指令尋址方式不同的邏輯指令 這一類指令主要用于對2個操作數按位進行邏輯操作,操作結果送到A累加器或直接尋址單元,這一類指令所能執行的操作主要有

14、“與”、“或”、“異或”以及移位、取反、清除等。這些指令一般不影響程序狀態字寄存器PSW,僅當目的操作數為ACC時對奇偶標志位有影響。1、 六條邏輯與指令ANL A,Rn; A - ARnANL A, direct; A - A(direct)ANL A, Ri; A - A(Ri)ANL A, #data; A - AdataANL direct, A; (direct) (direct)AANL direct, #data; (direct) (direct)data “與邏輯”:全1為1,有0為0。例:已經A=8FH,(40H)=96H,執行指令ANL A,40H,則操作如下:10001

15、111()10010110_10000110結果:A=86H,(40H)=96H,P=1 2、六條邏輯或指令ORL A,Rn; A - ARnORL A, direct; A- A(direct)ORL A, Ri; A - A(Ri)ORL A, #data; A - AdataORL direct, A; (direct) - (direct)AORL direct, data; (direct) - (direct)data“或邏輯”:有1為1,全0為0。 例:已經A=1AH,R0=45H,(45H)=39H,執行指令ORL A,R0,則操作如下:00011010()00111001_0

16、0111011結果:A=3BH,R0=45H,(45H)=39H,P=13、 六條邏輯異或指令XRL A, Rn; A - ARnXRL A, direct; A - A(direct)XRL A, Ri ; A - A(Ri)XRL A, #data; A - AdataXRL direct, A; (direct) - (direct)AXRL direct, #data; (direct) - (direct)data“異或邏輯”:相同為0,不同為1。例:已經A=87H,(32H)=77H,執行指令XRL 32H,A,則操作如下:10000111)01110111-11110000結果:

17、A=87H,(32H)=0F0H,P=0 4、四條循環移位指令RL A; A循環左移RR A; A循環右移RLC A; A帶進位位的循環左移RRC A; A帶進位位的循環右移前兩條指令執行后不影響PSW中的各位;后兩條指令執行后影響PSW中的進位位CY和奇偶狀態標志位。 A.7 A.0A.7 A.0循環左移 RL A循環右移 RR AA.7 A.0CYCYA.7 A.0此兩條指令,影響P和CY標志。帶進位位循環左移 RLC A帶進位位循環右移 RRC A例:若A=5CH,CY=1 執行 RLC A 后 結果 A=B9H,CY=0,P=1 對RLC、RRC指令,在CY=0時RLC相當于乘以2RR

18、C相當于除以20101 110011011 100105、一條取反指令CPL A; A - (/A)功能:將累加器A的內容按位邏輯取反。 6、一條清零指令CLR A; A - 0例:把累加器A中數據的低4位送入外部數據存儲器的3000H單元。MOV DPTR,#3000HANL A,#0FHMOVX DPTR,A 例:將累加器A中低4位的狀態,通過P1口的高4位輸出。ANL A,#0FHSWAP AANL P1,#0FHORL P1,A例 設(A)=5AH=90,且CY=0,則執行指令RL A后,(A)=B4H=180。執行指令 RR A后,(A)=2DH=45。執行指令 RLC A后,(A)

19、=B4H=180。執行指令 RRC A后,(A)=2DH=45。用移位指令還可以實現算術運算,左移一位相當于原內容乘以2,右移一位相當于原內容除以2,但這種運算關系只對某些數成立(請讀者自行思考)。4.6 控制轉移類指令4.6.1 無條件轉移指令 轉移和調用類指令在編程時都可以用目的程序的代號(標號)來代替目的程序的地址。LJMP(長調用指令): 使程序從當前地址轉移到64 KB程序存儲器地址空間的任意地址,故得名為長轉移AJMP(絕對調用指令):程序可轉移的位置是和PC當前值在同一2 KB范圍內。SJMP(相對轉移指令):該指令的轉移范圍是:相對PC當前值向前轉128字節,向后轉127字節。

20、JMP A+DPTR(間接轉移指令):它是以數據指針DPTR的內容為基址,以累加器A的內容為相對偏移量,在64 KB范圍內無條件轉移。前三條指令區別: 跳轉的范圍不同 短轉移類指令:AJMP addr11 長轉移類指令:LJMP addr16 相對轉移指令:SJMP rel 轉移范圍: 2KB 64KB -128+127指令構成不同。 AJMP、LJMP后跟的是絕對地址, 而SJMP后跟的是相對地址。指令長度不同原則上,SJMP或AJMP都可以用LJMP來替代。 散轉指令:JMP A+DPTR 這條指令的用途也是跳轉,轉到什么地方去呢?往往由運算結果決定。 轉移地址由A+DPTR形成,并直接送

21、入PC。 指令對A、DPTR和標志位均無影響。 本指令可代替眾多的判別跳轉指令,又稱為散轉指令,多用于多分支程序結構中。第四條指令不同之處:1LJMP(長調用指令) LJMP指令執行后,程序無條件地轉向16位目標地址(addr16)處執行,不影響標志位。由于指令中提供16位目標地址,所以執行這條指令可以使程序從當前地址轉移到64 KB程序存儲器地址空間的任意地址,故得名為“長轉移”。該指令的缺點是執行時間長,字節多。 2AJMP(絕對調用指令) AJMP的機器碼是由11位直接地址addr11和指令操作碼00001,按下列分布組成的: a10 a9 a8 0 0 0 0 1 a7 a6 a5 a

22、4 a3 a2 a1 a0 該指令執行后,程序轉移的目的地址是由AJMP指令所在位置的地址PC值加上該指令字節數2,構成當前PC值。取當前PC值的高5位與指令中提供的11位直接地址形成轉移的目的地址,即 PC15 PC14 PC13 PC12 PC11a10 a9 a8 a7 a6 a5 a4 a3 a2 a1 a0轉移目的地址(PC) 由于11位地址的范圍是0000000000011111111111,即2 KB范圍,而目的地址的高5位是由PC當前值,所以程序可轉移的位置只能是和PC當前值在同一2 KB范圍內。本指令轉移可以向前也可以向后,指令執行后不影響狀態標志位。 例如:若AJMP指令地

23、址(PC)=2300H。執行指令AJMP 0FFH后,結果為:轉移目的地址(PC)=20FFH,程序向前轉到20FFH單元開始執行。 又如:若AJMP指令地址(PC)=2FFFH。執行指令AJMP 0FFH后,結果為:轉移目的地址(PC)=30FFH,程序向后轉到30FFH單元開始執行。 由上可見:若addr11相同,則AJMP指令的機器碼相同,但轉移的目的地址卻可能不同,這是因為轉移的目的地址是由PC當前值的高5位與addr11共同決定的。 3SJMP(相對轉移指令) 指令的操作數rel用8位帶符號數補碼表示,占指令的一個字節。因為8位補碼的取值范圍為-128+127,所以該指令的轉移范圍是

24、:相對PC當前值向前轉128字節,向后轉127字節。即轉移目的地址= SJMP指令所在地址+2+rel 如在2100H單元有SJMP指令,若rel = 5AH(正數),則轉移目的地址為215CH(向后轉);若rel = F0H(負數),則轉移目的地址為20F2H(向前轉)。 用匯編語言編程時,指令中的相對地址rel往往用欲轉移至的地址的標號(符號地址)表示。機器匯編時,能自動算出相對地址值; 因為MCS-51的指令集無暫停指令,所以常用下列指令將程序原處無限循環,進入等待狀態。L4:SJMP L4 4JMP A+DPTR(間接轉移指令) 它是以數據指針DPTR的內容為基址,以累加器A的內容為相

25、對偏移量,在64 KB范圍內無條件轉移。該指令的特點是轉移地址可以在程序運行中加以改變。例如,當DPTR為確定值,根據A的不同值就可以實現多分支的轉移。該指令在執行后不會改變DPTR及A中原來的內容。例 根據累加器A的值,轉不同處理程序的入口。 MOV DPTR,#TABLE ;表首地址送DPTR JMP A+DPTR ;根據A值轉移 TABLE:AJMP TAB1 ;當(A)=0時轉TAB1執行 AJMP TAB2 ;當(A)=2時轉TAB2執行 AJMP TAB3 ;當(A)=4時轉TAB3執行4.6.2 條件轉移指令 條件轉移指令是當某種條件滿足時,程序轉移執行;條件不滿足時,程序仍按原

26、來順序執行。轉移的條件可以是上一條指令或更前一條指令的執行結果(常體現在標志位上),也可以是條件轉移指令本身包含的某種運算結果。由于該類指令采用相對尋址,因此程序可在以當前PC值為中心的-128+127范圍內轉移。該類指令共有8條,可以分為累加器判零條件轉移指令、比較條件轉移指令和減1條件轉移指令三類。1、判A內容是否為0轉移指令 JZ rel ;如果A=0,則轉移,否則順序執行。 JNZ rel ;如果A0,就轉移。 符合條件,轉移到相對偏移量地址去。即: 新的PC值 = 當前PC + 偏移量rel 在編寫匯編語言源程序時,可以直接寫成: JZ 標號 ;即轉移到標號處(目標地址標號) 例 將

27、片外RAM首地址為DATA1的一個數據塊轉送到片內RAM首地址為DATA2的存儲區中。 外部RAM向內部RAM的數據轉送一定要經過累加器A,利用判零條件轉移正好可以判別是否要繼續傳送或者終止。完成數據傳送的參考程序如下: MOV R0,#DATA1 ;R0作為外部數據塊的地址指針 MOV R1,#DATA1 ;R1作為內部數據塊的地址指針LOOP: MOVX A,R0 ;取外部RAM數據送入AHERE: JZ HERE ;數據為零則終止傳送 MOV R1,A ;數據傳送至內部RAM 單元 INC R0 ;修改指針,指向下一數據地址 INC R1 SJMP LOOP ;循環取數2、比較不等轉移指

28、令CJNE A, #data,rel CJNE A, direct,relCJNE Rn,#data,relCJNE Ri,#data,rel 此類指令的功能是先將兩個操作數進行比較。 如果兩者相等,就順序執行; 如果不相等,就轉移,并影響C。 不影響操作數。指令分析:使用時,可以將rel理解成標號,即: CJNE A, #data,標號 CJNE A, direct,標號 CJNE Rn,#data,標號 CJNE Ri,#data,標號利用這些指令,可以判斷兩個數是否相等。但有時還想得知兩個數哪個大、哪個小,本指令也具有這樣的功能。如果前面的數大,則CY=0,否則CY=1。因此在程序轉移后

29、再次利用CY就可判斷出哪個數大,哪個數小了。3、減1不為0轉移指令 DJNZ Rn,rel DJNZ direct,rel DJNZ指令的執行過程: 將第一個參數中的值減1,然后看這個值是否等于0。 如果等于0,就往下執行; 如果不等于0,就轉移到第二個參數所指定的地方去。 例: MOV 23H,#0AH CLR A LOOP: ADD A,23H DJNZ 23H,LOOP SJMP $執行過程:將23H單元中的數連續相加,存至A中,每加一次, 23H單元中的數值減1,直至減到0,共加0AH次。 例 將內部RAM從DATA單元開始的10個無符號數相加,相加結果送SUM單元保存。 設相加結果不

30、超過8位二進制數,則相應的程序如下: MOV R0,#0AH ;設置循環次數 MOV R1,#DATA ;R1作地址指針,指向數據塊首地址 CLR A ;A清零LOOP: ADD A,R1 ;加一個數 INC R1 ;修改指針,指向下一個數 DJNZ R0,LOOP ;R0減1,不為0循環 MOV SUM,A ;存10個數相加的和4.7 子程序調用與返回指令1、 反復多次執行某段程序,可將此程序獨立出來作為子程序;2、 子程序可以被主程序多次調用,能實現這種功能的指令即為調用指令。3、子程序執行完需自動返回到主程序原斷口地址繼續執行,因此,結尾放一條返回指令。4.7.1 子程序調用指令子程序調

31、用指令有長調用和絕對調用兩條,它們都是雙周期指令。 LCALL和ACALL指令類似于轉移指令LJMP和AJMP,不同之處在于它們在轉移前要把執行完該指令的PC內容自動壓入堆棧后,才將子程序入口地址addr16(或addr11)送PC,實現轉移。 4.7.2 返回指令 返回指令共兩條:一條是對應兩條調用指令的子程序返回指令RET,另一條是對應從中斷服務程序的返回指令RETI。 從上述兩條指令的功能操作看,都是從堆棧中彈出返回地址送PC,堆棧指針減2,但它們是兩條不同的指令。其有下面兩點不同: (1) 從使用上,RET指令必須作子程序的最后一條指令;RETI必須作中斷服務程序的最后一條指令。 (2

32、) RETI指令除恢復斷點地址外,還恢復CPU響應中斷時硬件自動保護的現場信息。執行RETI指令后,將清除中斷響應時所置位的優先級狀態觸發器,使得已申請的同級或低級中斷申請可以響應;而RET指令只能恢復返回地址。4.7.3 空操作指令 NOP ;(PC)(PC)+1 空操作指令是一條單字節單周期指令。它控制 CPU不做任何操作,僅僅是消耗這條指令執行所需要的一個機器周期的時間,不影響任何標志位,故稱為空操作指令。NOP指令在設計延時程序、拼湊精確延時時間及在程序等待或修改程序等場合是很有用的。4.8 位操作類指令8051單片機的硬件結構中,有一個位處理器(又稱布爾處理器),它有一套位變量處理的指令集,包括位變量傳送、邏輯運算、控制程序轉移等。在8051中,有一部份RAM和一部份SFR是具有位尋址功能的。位操作區:內部RAM的20H-2FH這16個字節單元,即128個位單元(位地址空間位007FH);可以位尋址的特殊功能寄存器。 以PSW中位4(RS1)為例直接(位)地址方式:如 D4H;點操作符號方式:如 PSW.4 或 D0H.4;位名稱方式:如 RS1;用戶定義名方式:(如用偽指令 bit)SUB.REG: bit RS1 定義后,可用S

溫馨提示

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

評論

0/150

提交評論