單片機設計技術課件:第3章 MCS-51指令系統_第1頁
單片機設計技術課件:第3章 MCS-51指令系統_第2頁
單片機設計技術課件:第3章 MCS-51指令系統_第3頁
單片機設計技術課件:第3章 MCS-51指令系統_第4頁
單片機設計技術課件:第3章 MCS-51指令系統_第5頁
已閱讀5頁,還剩88頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第3章 MCS-51指令系統3.1 簡 介 3.1.1 指令概述一臺微機所具有的所有指令的集合,就構成了指令系統。指令系統越豐富,說明CPU的功能越強。例如,Z80 CPU中,沒有乘法和除法指令,乘法和除法運算必須用軟件來實現,因此執(zhí)行速度相對較慢;而MCS-51單片機提供了乘法和除法指令,實現乘法和除法運算時就要快得多。 一臺微機能執(zhí)行什么樣的操作,是在微機設計時確定的。一條指令對應著一種基本操作。由于計算機只能識別二進制數,所以指令也必須用二進制形式來表示,稱為指令的機器碼或機器指令。 MCS-51單片機指令系統共有33種功能,42種助記符,111條指令。 3.1.2 指令格式不同指令翻譯

2、成機器碼后字節(jié)數也不一定相同。按照機器碼個數,指令可以分為以下三種: MCS-51單片機指令系統包括49條單字節(jié)指令、46條雙字節(jié)指令和16條三字節(jié)指令。 采用助記符表示的匯編語言指令格式如下: 標號是程序員根據編程需要給指令設定的符號地址,可有可無;標號由18個字符組成,第一個字符必須是英文字,不能是數字或其它符號;標號后必須用冒號。 操作碼表示指令的操作種類,如MOV表示數據傳送操作,ADD表示加法操作等。 操作數或操作數地址表示參加運算的數據或數據的有效地址。操作數一般有以下幾種形式:沒有操作數項,操作數隱含在操作碼中,如RET指令;只有一個操作數,如CPL A指令;有兩個操作數,如MO

3、V A,#00H指令,操作數之間以逗號相隔;有三個操作數,如CJNE A,#00H,NEXT指令,操作數之間也以逗號相隔。 注釋是對指令的解釋說明,用以提高程序的可讀性;注釋前必須加分號。 操作數是指令的重要組成部分,指出了參與操作的數據或數據的地址。尋找操作數地址的方式稱為尋址方式。一條指令采用什么樣的尋址方式,是由指令的功能決定的。尋址方式越多,指令功能就越強。 MCS-51指令系統共使用了7種尋址方式,包括寄存器尋址、直接尋址、立即數尋址、寄存器間接尋址、變址尋址、相對尋址和位尋址等。我們初步接觸了寄存器尋址、立即數尋址、直接尋址和寄存器間接尋址等4種尋址方式。 3.2 尋 址 方 式

4、1. 寄存器尋址 寄存器尋址是指將操作數存放于寄存器中,寄存器包括工作寄存器R0R7、累加器A、通用寄存器B、地址寄存器DPTR等。例如,指令MOV R1,A的操作是把累加器A中的數據傳送到寄存器R1中,其操作數存放在累加器A中,所以尋址方式為寄存器尋址。 如果程序狀態(tài)寄存器PSW的RS1RS0=01(選中第二組工作寄存器,對應地址為08H0FH),設累加器A的內容為20H,則執(zhí)行MOV R1,A指令后,內部RAM 09H單元的值就變?yōu)?0H,如圖3.1所示。采用寄存器尋址的指令如下: MOV P1,A;將累加器A的內容送 到P1口 MOV P1,R4 ;將寄存器R4的內容送到P1口 CLR

5、A;將累加器A清0 CPL A;將累加器A中的內容取反 RL A;將累加器A的內容循環(huán)左移圖3.1 寄存器尋址示意圖 圖3.2 直接尋址示意圖 2. 直接尋址 直接尋址是指把存放操作數的內存單元的地址直接寫在指令中。在MCS-51單片機中,可以直接尋址的存儲器主要有內部RAM區(qū)和特殊功能寄存器SFR區(qū)。 例如,指令MOV A,3AH執(zhí)行的操作是將內部RAM 中地址為3AH的單元內容傳送到累加器A中,其操作數3AH就是存放數據的單元地址,因此該指令是直接尋址。 設內部RAM 3AH單元的內容是88H,那么指令MOV A,3AH的執(zhí)行過程如圖3.2所示。采用直接尋址的指令如下: MOV P1,20

6、H ;將20H單元的內容傳送到P1口 3. 立即數尋址 立即數尋址是指將操作數直接寫在指令中。 例如,指令MOV A,#3AH執(zhí)行的操作是將立即數3AH送到累加器A中,該指令就是立即數尋址。注意:立即數前面必須加“#”號,以區(qū)別立即數和直接地址。該指令的執(zhí)行過程如圖3.3所示。 圖3.3 立即數尋址示意圖采用立即數尋址的指令如下: MOVP1,#55H;將立即數55H送P1口 MOV20H,#55;將立即數55H送20H 單元 MOVA,#0F0H;將立即數0F0H送累加器A MOVR4,#0FH;將立即數0FH送寄存器R4中 MOVR0,#20H;將立即數20H送寄存器R0口 AND A,#

7、0FH;累加器A的內容與立即數0FH進行邏輯與操作 OR A,#0F0H;累加器A的內容與立即數0F0H進行邏輯或操作 MOVA,#01H ;將立即數01H送累加器A中 MOV A,#55H ;將立即數55H送累加器A中 4. 寄存器間接尋址 寄存器間接尋址是指將存放操作數的內存單元的地址放在寄存器中,指令中只給出該寄存器。執(zhí)行指令時,首先根據寄存器的內容,找到所需要的操作數地址,再由該地址找到操作數并完成相應操作。 在MCS-51指令系統中,用于寄存器間接尋址的寄存器有R0、R1和DPTR,稱為寄存器間接尋址寄存器。 注意:間接尋址寄存器前面必須加上符號“”。例如,指令MOV A,R0執(zhí)行的

8、操作是將R0的內容作為內部RAM的地址,再將該地址單元中的內容取出來送到累加器A中。 設R0=3AH,內部RAM 3AH中的值是65H,則指令MOV A,R0的執(zhí)行結果是累加器A的值為65H,該指令的執(zhí)行過程如圖3.4所示。采用寄存器間接尋址的指令如下: MOV P1,R0;將R0所指的存 儲單元的內容送P1口圖3.4 寄存器間接尋址示意圖 5. 變址尋址 變址尋址是指將基址寄存器與變址寄存器的內容相加,結果作為操作數的地址。DPTR或PC是基址寄存器,累加器A是變址寄存器。該類尋址方式主要用于查表操作。 例如,指令MOVC A,A+DPTR執(zhí)行的操作是將累加器A和基址寄存器DPTR的內容相加

9、,相加結果作為操作數存放的地址,再將操作數取出來送到累加器A中。 設累加器A=02H,DPTR=0300H,外部ROM中,0302H單元的內容是55H,則指令MOVC A,A+DPTR的執(zhí)行結果是累加器A的內容為55H。該指令的執(zhí)行過程如圖3.5所示。 圖3.5 變址尋址示意圖 6. 相對尋址 相對尋址是指程序計數器PC的當前內容與指令中的操作數相加,其結果作為跳轉指令的轉移地址(也稱目的地址)。該類尋址方式主要用于跳轉指令。 例如,指令SJMP 54H執(zhí)行的操作是將PC當前的內容與54H相加,結果再送回PC中,成為下一條將要執(zhí)行指令的地址。 設指令SJMP 54H的機器碼80H 54H存放在

10、2000H處,當執(zhí)行到該指令時,先從2000H和2001H單元取出指令,PC自動變?yōu)?002H;再把PC的內容與操作數54H相加,形成目標地址2056H,再送回PC,使得程序跳轉到2056H單元繼續(xù)執(zhí)行。該指令的執(zhí)行過程如圖3.6所示。圖3.6 相對尋址示意圖 7. 位尋址 位尋址是指按位進行的尋址操作,而上述介紹的指令都是按字節(jié)進行的尋址操作。MCS-51單片機中,操作數不僅可以按字節(jié)為單位進行操作,也可以按位進行操作。當我們把某一位作為操作數時,這個操作數的地址稱為位地址。位尋址區(qū)包括專門安排在內部RAM中的兩個區(qū)域:一是內部RAM的位尋址區(qū),地址范圍是20H2FH,共16個RAM單元,位

11、地址為00H7FH;二是特殊功能寄存器SFR中有11個寄存器可以位尋址,參見有關章節(jié)中位地址定義。 例如,指令SETB 3DH執(zhí)行的操作是將內部RAM位尋址區(qū)中的3DH位置1。 設內部RAM 27H單元的內容是00H,執(zhí)行SETB 3DH后,由于3DH對應內部RAM 27H的第5位,因此該位變?yōu)?,也就是27H單元的內容變?yōu)?0H。該指令的執(zhí)行過程如圖3.7所示。圖3.7 位尋址示意圖3.3 指 令 系 統 MCS-51單片機指令系統包括111條指令,按功能可以劃分為以下5類 數據傳送指令(29條) 算術運算指令(24條) 邏輯運算指令(24條) 控制轉移指令(17條) 位操作指令(17條)

12、3.3.1 指令系統中的符號說明 指令的書寫必須遵守一定的規(guī)則,為了敘述方便,我們采用表3.2的約定。表3.2 指令描述約定符 號含 義Rn表示當前選定寄存器組的工作寄存器R0R7Ri表示作為間接尋址的地址指針R0R1#data表示8位立即數,即00HFFH#data16表示16位立即數,即0000HFFFFHaddr16表示16位地址,用于64K范圍內尋址addr11表示11位地址,用于2K范圍內尋址direct8位直接地址,可以是內部RAM區(qū)的某一單元或某一專用功能寄存器的地址Rel帶符號的8位偏移量(-128+127)Bit位尋址區(qū)的直接尋址位(X)X地址單元中的內容,或X作為間接尋址寄

13、存器時所指單元的內容將 后面的內容傳送到前面去 3.3.2 數據傳送類指令 數據傳送指令是MCS-51單片機匯編語言程序設計中使用最頻繁的指令,包括內部 RAM、寄存器、外部RAM以及程序存儲器之間的數據傳送。 數據傳送操作是指把數據從源地址傳送到目的地址,源地址內容不變。 數 據目的地址 源地址 1. 內部8位數據傳送指令(15條) 內部8位數據傳送指令共15條,主要用于MCS-51單片機內部RAM與寄存器之間的數據傳送。指令基本格式: MOV , 1) 以累加器A為目的地址的傳送指令(4條) 助記符格式機器碼(B)相應操作指令說明機器周期MOV A,Rn11101rrrA(Rn)n=07,

14、 rrr=0001111MOV A,direct11100101 directA (direct)1MOV A,Ri1110011iA (Ri)i=0,1 1MOV A,#data01110100 dataA #data1 注意:以上傳送指令的結果均影響程序狀態(tài)字寄存器PSW的P標志。 例3.1 已知相應單元的內容如下,請指出每條指令執(zhí)行后相應單元內容的變化。 累加器A40H寄存器R050H內部RAM:40H30H內部RAM:50H10H (1) MOV A,#20H (2) MOV A,40H (3) MOV A,R0 (4) MOV A,R0解:(1) MOV A,#20H執(zhí)行后A=20H

15、。 (2) MOV A,40H執(zhí)行后A=30H。 (3) MOV A,R0執(zhí)行后A=50H。 (4) MOV A,R0執(zhí)行后A=10H。 2) 以Rn為目的地址的傳送指令(3條)助記符格式機器碼(B)相應操作指令說明機器周期MOV Rn,A11111rrr(Rn)An=07, rrr=0001111MOV Rn,direct10101rrr directRn (direct)n=07, rrr=0001111MOV Rn,#data01111rrr dataRn #datan=07, rrr=0001111 注意:以上傳送指令的結果不影響程序狀態(tài)字寄存器PSW標志。3) 以直接地址為目的地址的

16、傳送指令(5條)助記符格式機器碼(B)相應操作指令說明機器周期MOV direct,A11111010 direct(direct) A1MOV direct,Rn10001rrr direct(direct )Rnn=07, rrr=0001111MOV direct2,direct110000101direct1 direct2(direct2) direct12MOV direct,Ri1000011i direct(direct )(Ri)i=0,12MOV direct,#data01110101direct data(direct)#data2 注意:以上傳送指令的結果不影響程序狀

17、態(tài)字寄存器PSW標志。 4) 以寄存器間接地址為目的地址的傳送指令(3條)助記符格式機器碼(B)相應操作指令說明機器周期MOV Ri,A1111011i(Ri)Ai=0,11MOV Ri,direct1110011i direct(Ri)(direct)2MOV Ri,#data0111010i data(Ri)#data1 注意:以上傳送指令的結果不影響程序狀態(tài)字寄存器PSW標志。 例3.2 已知相應單元的內容如下,請指出下列指令執(zhí)行后各單元內容相應的變化。寄存器R050H寄存器R166H寄存器R630H內部RAM:50H60H內部RAM:66H45H內部RAM:70H40H(1) MOV

18、A,R6 (2) MOV R6,70H(3) MOV 70H,50H(4) MOV 40H,R0(5) MOV R1,#88H解:(1) MOV A,R6執(zhí)行后A=30H。(2) MOV R6,70H執(zhí)行后R6=40H。(3) MOV 70H,50H執(zhí)行后(70H)=60H。(4) MOV 40H,R0執(zhí)行后(40H)=60H。(5) MOV R1,#88H執(zhí)行后(66H)=88H。3. 16位 數據傳送指令(1條)助記符格式機器碼(B)相應操作指令說明機器周期MOV DPTR,#data1610010000 data158 data70(DPTR) #data16把16位常數裝入數據指針2#

19、data16 入數據指針 注意:以上指令結果不影響程序狀態(tài)字寄存器PSW標志。 3. 外部數據傳送指令(4條)助記符格式機器碼(B)相應操作指令說明機器周期MOVX A,DPTR11100000A(DPTR)把DPTR所對應的外部RAM地址中的內容傳送給累加器A2MOVX A,Ri1110001iA (Ri)i=0,12MOVX DPTR,A11110000(DPTR) A結果不影響P標志2MOVX Ri,A1110001i(Ri) Ai=0,1,結果不影響P標志2 注意: 外部RAM只能通過累加器A進行數據傳送。 累加器A與外部RAM之間傳送數據時只能間接尋址方式,間接尋址寄存器為DPTR,

20、R0,R1。 以上傳送指令結果通常影響程序狀態(tài)字寄存器PSW的P標志。 例3.3 把外部數據存儲器2040H單元中的數據傳送到外部數據存儲器2560H單元中去。 解:MOV DPTR,#2040H MOVX A,DPTR;先將2040H單元的內容傳送到累加器A中 MOV DPTR,#2560H MOVX DPTR,A;再將累加器A中的內容傳送到2560H單元中4. 交換和查表類指令(9條)1) 字節(jié)交換指令(3條)助記符格式機器碼(B)相應操作指令說明機器周期XCH A,Rn11001rrr ARn A與Rn內容互換1XCH A,direct11000101 directA(direct)1X

21、CH A,Ri1100011iA(Ri)i=0,11注意:以上指令結果影響程序狀態(tài)字寄存器PSW的P標志。2) 半字節(jié)交換指令(1條)助記符格式機器碼(B)相應操作指令說明機器周期XCHD A,Ri1101011iA30(Ri)30低4位交換,高4位不變1 注意:上面指令結果影響程序狀態(tài)字寄存器PSW的P標志。3) 累加器A中高4位和低4位交換(1條)助記符格式機器碼(B)相應操作指令說明機器周期SWAP A11000100A 30A74 高、低4位互相交換1 注意:上面指令結果不影響程序狀態(tài)字寄存器PSW標志。 例3.4 設內部數據存儲區(qū)2AH、2BH單元中連續(xù)存放有4個BCD碼(1個BCD

22、碼占 a3 a2a0 a1 a1 a0 a2 a3 2AH 2BH 2AH 2BH 4) 查表指令(2條) 助記符格式機器碼(B)相應操作指令說明機器周期MOVC A,A+PC10000011A(A+PC)A+PC所指外部程序存儲單元的值送A2MOVC A,A+DPTR10010011A(A+DPTR)A+DPTR所指外部程序存儲單元的值送A2 注意: 以上指令結果影響程序狀態(tài)字寄存器PSW的P標志。 查表指令用于查找存放在程序存儲器中的表格。 5) 堆棧操作指令(2條) 助記符格式機器碼(B)相應操作指令說明機器周期PUSH direct11000000directSPSP+1(SP)(di

23、rect)將SP加1,然后將源地址單元中的數傳送到SP所指示的單元中去2POP direct11010000direct(direct) (SP)SPSP-1將SP所指示的單元中的數傳送到direct地址單元中,然后SPSP-12 注意: 堆棧是用戶自己設定的內部RAM中的一塊專用存儲區(qū),使用時一定先設堆棧指針,堆棧指針缺省為SP=07H。 堆棧遵循后進先出的原則安排數據。 堆棧操作必須是字節(jié)操作,且只能直接尋址。將累加器A入棧、出棧指令可以寫成: PUSH/POP ACC 或 PUSH/POP 0E0H而不能寫成: PUSH/POP A 堆棧通常用于臨時保護數據及子程序調用時保護現場和恢復現

24、場。 以上指令結果不影響程序狀態(tài)字寄存器PSW標志。 例3.5 設堆棧指針為30H,把累加器A和DPTR中的內容壓入,然后根據需要再把它們彈出,編寫實現該功能的程序段。 解:MOV SP,#30H ;設置堆棧指針,SP=30H為棧底地址 PUSH ACC ;SP+1SP,SP=31H,ACC (SP) PUSH DPH ;SP+1SP,SP=32H,DPH (SP) 3.3.3 算術運算類指令 1. 加、減法指令(22條) 1) 加法指令(8條)助記符格式機器碼(B)相應操作指令說明機器周期ADD A,Rn00101rrrA(A+Rn)n=07, rrr=0001111ADD A,direct

25、00100101AA+(direct)1ADD A,Ri0010011iA(A+(Ri)i=0,11ADD A,#data00100100 dataAA+#data1ADDC A,Rn00111rrrAA+Rn+CYn=07, rrr=0001111ADDC A,direct00110101 directAA+(direct)+CY1ADDC A,Ri0011011iAA+(Ri)+CYi=0,11ADDC A,#data00110100 dataAA+#data+CY1 注意: ADD與ADDC的區(qū)別為是否加進位位CY。 指令執(zhí)行結果均在累加器A中。 以上指令結果均影響程序狀態(tài)字寄存器PSW

26、的CY、OV、AC和P標志。 2) 減法指令(4條)助記符格式機器碼(B)相應操作指令說明機器周期SUBB A,Rn1001rrrAA-(Rn)-CYn=07 rrr=0001111SUBB A,direct10010101 directAA-(direct)-CY1SUBB A,Ri1001011iAA- (Ri)-CYi=0,11SUBB A,#data10010100 dataAA-(#data)-CY1 注意: 減法指令中沒有不帶借位的減法指令,所以在需要時,必須先將CY清0。 指令執(zhí)行結果均在累加器A中。 減法指令結果影響程序狀態(tài)字寄存器PSW的CY、OV、AC和P標志。 例3.6

27、編寫計算12A4H+0FE7H的程序,將結果存入內部RAM 41H和40H單元,40H存低8位,41H存高8位。 解:單片機指令系統中只提供了8位的加減法運算指令,兩個16位數(雙字節(jié))相加可分為兩步進行,第一步先對低8位相加,第二步再對高8位相加。 3) BCD碼調整指令(1條)助記符格式機器碼(B)指令說明機器周期DA A11010100BCD碼加法調整指令1 注意: 結果影響程序狀態(tài)字寄存器PSW的CY、OV、AC和P標志。 BCD(Binary Coded Decimal)碼是用二進制形式表示十進制數,例如十進制數45,其BCD碼形式為45H。BCD碼只是一種表示形式,與其數值沒有關系

28、。 BCD碼用4位二進制碼表示一位十進制數,這4位二進制數的權為8421,所以BCD碼又稱為8421碼。十進制數碼09所對應的二進制碼如表3.3所示。表3.3 十進制數碼與BCD碼對應表十進制數碼0123456789二進制碼0000000100100011010001010110011110001001 在表3.3中,用4位二進制數表示一個十進制數位,例如56D和87D的BCD碼表示為 0101 0110 (56D) 1000 0111 (87D) 0001 0100 0011 (143D) DAA指令將A中的二進制碼自動調整為BCD碼。 DAA指令只能跟在ADD或ADDC加法指令后. 例3.

29、7 說明指令MOV A,#05H和ADD A,#08H及DA A的執(zhí)行結果。 解:MOV A,#05H ;05HA ADD A,#08H ;05H+08HA,A=0DH DA A ;自動調整為BCD碼,A=13H4) 加1減1指令(9條) 助記符格式機器碼(B)相應操作指令說明機器周期INC A00000100AA+1影響PSW的P標志1INC Rn00001rrrRnRn+1n=07, rrr=0001111INC direct0101 direct(direct)(direct)+11INC Ri0000011i(Ri)(Ri)+1i=0,11INC DPTR10100011DPTRDPT

30、R+12DEC A00010100AA-1影響PSW的P標志1DEC Rn00011rrrRnRn-1n=07, rrr=0001111DEC direct00010101 direct(direct)(direct)+11DEC Ri0001011i(Ri)(Ri)-1i=0,11 注意:以上指令結果通常不影響程序狀態(tài)字寄存器PSW。 例3.8 分別指出指令INC R0和INC R0的執(zhí)行結果。設R0=30H,(30H)=00H。 解: INC R0 ;R0+1=30H+1=31HR0,R0=31H INCR0 ;(R0)+1=(30H)+1(R0),(30H)=01H,R0中內容不變 2.

31、 乘、除法指令 1) 乘法指令(2條)助記符格式機器碼(B)相應操作指令說明機器周期MUL AB10100100BAA*B無符號數相乘,高位存B,低位存A4 注意:乘法結果影響程序狀態(tài)字寄存器PSW的OV(積超過0FFH則置1,否則為0)和CY(總是清0)以及P標志。 2) 除法指令(1條)助記符格式機器碼(B)相應操作指令說明機器周期DIV AB10000100AA/B的商BA/B的余數無符號數相除,商存A,余數存B4 注意: 除法結果影響程序狀態(tài)字寄存器PSW的OV(除數為0則置1,否則為0)和CY(總是清0)以及P標志。 當除數為0時結果不能確定。3.3.4 邏輯運算及移位類指令1. 邏

32、輯運算指令(20條)1) 邏輯與指令(6條)助記符格式機器碼(B)相應操作指令說明機器周期ANL A,direct01010101 directAAdirect按位相與1ANL A,Rn01011rrrAARnn=07, rrr=0001111ANL A,Ri0101011iAA(Ri)i=0,11ANL A,#data01010100 dataAA#data1ANL direct,A01010010 direct(direct)(direct)A不影響PSW的P標志1ANL direct,#data01010011 direct data(direct)(direct)#data不影響PSW

33、的P標志2 注意: 以上指令結果通常影響程序狀態(tài)字寄存器PSW的P標志。 邏輯與指令通常用于將一個字節(jié)中的指定位清0,其它位不變。 2) 邏輯或指令(6條)助記符格式機器碼(B)相應操作指令說明機器周期ORL A,direct01000101 directAAdirect按位相或1ORL A,Rn01001rrrAARnn=07, rrr=0001111ORL A,Ri0100011iAA(Ri)i=0,11ORL A,#data01000100 dataAA#data1ORL direct,A01000010 direct(direct)(direct)A不影響PSW的P標志1ORL dir

34、ect,#data01000011 direct data(direct)(direct)#data不影響PSW的P標志2 注意: 以上指令結果通常影響程序狀態(tài)字寄存器PSW的P標志。 邏輯或指令通常用于將一個字節(jié)中的指定位置1,其余位不變。 3) 邏輯異或指令(6條)助記符格式機器碼(B)相應操作指令說明機器周期XRL A,direct01100101 directAA(direct)按位相異或1XRL A,Rn01101rrrAARnn=07, rrr=0001111XRL A,Ri0110011iAA (Ri)i=0,11XRL A,#data01100100 dataAA#data1X

35、RL direct,A01100010 direct(direct)(direct)A不影響PSW的P標志1XRL direct,#data01100011 direct data(direct)(direct)#data不影響PSW的P標志2 注意: 以上指令結果通常影響程序狀態(tài)字寄存器PSW的P標志。 “異或”原則是相同為0,不同為1。 4) 累加器A清0和取反指令(2條)助記符格式機器碼(B)相應操作指令說明機器周期CLR A11100100A00HA中內容清0,影響P標志1CPL A11110100AA中內容按位取反,影響P標志12. 循環(huán)移位指令(4條)助記符格式機器碼(B)相應操作

36、指令說明機器周期RL A00100011A7A0循環(huán)左移1RLC A00110011CYA7A0帶進位循環(huán)左移,影響CY標志1RR A00000011A7A0循環(huán)右移1RRC A00010011CYA7A0帶進位循環(huán)右移,影響CY標志1 注意:執(zhí)行帶進位的循環(huán)移位指令之前,必須給CY置位或清0。 3.3.5 控制轉移類指令 控制轉移類指令的本質是改變程序計數器PC的內容,從而改變程序的執(zhí)行方向??刂妻D移指令分為:無條件轉移指令、條件轉移指令和調用/返回指令。 1. 無條件轉移指令(4條) 1) 長轉移指令(1條) 助記符格式機器碼(B)相應操作指令說明機器周期LJMP addr16000000

37、10 addr158 addr70PCaddr16程序跳轉到地址為addr16開始的地方執(zhí)行2 注意: 該指令結果不影響程序狀態(tài)字寄存器PSW。 該指令可以轉移到64 KB程序存儲器中的任意位置。 2) 絕對轉移指令 (1條)助記符格式機器碼(B)相應操作指令說明機器周期AJMP addr11a10a9a800001addr70PC100addr11程序跳轉到地址為PC1511addr11開始的地方執(zhí)行,2 KB內絕對轉移2 注意: 該指令結果不影響程序狀態(tài)字寄存器PSW。 該指令轉移范圍是2 KB。 例3.9 指令KWR: AJMP KWR1的執(zhí)行結果。 解:設KWR標號地址=1030H,K

38、WR1標號地址=1100H,該指令執(zhí)行后PC首先加2變?yōu)?032H,然后由1032H的高5位和1100H的低11位拼裝成新的PC值0001000100000000B,即程序從1100H開始執(zhí)行。 3) 相對轉移指令 (1條)助記符格式機器碼(B)相應操作指令說明機器周期SJMP rel10000000 relPCPC+rel-80H(-128)7FH(127)短轉移2 注意: 該指令結果不影響程序狀態(tài)字寄存器PSW。 該指令的轉移范圍是以本指令的下一條指令為中心的-128+127字節(jié)以內。 在實際應用中,LJMP、AJMP和SJMP后面的addr16、addr11或rel都是用標號來代替的,不

39、一定寫出它們的具體地址。4) 間接尋址的無條件轉移指令(1條) 助記符格式機器碼(B)相應操作指令說明機器周期JMP A+DPTR01110011PCA+DPTR64 KB內相對轉移2 注意: 該指令結果不影響程序狀態(tài)字寄存器PSW。 該指令通常用于散轉(多分支)程序。 2. 條件轉移指令(8條) 1) 累加器A判0指令(2條) 助記符格式機器碼(B)相應操作機器周期JZ rel0110000若A=0, 則PCPC+rel, 否則程序順序執(zhí)行 2JNZ rel01110000若A0, 則PCPC+rel, 否則程序順序執(zhí)行2 注意: 以上指令結果不影響程序狀態(tài)字寄存器PSW。 轉移范圍與指令S

40、JMP相同。 2) 比較轉移指令(4條) 助記符格式機器碼(B)相應操作機器周期CJNE A,#data,rel10110100 data rel若A#data, 則PCPC+rel,否則順序執(zhí)行;若 A#data,則CY=1,否則CY=02CJNE Rn,#data,rel10111rrrdata rel若 Rn#data,則PCPC+rel,否則順序執(zhí)行;若Rn#data,則CY=1,否則CY=02CJNE Ri,#data,rel1011011idata rel若(Ri)#data,則PCPC+rel,否則順序執(zhí)行;若(Ri)#data,則CY=1,否則CY=02CJNE A,direc

41、t,rel10110101direct rel若A(direct),則PCPC+rel,否則順序執(zhí)行;若A(direct),則CY=1,否則CY=02 注意: 以上指令結果影響程序狀態(tài)字寄存器PSW的CY標志。 轉移范圍與SJMP指令相同。 3) 減1非零轉移指令(2條)助記符格式機器碼(B)相應操作機器周期DJNZ Rn,rel11011rrr relRnRn-1,若Rn0,則PCPC+rel, 否則順序執(zhí)行2DJNZ direct,rel11010101 direct rel(direct)(direct)-1,若(direct)0,則PCPC+rel,否則順序執(zhí)行2 注意: DJNZ指令

42、通常用于循環(huán)程序中控制循環(huán)次數。 轉移范圍與SJMP指令相同。 以上指令結果不影響程序狀態(tài)字寄存器PSW。 3. 調用和返回指令(5條) 1) 絕對調用指令(1條)助記符格式機器碼(B)相應操作機器周期ACALL addr11a10a9a810001addr70PC PC+2SP SP+1,(SP)PC07SP SP+1,(SP)PC815PC010 addr112 注意: 該指令結果不影響程序狀態(tài)字寄存器PSW。 調用范圍與AJMP指令相同。 2) 長調用指令(1條) 助記符格式機器碼(B)相應操作機器周期LCALL addr1600010010addr158addr70PCPC+3SP S

43、P+1,SPPC07SP SP+1,SPPC815PC addr162 注意: 該指令結果不影響程序狀態(tài)字寄存器PSW。 調用范圍與LJMP指令相同。3) 返回指令(2條) 助記符格式機器碼(B)相應操作機器周期RET00100010PC815 (SP), SP SP-1PC07 (SP), SP SP-1子程序返回指令2RETI00110010PC815 SP, SP SP-1PC07 SP, SP SP-1中斷返回指令2 注意:該指令結果不影響程序狀態(tài)字寄存器PSW。4) 空操作(1條)助記符格式機器碼(B)相應操作指令說明NOP00000000空操作消耗1個機器周期注意:該指令結果不影響

44、程序狀態(tài)字寄存器PSW。 3.3.6 位操作類指令 位操作指令的操作數是“位”,其取值只能是0或1,故又稱之為布爾操作指令。位操作指令的操作對象是片內RAM的位尋址區(qū)(即20H2FH)和特殊功能寄存器SFR中的11個可位尋址的寄存器。片內RAM的20H2FH共16個單元128個位,我們?yōu)檫@128個位的每個位均定義一個名稱:00H7FH,稱為位地址,如表3.4所示。對于特殊功能寄存器SFR中可位尋址的寄存器的每個位也有名稱定義,如表3.5所示。 表3.4 片內RAM位尋址區(qū)的位地址分布位地址/位名稱字節(jié)地址D7D6D5D4D3D2D1D07F7E7D7C7B7A79782FH7776757473

45、7271702EH6F6E6D6C6B6A69682DH67666564636261602CH5F5E5D5C5B5A59582BH57565554535251502AH4F4E4D4C4B4A494829H474645444342414028H3F3E3D3C3B3A393827H373635343332313026H2F2E2D2C2B2A292825H272625242322212024H1F1E1D1C1B1A191823H171615141312111022H0F0E0D0C0B0A090821H070605040302010020H續(xù)表(2)表3.5 SFR中的位地址分布SFR位地

46、址/位名稱字節(jié)地址D7D6D5D4D3D2D1D0BF7HF6HF5HF4HF3HF2HF1HF0HF0HACCE7HE6HE5HE4HE3HE2HE1HE0HE0HACC.7ACC.6ACC.5ACC.4ACC.3ACC.2ACC.1ACC.0PSWD7HD6HD5HD4HD3HD2HD1HD0HD0HCYACF0RS1RS0OVF1P 續(xù)表(2)IPBFHBEHBDHBCHBBHBAHB9HB8HB8HPSPT1PX1PT0PX0P3B7HB6HB5HB4HB3HB2HB1HB0HB0HP3.7P3.6P3.5P3.4P3.3P3.2P3.1P3.0IEAFHAEHADHACHABHAAH

47、A9HA8HA8HEAESET1EX1ET0EX0P2A7HA6HA5HA4HA3HA2HA1HA0HA0HP2.7P2.6P2.5P2.4P2.3P2.2P2.1P2.0續(xù)表(3)SCON9FH9EH9DH9CH9BH9AH99H98H98HSM0SM1SM2RENTB8RB8TIRIP197H96H95H94H93H92H91H90H90HP1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.0TCON8FH8EH8DH8CH8BH8AH89H88H88HTF1TR1TF0TR0IE1IT1IE0IT0P087H86H85H84H83H82H81H80H80HP0.7P0.6P0.

48、5P0.4P0.3P0.2P0.1P0.0 對于位尋址,有以下三種不同的寫法。 第一種是直接地址寫法, 如 MOV C,0D2H,其中,0D2H表示PSW中的OV位地址。 第二種是點操作符寫法,如 MOV C , 0D0H.2。 第三種是位名稱寫法,在指令格式中直接采用位定義名稱,這種方式只適用于可以位尋址的SFR,如MOV C,OV。 1. 位傳送指令(2條)助記符格式機器碼(B)相應操作指令說明機器周期MOV C,bit10100010CY bit位傳送指令,結果影響CY標志2MOV bit,C10010010bit CY位傳送指令,結果不影響PSW2 注意:位傳送指令的操作數中必須有一個

49、是進位位C,不能在其它兩個位之間直接傳送。進位位C也稱為位累加器。 2. 位置位和位清零指令(4條)助記符格式機器碼(B)相應操作指令說明機器周期CLR C11000011CY 0位清0指令,結果影響CY標志1CLR bit11000010 bitbit 0位清0指令,結果不影響PSW1SETB C11010011CY1位置1指令,結果影響CY標志1SETB bit11010010 bitbit 1位置1指令,結果不影響PSW13. 位運算指令(6條) 助記符格式機器碼(B)相應操作指令說明機器周期ANL C,bit10000010 bitCY CYbit位與指令2ANL C/bit10110

50、010 bitCY CY位與指令2ORL C,bit01110010 bitCY CYbit位或指令2ORL C/bit10100010 bitCY CY位或指令2CPL C10110011CY位取反指令2CPL bit10110010bit位取反指令,結果不影響CY2助記符格式機器碼(B)相應操作指令說明機器周期ANL C,bit10000010 bitCY CYbit位與指令2ANL C/bit10110010 bitCY CY位與指令2ORL C,bit01110010 bitCY CYbit位或指令2ORL C/bit10100010 bitCY CY位或指令2CPL C1011001

51、1CY位取反指令2CPL bit10110010bit位取反指令,結果不影響CY2助記符格式機器碼(B)相應操作指令說明機器周期ANL C,bit10000010 bitCY CYbit位與指令2ANL C/bit10110010 bitCY CY位與指令2ORL C,bit01110010 bitCY CYbit位或指令2ORL C/bit10100010 bitCY CY位或指令2CPL C10110011CY位取反指令2CPL bit10110010bit位取反指令,結果不影響CY2助記符格式機器碼(B)相應操作指令說明機器周期ANL C,bit10000010 bitCY CYbit位

52、與指令2ANL C/bit10110010 bitCY CY位與指令2ORL C,bit01110010 bitCY CYbit位或指令2ORL C/bit10100010 bitCY CY位或指令2CPL C10110011CY位取反指令2CPL bit10110010bit位取反指令,結果不影響CY2助記符格式機器碼(B)相應操作指令說明機器周期ANL C,bit10000010 bitCY CYbit位與指令2ANL C/bit10110010 bitCY CY位與指令2ORL C,bit01110010 bitCY CYbit位或指令2ORL C/bit10100010 bitCY C

53、Y位或指令2CPL C10110011CY位取反指令2CPL bit10110010bit位取反指令,結果不影響CY2c機器碼(B)相應操作指令說明機器周期ANL C,bit10000010 bitCY CYbit位與指令2ANL C/bit10110010 bitCY CY位與指令2ORL C,bit01110010 bitCY CYbit位或指令2ORL C/bit10100010 bitCY CY位或指令2CPL C10110011CY位取反指令2CPL bit10110010bit位取反指令,結果不影響CY2助記符格式機器碼(B)相應操作機器周期JB bit,rel00100000 bit rel若bit=1

溫馨提示

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

評論

0/150

提交評論