第三章 指令系統(tǒng)---單片機_第1頁
第三章 指令系統(tǒng)---單片機_第2頁
第三章 指令系統(tǒng)---單片機_第3頁
第三章 指令系統(tǒng)---單片機_第4頁
第三章 指令系統(tǒng)---單片機_第5頁
已閱讀5頁,還剩65頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第三章第三章 8051單片機指令系統(tǒng)單片機指令系統(tǒng) 3 .1 匯編語言指令格式匯編語言指令格式 3 .2 尋址方式尋址方式 3.3 8051單片機的指令系統(tǒng)單片機的指令系統(tǒng) 指令的格式指令的格式: 標號:標號: 操作碼操作碼 第一操作數(shù)第一操作數(shù),第二操作數(shù)第二操作數(shù) 注釋注釋 (目的操作數(shù))(源操作數(shù))(目的操作數(shù))(源操作數(shù)) LOOP: MOV A, #20H ;將將20H的內(nèi)容送的內(nèi)容送A 注:藍色的內(nèi)容不是必須的注:藍色的內(nèi)容不是必須的 3.1 匯編語言指令格式匯編語言指令格式操作數(shù) 1)工作寄存器名)工作寄存器名 2)特殊功能寄存器名)特殊功能寄存器名 3)標號名)標號名 4)常數(shù)

2、)常數(shù) 5)$ 6)表達式)表達式3.2 尋址方式尋址方式即尋找指令中操作數(shù)或操作數(shù)所在的地址。即尋找指令中操作數(shù)或操作數(shù)所在的地址。立即數(shù)尋址立即數(shù)尋址直接尋址直接尋址寄存器尋址寄存器尋址寄存器間接尋址寄存器間接尋址變址尋址變址尋址相對尋址相對尋址位尋址位尋址操作數(shù)以常數(shù)的形式出現(xiàn),直接跟在操作碼操作數(shù)以常數(shù)的形式出現(xiàn),直接跟在操作碼后面,以指令字節(jié)的形式存放在后面,以指令字節(jié)的形式存放在ROM中。中。一、立即數(shù)尋址一、立即數(shù)尋址例如:例如: MOV A, #40H MOV DPTR,#TABLE MOV P1,#07H MOV R3,#18(1)特殊功能寄存器,注意除)特殊功能寄存器,注意

3、除A、B、DPTR外,外,其他其他 SFR只能只能采用直接尋址方式。采用直接尋址方式。二二.直接尋址直接尋址 如:如:MOV A, 70H; ( 70H ) ( A )在指令中包含有在指令中包含有操作數(shù)的直接地址操作數(shù)的直接地址,該地址,該地址指出了參與運算的數(shù)所在的字節(jié)單元地址指出了參與運算的數(shù)所在的字節(jié)單元地址 直接尋址的尋址范圍:直接尋址的尋址范圍: 直接尋址是其直接尋址是其唯一唯一尋址方式尋址方式(2)內(nèi)部數(shù)據(jù)存儲器的低)內(nèi)部數(shù)據(jù)存儲器的低128字節(jié),字節(jié),00H7FH;例例 3.1MOV A,81H ;( 81H ) ( A )MOV A,SPMOV A,P1 ; ( 90H ) (

4、 A )MOV A,90H(1)內(nèi)部)內(nèi)部RAM中的中的32個工作寄存器個工作寄存器R0R7; (2)A、B、C、DPTR;三三.寄存器尋址寄存器尋址尋址范圍尋址范圍:INC Rn ; (Rn) +1 (Rn)MOV A , Rn ; (Rn) A指定某一可尋址寄存器的內(nèi)容為操作數(shù)指定某一可尋址寄存器的內(nèi)容為操作數(shù) 四四.寄存器間接尋址寄存器間接尋址指令中指出某一個寄存器的內(nèi)容為指令中指出某一個寄存器的內(nèi)容為操作數(shù)的地址,以符號操作數(shù)的地址,以符號“”表示。表示。尋址范圍:尋址范圍:(1)以)以R0,R1為地址指針,尋址為地址指針,尋址片內(nèi)片內(nèi)RAM 007FH 和和外外RAM的的低低256B

5、;(2)以堆棧)以堆棧SP為地址指針,尋址為地址指針,尋址棧區(qū)棧區(qū)單元;單元;(3)以)以DPTR,或,或R0、R1(須用(須用P2指定高指定高8位地址)為地位地址)為地址指針,尋址址指針,尋址外部外部RAM的的64KB空間和空間和外擴外擴I/O口口。例:例:MOV A,R0;(R0 ) (A) PUSH ACC ;(A) (SP) MOVX A,DPTR ;(DPTR) (A)五五.變址基址寄存器加變址寄存器間接尋址變址基址寄存器加變址寄存器間接尋址 MOVC A, A+PC ;(A)+(PC) (A) MOVC A, A+DPTR; (A)(DPTR) (A) JMP A+DPTR將指定將

6、指定基址寄存器基址寄存器(PC或或 DPTR)和)和變址寄存器(變址寄存器(A)的內(nèi)容的內(nèi)容相加相加,所得結(jié)果作為操作數(shù)的,所得結(jié)果作為操作數(shù)的地址地址。(1)變址尋址方式是專門針對程序存儲器的尋址)變址尋址方式是專門針對程序存儲器的尋址方式方式,訪問范圍為訪問范圍為 64K。(2)變址(偏移量)寄存器中的地址偏移量是一)變址(偏移量)寄存器中的地址偏移量是一個個8位的位的無無符號數(shù)(符號數(shù)(00FF)。)。指令中給定地址的指令中給定地址的相對偏移量相對偏移量 rel,以,以PC當前值當前值為為基地址,加上基地址,加上 rel 所得結(jié)果為轉(zhuǎn)移目標地址。所得結(jié)果為轉(zhuǎn)移目標地址。六六.相對尋址相對

7、尋址 在相對轉(zhuǎn)移指令中使用在相對轉(zhuǎn)移指令中使用目的地址目的地址=(PC)當前值當前值+ relrel:8位有符號數(shù),單字節(jié)補碼,位有符號數(shù),單字節(jié)補碼, 128+127。LOOP1:SJMP rel;80 relLOOP2:源地址源地址LOOP2relLOOP1+2+rel即:目的地址源地址轉(zhuǎn)移指令字節(jié)數(shù)即:目的地址源地址轉(zhuǎn)移指令字節(jié)數(shù)rel七七.位尋址位尋址MOV C, ACC.7 ;(ACC.7) (C)MOV C, 10H ;(10H) (C)* 片內(nèi)片內(nèi)RAM位尋址區(qū)(位尋址區(qū)(00H7FH)位尋址區(qū)域:位尋址區(qū)域: 3.3 89C51單片機的指令系統(tǒng)單片機的指令系統(tǒng)v 3.3.2 數(shù)

8、據(jù)傳送指令數(shù)據(jù)傳送指令v 3.3.3 算術(shù)運算指令算術(shù)運算指令v 3.3.4 邏輯操作指令邏輯操作指令v 3.3.4 控制程序轉(zhuǎn)移類指令控制程序轉(zhuǎn)移類指令v 3.3.5 位操作(布爾處理)類指令位操作(布爾處理)類指令 (一)符號(一)符號(1) Rn:工作寄存器工作寄存器 n=0, 1,2,7(2) Ri:工作寄存器工作寄存器 n=0, 1(3) direct: 表示表示8位的直接地址位的直接地址(4) #data:表示表示8位立即數(shù)位立即數(shù)(X):):X中的內(nèi)容中的內(nèi)容(5)#data16:表示表示16位立即數(shù)位立即數(shù)(11)add11 : 表示表示11位目的地址位目的地址 只限于只限于

9、AJMP,ACALL指令使用指令使用(12)add16 : 表示表示16位目的地址位目的地址 只限于只限于 LJMP,LCALL指令使用指令使用(13)rel:相對偏移量,為相對偏移量,為8位帶符號的地址偏移量位帶符號的地址偏移量(X):):由由X內(nèi)容作為地址的單元中的內(nèi)容內(nèi)容作為地址的單元中的內(nèi)容(6)(7) Ri :表示寄存器間接尋址表示寄存器間接尋址 i= 0,1(8) DPTR : 表示以表示以DPTR作為數(shù)據(jù)指針的間接地址作為數(shù)據(jù)指針的間接地址 (9 ) bit : 表示位地址(或位符號表示位地址(或位符號)(10)/ bit : 表示對該位先取反再參與操作表示對該位先取反再參與操作

10、(14)A 累加器累加器 B 通用寄存器通用寄存器 C 位累加器位累加器(15)$:本條指令的起始地址本條指令的起始地址 如如 SJMP $ LOOP : SJMP LOOP(二)指令分類(二)指令分類1.按指令長度分按指令長度分2.按指令執(zhí)行時間分按指令執(zhí)行時間分 單字節(jié)單字節(jié)指令指令49 雙字節(jié)雙字節(jié)指令指令45 三字節(jié)三字節(jié)指令指令17單周期單周期指令指令64雙周期雙周期指令指令45四周期四周期指令指令23.按指令功能分類按指令功能分類數(shù)據(jù)傳送類指令數(shù)據(jù)傳送類指令 28邏輯操作類指令邏輯操作類指令 25算術(shù)運算類指令算術(shù)運算類指令 24控制轉(zhuǎn)移類指令控制轉(zhuǎn)移類指令 17位操作指令位操作指

11、令 17 3.3.1 數(shù)據(jù)傳送指令數(shù)據(jù)傳送指令v 一一. 內(nèi)部數(shù)據(jù)傳送指令內(nèi)部數(shù)據(jù)傳送指令v 二二.外部數(shù)據(jù)傳送指令外部數(shù)據(jù)傳送指令v 三三.數(shù)據(jù)交換指令數(shù)據(jù)交換指令v 四四.堆棧操作指令堆棧操作指令最基本、最主要的指令,共有最基本、最主要的指令,共有28條,包條,包括括數(shù)據(jù)傳送數(shù)據(jù)傳送、數(shù)據(jù)交換數(shù)據(jù)交換、棧操作三類。棧操作三類。目的目的單元為單元為A時影響時影響 PSW中的中的P標志標志一、一、 內(nèi)部數(shù)據(jù)傳送指令內(nèi)部數(shù)據(jù)傳送指令 指令格式:指令格式:MOV 目的字節(jié)目的字節(jié),源字節(jié)源字節(jié)功能:把源字節(jié)指定的變量傳送到目的字節(jié)指定的存儲單功能:把源字節(jié)指定的變量傳送到目的字節(jié)指定的存儲單元中,

12、源字節(jié)內(nèi)容不變元中,源字節(jié)內(nèi)容不變。(目的字節(jié))(目的字節(jié))(源字節(jié))(源字節(jié))MOV DPTR,data16;4direct直接尋址直接尋址Rn寄存器寄存器data立即數(shù)立即數(shù)累加器累加器ARi間址間址35316條條使用注意事項使用注意事項!(1)只能使用規(guī)定的指令格式,不能任意制造非法指令)只能使用規(guī)定的指令格式,不能任意制造非法指令如:如:MOVR3, R2如:如:MOVRn,Ri( )()(2)使用時須注意指令的)使用時須注意指令的尋址方式尋址方式MOV R0, #90HMOV A, R0MOV A, 90HMOV A, P1()( )( )( ) 例例3.2 設(shè)(設(shè)(70H)= 60

13、H,(,(60H)=20H,(P1) 0B7H ,問執(zhí)行如下程序后相關(guān)單元中內(nèi)容是多少?問執(zhí)行如下程序后相關(guān)單元中內(nèi)容是多少? MOV R0,#70H MOV A,R0 MOV R1,A MOV B,R1 MOV R0, P1 (R0)(A)(R1)70H60H60H(B)(70H)20HB7H二二.外部數(shù)據(jù)傳送指令外部數(shù)據(jù)傳送指令1.外部數(shù)據(jù)外部數(shù)據(jù)RAM(外擴(外擴I/O口)與口)與A之間的傳送之間的傳送 MOVX , MOVX A, DPTR ; (DPTR)(A)MOVX A, Ri ; ( Ri)(A)MOVX DPTR, A ; (A) (DPTR)MOVX Ri , A ;(A)

14、 (Ri)MOVX讀指令讀指令產(chǎn)生產(chǎn)生RD信號信號MOVX寫指令寫指令產(chǎn)生產(chǎn)生WR信號信號 用用 R i 作 地 址 指 針 時 只 能 尋 址作 地 址 指 針 時 只 能 尋 址 2 5 6 個 單 元個 單 元(0000H00FF),當訪問),當訪問超過超過256個字節(jié)的外個字節(jié)的外RAM空間時,空間時,需利用需利用P2口口確定確定高高8位地址位地址(也稱頁地址),(也稱頁地址),而用而用DPTR作地址指針時可訪問整個作地址指針時可訪問整個64KB空間。空間。MOVX DPTR,#2010例例3.3將外將外RAM 2010H中內(nèi)容送外中內(nèi)容送外RAM 2020單元中單元中。MOVX 20

15、20,2010(X)MOVX 2020,DPTR(X)MOV P2,#20H ;輸出高;輸出高8位地址位地址MOV R0,#10H ;置;置讀讀低低8位地址位地址MOVX A,R0 ;讀;讀2010H中數(shù)據(jù)中數(shù)據(jù)MOV R1,#20H ;置;置寫寫低低8位地址位地址MOVX R1,A ;向;向2020H寫數(shù)據(jù)寫數(shù)據(jù) MOV DPTR,2010 ;置讀單元地址;置讀單元地址MOVX A,DPTR ;讀;讀2010中數(shù)據(jù)中數(shù)據(jù)MOV DPTR,2020 ;置寫單元地址;置寫單元地址MOVX DPTR , A ;將數(shù)據(jù)寫入;將數(shù)據(jù)寫入2020H單元中單元中2、程序存儲器與累加器、程序存儲器與累加器A

16、之間的數(shù)據(jù)傳送之間的數(shù)據(jù)傳送MOVC指令指令(查表指令)(查表指令)MOVC A,A+DPTR MOVC A,A+PC ;(A)+(DPTR) (A)(PC)+1(PC) ,(A)+(PC) ) (A)特點:特點:u單字節(jié)指令單字節(jié)指令u源操作數(shù)為變址尋址源操作數(shù)為變址尋址u執(zhí)行時,執(zhí)行時, PSEN信號會自動有效。信號會自動有效。功能:以功能:以DPTR、PC為基地址,與為基地址,與A中的中的8位無符號數(shù)位無符號數(shù)相相加,得到一個新加,得到一個新16位地址,將其內(nèi)容送位地址,將其內(nèi)容送A。當前當前當前當前(1)用)用DPTR作為基址寄存器作為基址寄存器 例例3.4:設(shè)外部:設(shè)外部ROM的的2

17、000H單元開始的連續(xù)單元開始的連續(xù)10個字個字 節(jié)中已存放有節(jié)中已存放有09的平方數(shù),要求根據(jù)的平方數(shù),要求根據(jù)A中的中的 內(nèi)容(內(nèi)容(09)來查找對應(yīng)的平方值。)來查找對應(yīng)的平方值。START:MOV A,#2 ;待查數(shù)據(jù)送待查數(shù)據(jù)送AMOV DPTR,#TABLE ;表首地址送表首地址送DPTR MOVC A,A+DPTR ;查表查表 ORG 2000H TABLE:DB 0,1,4,9,16,25,36,49,64,81結(jié)果:(結(jié)果:(2002H) (A ),(),(A)=04H特點:特點:可訪問整個可訪問整個ROM的的64KB空間,表格可放在空間,表格可放在ROM的的任何任何位置,與

18、位置,與MOVC指令無必然的關(guān)系。指令無必然的關(guān)系。(2)用)用PC作為基址寄存器作為基址寄存器 1FF9H:MOV A,#2 ;待查數(shù)據(jù)送待查數(shù)據(jù)送A1FFDH:MOVC A,A+PC ;查表,單字節(jié)指令查表,單字節(jié)指令1FFEH: SJMP $ ;原地跳轉(zhuǎn)指令(雙字節(jié)指令:;原地跳轉(zhuǎn)指令(雙字節(jié)指令:80FE)2000H: DB 02001H: DB 1 2002H: DB 4 DB 9結(jié)果:(結(jié)果:(2002H) (A ),(),(A)=04H(A) + (PC)當前當前) (A)PC當前值當前值DIS表首地址表首地址修正量:修正量:DIS表首地址表首地址PC當前值當前值 2000H1F

19、FEH=02H1FFBH: ADD A,#DIS ;加上修正量加上修正量DIS#02H使用特點:使用特點:(1)表格只能存放在查表指令以下的)表格只能存放在查表指令以下的256 個單元內(nèi)。個單元內(nèi)。 (2)當表格首地址與本指令間有其他指)當表格首地址與本指令間有其他指令時,須修正偏移量,修正量為查表指令時,須修正偏移量,修正量為查表指令令下一條指令的起始地址下一條指令的起始地址到到表格首址表格首址之之間的指令字節(jié)數(shù)。間的指令字節(jié)數(shù)。三、數(shù)據(jù)交換指令三、數(shù)據(jù)交換指令數(shù)據(jù)交換指令共數(shù)據(jù)交換指令共4條,完成累加器和內(nèi)部條,完成累加器和內(nèi)部RAM單元之間單元之間的字節(jié)或半字節(jié)交換。的字節(jié)或半字節(jié)交換。

20、(1)整字節(jié)交換:)整字節(jié)交換:XCH A,Rn ; (Rn) (A)XCH A,direct ; (direct) (A)XCH A,Ri ; (Ri) (A)(2)半字節(jié)交換)半字節(jié)交換:XCHD A,Ri ; (Ri)03 (A)03例例3.43.4設(shè)(設(shè)(A)=57H,(,(20H)=68H,(,(R0)=30H,(30H)=39H,求下列指令的執(zhí)行結(jié)果,求下列指令的執(zhí)行結(jié)果(1)XCH A,20H ; 結(jié)果:(結(jié)果:(A)=68H,(,(20H)=57H(2)XCH A,R0 ;結(jié)果:結(jié)果: (A)=39H,(,(30H)=57H(3)XCH A,R0 ;結(jié)果:結(jié)果: (A)=30H

21、,(,(R0)=57H(4)XCHD A,R0 ;結(jié)果:結(jié)果: (A)=59H,(,(30H)=37H)四、堆棧操作指令四、堆棧操作指令 push direct ;pop direct ;(sp) +1(sp)(direct) (sp)(direct) (sp) (sp) -1 (sp)堆棧,由特殊功能寄存器堆棧,由特殊功能寄存器SP(81H)管理,始終指)管理,始終指向其棧頂位置,棧底視需要設(shè)在內(nèi)部向其棧頂位置,棧底視需要設(shè)在內(nèi)部RAM低低128B內(nèi)。內(nèi)。(1)入棧指令)入棧指令其中:其中:direct為源操作數(shù);目的操作數(shù)為為源操作數(shù);目的操作數(shù)為SP,隱含。,隱含。(2)出棧指令)出棧指

22、令其中:其中:direct為目的操作數(shù),源操作數(shù)為為目的操作數(shù),源操作數(shù)為SP,隱含。,隱含。例例3.5(1)已知:()已知:(A)=30H,(,(B)=70H執(zhí)行:執(zhí)行: MOVSP,#60H ;設(shè)棧底;設(shè)棧底 PUSHACC ; PUSHB結(jié)果:結(jié)果:(61H)= ,(,(62H)= ,(,(SP)= 30H70H62H (2)已知:()已知:(SP)=62H,(,(62H)=70H,(,(61H)=30H執(zhí)行:執(zhí)行:POP DPH POP DPL 結(jié)果:結(jié)果:(DPTR)= ,(,(SP)= 7030H60H使用注意事項使用注意事項 堆棧指令中操作數(shù)是堆棧指令中操作數(shù)是直接地址直接地址,

23、須注意,須注意指令的書寫格式!指令的書寫格式!PUSH R0POP R3(X)PUSH 00HMOV A,R0PUSH AccPOP 03HPOP AccMOV R3,AOrOr(X)( )( )( )( )3.3.2 算術(shù)運算類指令算術(shù)運算類指令一、加減法指令一、加減法指令二、乘除法指令二、乘除法指令三、增量、減量指令三、增量、減量指令四、二十進制調(diào)整四、二十進制調(diào)整 一、加減法指令一、加減法指令指令助記符:指令助記符: ADD + ADDC 帶帶C+ SUBB 帶帶C-操作數(shù):操作數(shù):如右圖,如右圖,以以A為目的操作數(shù)為目的操作數(shù)一、加減法指令一、加減法指令1、加法指令、加法指令(A) +

24、 data (A) ADD A , #data ; ADD A , direct ;ADD A , Ri ;ADD A , Rn ;(A) +(direct) (A) (A) +(Ri) (A) (A) +(Rn) (A) 2、帶進位加法指令、帶進位加法指令(A) + data + (C) (A) ADDC A , #data ; ADDC A , direct ;ADDC A , Ri ;ADDC A , Rn ;(A) +(direct) + (C) (A) (A) +(Ri) + (C) (A) (A) +(Rn) +(C) (A) 例例3.63.6 MOV A , #54H ADD A

25、 , #27H 0 0 1 1 1 1 0 1 1 0 1 0 1 0 1 0 0 (54)+ 0 0 1 0 0 1 1 1 (27) 000ACCSCY (CY) =0(CS) = 0 (AC) = 0(OV) =(CY) (CS)= 0( P ) = 0例例3.7 1 0 1 0 1 1 0 0 + 1 0 0 0 0 1 0 1 1 0 0 1 1 0 0 0 1 011CYCSACMOV A,#0ACHADD A,#85H (CY) =1(CS) = 0 (AC) = 1(OV) =(CY) (CS)= 1( P ) = 1例例3.8 利用利用ADDC指令進行多字節(jié)加法指令進行多字節(jié)

26、加法 已知:兩個已知:兩個16位無符號數(shù)位無符號數(shù)X1和和X2存放在存放在M1和和M2起始的起始的單元中(低單元中(低8位在前)試寫出位在前)試寫出X1+X2并把結(jié)果放在并把結(jié)果放在M1和和M1+1單元(低位在單元(低位在M1)的程序。設(shè)兩數(shù)之和不超過)的程序。設(shè)兩數(shù)之和不超過16位。位。 ORG0500HMOVR0,M1;X1地址送地址送R0MOVR1,M2;X2地址送地址送R1MOVA,R0;X1低低8位位(A) ADDA,R1;X1低低8位位X2低低8位位(A) ,形成,形成CyMOVR0,A;和的低和的低8位存位存M1INCR0;修改地址指針修改地址指針R0INCR1;修改地址指針修改

27、地址指針R1MOVA,R0;X1高高8位位(A) ADDC A,R1;X1高高8位位X2高高8位位Cy (A) MOVR0,A;SJMP;和的高和的高8位存位存M11停機停機3、 減法指令、帶借位的減法指令減法指令、帶借位的減法指令SUBB A , Rn ; SUBB A , #data;SUBB A , direct;SUBB A , Ri;(A) data (Cy) (A) (A) direct (Cy) (A) (A) Ri (Cy) (A) (A) Rn (Cy) (A) 例例3.9CLR CMOV A , #52HSUBB A , #0B4H 0 1 0 1 0 0 1 0 (52H

28、) 1 0 1 1 0 1 0 0 (B4H)1 0 0 1 1 1 1 0 (9EH)1 01 (CY)=1,(OV)= (CY) (CS)= 1,(AC)=1 , (P)=1 1ACCYCS二、乘除法指令二、乘除法指令1、乘法指令、乘法指令 MUL AB ; (A)(B) 低低8位位A 高高8位位BA、B中都是無符號整數(shù)中都是無符號整數(shù)如果積大于如果積大于255,(OV)1,否則,否則(OV)0;進位標志總是清零進位標志總是清零 (Cy)02、除法指令、除法指令 DIV AB ; (A) (B) 商商A 余數(shù)余數(shù)BA、B中都是無符號整數(shù)中都是無符號整數(shù)如果除數(shù)如果除數(shù)B為為“0”,(OV)

29、1,否則,否則(OV)0;進位標志總是清零進位標志總是清零 (Cy)0例、利用單字節(jié)乘法指令進行多字節(jié)乘法運算例、利用單字節(jié)乘法指令進行多字節(jié)乘法運算 如以雙字節(jié)數(shù)乘以單字節(jié)數(shù),設(shè)雙字節(jié)數(shù)為如以雙字節(jié)數(shù)乘以單字節(jié)數(shù),設(shè)雙字節(jié)數(shù)為X,單字節(jié)數(shù)為,單字節(jié)數(shù)為Y,則則 XY(X128X2)YX1Y28X2Y設(shè)雙字節(jié)數(shù)低設(shè)雙字節(jié)數(shù)低8位存位存30H,高,高8為存為存31H,單字節(jié)數(shù)在,單字節(jié)數(shù)在40H,積按,積按由低到高位次序存在由低到高位次序存在50H,51H,52H單元中,編程如下:單元中,編程如下: ORG003FHMOVA,30HMOVB,40HMULA BMOV51H,BMOV50H,AMO

30、VA,31HMOVB,40HMULA BADDA,51HMOV51H,AMOVA ,BADDCA,00HMOV52H,AEND三、增量、減量指令三、增量、減量指令 INC A ;(A)+1 (A)INC Rn ;(Rn)+1(Rn)INC Ri ;(Ri)+1(Ri)INC direct ;(direct)+1 (direct)INC DPTR ;(;(DPTR) +1 (DPTR)1、增量指令、增量指令 5條條DEC A ; (A) 1 (A) DEC Rn ;(Rn)1 (Rn)DEC Ri ;(Ri) 1 (Ri) DEC direct ;(direct) 1 (direct)2、減量指

31、令、減量指令 4條條對標志位不產(chǎn)生影響對標志位不產(chǎn)生影響!四、二四、二十進制調(diào)整指令十進制調(diào)整指令DA A ;若(若(AC ) =1 或(或(A30 ) 9, 則則 ( A )06H(A )若(若(CY ) = 1 或(或(A74 ) 9, 則則 ( A )60H(A ) 使用注意事項:使用注意事項:(1)只能緊跟在加法指令()只能緊跟在加法指令(ADD/ADDC)后進行)后進行(2)兩個加數(shù)必須已經(jīng)是)兩個加數(shù)必須已經(jīng)是BCD碼碼(3)只能對累加器)只能對累加器A中結(jié)果進行調(diào)整中結(jié)果進行調(diào)整例例3.10 試寫出能完成試寫出能完成8559的的BCD加法程序加法程序 并對其工作過程進行分析并對其

32、工作過程進行分析 1 0 0 0 0 1 0 1 (85H)+ 0 1 0 1 1 0 0 1 (59H) 1 1 0 1 1 1 1 0 (DEH)+ 0 1 1 0 0 1 1 0 (66H) 0 1 0 0 0 1 0 0 (44H)1ORG 1000HMOV A,85HADD A,59HDA ASJMP $END3.3.3、邏輯操作類指令、邏輯操作類指令一、單操作數(shù)指令(操作數(shù)在累加器一、單操作數(shù)指令(操作數(shù)在累加器A A中)中)1.1.累加器累加器A A清清0 0CLRCLR A A ; 0 0 (A A)2.2.累加器累加器A A取反取反CPLCPL A A ; ( A A )(

33、)A A3.3.累加器累加器A A左右移位左右移位RL A ;RLC A ;RR A ;RRC A ;SWAP A ;A7A0A4A3例例3.12已知:已知:M1和和M1+1單元有一個單元有一個16位二進制數(shù)(位二進制數(shù)(M1中為低中為低8位),編程令其擴大位),編程令其擴大2倍(設(shè)該數(shù)擴大后小于倍(設(shè)該數(shù)擴大后小于65536 )。)。ORG 1000HCLR CMOV R1, #M1MOV A, R1RLC AMOV R1 , AINC R1MOV A, R1RLC AMOV R1 , ASJMP $END 二、雙操作數(shù)指令二、雙操作數(shù)指令 第二操作數(shù)第二操作數(shù)# data directRi

34、 Rn1.累加器累加器A與立即數(shù)、內(nèi)部數(shù)據(jù)存儲器之間與立即數(shù)、內(nèi)部數(shù)據(jù)存儲器之間的邏輯操作。的邏輯操作。 ANL (ORL,XRL) 與與 或或 異或異或A,第一操作數(shù)第一操作數(shù) ( 、 ) 第二操作數(shù)第二操作數(shù)(A)第一操作數(shù)第一操作數(shù)2.2.直接地址單元與累加器直接地址單元與累加器A、立即數(shù)、立即數(shù)之間的邏輯操作之間的邏輯操作ANL(ORL,XRL)10100000( A0H )10101111(AFH)11111010(FA H)ANL P1 , #0F0H ; (P1)=ORL P1 , #0FH ; (P1)=XRL P1 , 55H ; (P1)=已知:已知:(P1)=0AAH ,

35、 (A) =55H ,執(zhí)行,執(zhí)行3.3.4、控制轉(zhuǎn)移指令、控制轉(zhuǎn)移指令一、程序轉(zhuǎn)移指令一、程序轉(zhuǎn)移指令1、無條件轉(zhuǎn)移指令、無條件轉(zhuǎn)移指令LJMPaddr16 ;長轉(zhuǎn)移;長轉(zhuǎn)移 AJMPaddr11 ;短轉(zhuǎn)移;短轉(zhuǎn)移SJMPrel ;相對轉(zhuǎn)移;相對轉(zhuǎn)移JMPADPTR ;間接轉(zhuǎn)移;間接轉(zhuǎn)移(1)長轉(zhuǎn)移指令指令)長轉(zhuǎn)移指令指令LJMP addr16;addr16 (PC)(64K范圍內(nèi)轉(zhuǎn)移)范圍內(nèi)轉(zhuǎn)移) addr11 AJMP addr11;(2)短轉(zhuǎn)移指令()短轉(zhuǎn)移指令(2KB范圍)范圍)機器碼機器碼a10a9a800001a7a6a5a4a3a2a1a0a10a9a8a7a6a5a4a3a2a

36、1a0實現(xiàn)與跳轉(zhuǎn)指令實現(xiàn)與跳轉(zhuǎn)指令下一條指令下一條指令同在同在2K范圍內(nèi)的跳轉(zhuǎn)范圍內(nèi)的跳轉(zhuǎn)例例 3.130345H :AJMP 0123 ;AJMP 1123H ;機器碼:機器碼:2123AJMP 1FEDH ; 機器碼:機器碼:E1ED機器碼:機器碼:21232567H :AJMP 29AB ;X27FEH :AJMP 2DEF ;機器碼:機器碼:A1EF27FEH :AJMP $ ;X跳轉(zhuǎn)范圍:跳轉(zhuǎn)范圍: 0000H07FFH跳轉(zhuǎn)范圍:跳轉(zhuǎn)范圍: 2000H27FFH跳轉(zhuǎn)范圍:跳轉(zhuǎn)范圍: 2800H2FFFH(3)相對短轉(zhuǎn)移指令)相對短轉(zhuǎn)移指令目的地址目的地址=(PC)當前值當前值rel源

37、地址源地址+2+rel(PC) + 2 (PC) (PC) +rel(PC)SJMP rel ; 80 relrel機器碼的相對偏移量,機器碼的相對偏移量,為為8 8位補碼位補碼 轉(zhuǎn)移范圍:以當前轉(zhuǎn)移范圍:以當前PCPC值為中心,向上值為中心,向上128128向下向下127127字節(jié)字節(jié)rel(目的地址源地址轉(zhuǎn)移指令字節(jié)數(shù))(目的地址源地址轉(zhuǎn)移指令字節(jié)數(shù))補補源地址:源地址:目的目的當前當前當前當前源源向下跳轉(zhuǎn):向下跳轉(zhuǎn):rel =目源目源 2向上跳轉(zhuǎn)向上跳轉(zhuǎn)=(源源目目 2) 補補 = 100H源目源目 2= FEH源目源目例例3.14設(shè)設(shè):2110H : SJMP 2100H設(shè)設(shè):2100

38、H :SJMP 2123H設(shè)設(shè):SJMP $rel=2123H2100H2 =21Hrel=FEH2110H2100H =EEHrel=FEH0 =FEH(4)間接轉(zhuǎn)移指令(多分支轉(zhuǎn)移指令)間接轉(zhuǎn)移指令(多分支轉(zhuǎn)移指令)JMP A+DPTR; (A)+(DPTR) (PC) A A中為中為8 8位無符號數(shù),實現(xiàn)以位無符號數(shù),實現(xiàn)以DPTRDPTR內(nèi)容為起點向下內(nèi)容為起點向下256256個單元內(nèi)的轉(zhuǎn)移。個單元內(nèi)的轉(zhuǎn)移。例例3.15CM:MOV R1 ,A RL A ADD A , R1 MOV DPTR,#PMTB JMP A+DPTRPMTB:LJMP PM0 ;轉(zhuǎn)入;轉(zhuǎn)入0命令命令 LJMP

39、 PM1 ;轉(zhuǎn)入;轉(zhuǎn)入1命令命令 LJMP PM2 ;轉(zhuǎn)入;轉(zhuǎn)入2命令命令 LJMP PM3 ;轉(zhuǎn)入;轉(zhuǎn)入3命令命令LJMP PM4 ;轉(zhuǎn)入;轉(zhuǎn)入4命令命令 END已知:已知:A A中放有待處理命令編號中放有待處理命令編號0-40-4,程序存儲器中放,程序存儲器中放有始地址為有始地址為PMTBPMTB的三字節(jié)長轉(zhuǎn)移指令表,試編一程序的三字節(jié)長轉(zhuǎn)移指令表,試編一程序能使機器按能使機器按A A中命令編號轉(zhuǎn)去執(zhí)行相應(yīng)的命令程序。中命令編號轉(zhuǎn)去執(zhí)行相應(yīng)的命令程序。;(;(A) 3 (A)2、條件轉(zhuǎn)移指令、條件轉(zhuǎn)移指令(1)累加器判零轉(zhuǎn)移指令)累加器判零轉(zhuǎn)移指令 JZ rel ; JNZ rel;(pc

40、) +2(pc)若若(A)=0,順序執(zhí)行,順序執(zhí)行若若(A)0,目的地址,目的地址 (pc) +rel(pc)(pc)+2 (pc)若若(A) 0,順序執(zhí)行,順序執(zhí)行若若(A)=0,目的地址,目的地址 (pc) +rel(pc)例例3.163.16、已知:外部、已知:外部RAM中中DATA1為始址的數(shù)為始址的數(shù)據(jù)塊據(jù)塊以零為結(jié)束標志,試編程將其傳送到以以零為結(jié)束標志,試編程將其傳送到以DATA2為始址的片內(nèi)為始址的片內(nèi)RAM區(qū)。區(qū)。ORG 0500HMOV DPTR,DATA1MOV R1,DATA2LOOP: MOVX A,DPTRJZDONEMOV R1,AINCDPTRINCR1 SJM

41、P LOOPDONE: SJMP END CJNE A , #data,rel , B4 relCJNE A , direct,rel , B5 relCJNE Ri ,#data,rel , B6 * relCJNE Rn , #data,rel , B8* rel(CY)=CJNE , ,rel1 0 PC (PC)+3,轉(zhuǎn)移轉(zhuǎn)移(PC ) rel (PC) ,順序執(zhí)行順序執(zhí)行(2)比較)比較不等不等轉(zhuǎn)移指令轉(zhuǎn)移指令無符號數(shù)比較無符號數(shù)比較(3)循環(huán)轉(zhuǎn)移指令循環(huán)轉(zhuǎn)移指令(減減 1 不為不為 0 轉(zhuǎn)移指令轉(zhuǎn)移指令)DJNZ Rn, rel ; D8* rel (PC) 2 (PC) ,(Rn

42、) 1 (Rn)若若(Rn)0 ,則轉(zhuǎn)移,則轉(zhuǎn)移, (PC) rel (PC) (Rn) =0,則順序執(zhí)行,則順序執(zhí)行DJNZ direct, rel ;例例3.17 :延時子程序延時子程序 delay: MOV R7, #03H delay0: MOV R6, #19H delay1: DJNZ R6, delay1 DJNZ R7, delay0 RET二、子程序調(diào)用和返回指令二、子程序調(diào)用和返回指令 一、調(diào)用指令(一、調(diào)用指令(2 2條)條)LCALLLCALL addr16addr16 ;長調(diào)用指令;長調(diào)用指令(3(3字節(jié)字節(jié)) )ACALLACALL addr11addr11 ; 短

43、調(diào)用指令短調(diào)用指令(2(2字節(jié)字節(jié)) )上面兩條指令都是在主程序中調(diào)用子程序,兩者的區(qū)別上面兩條指令都是在主程序中調(diào)用子程序,兩者的區(qū)別: :對短調(diào)用指令,被調(diào)用子程序入口地址必須與調(diào)用指令對短調(diào)用指令,被調(diào)用子程序入口地址必須與調(diào)用指令的下一條指令的第一字節(jié)在相同的的下一條指令的第一字節(jié)在相同的2KB2KB存儲區(qū)之內(nèi)。存儲區(qū)之內(nèi)。使用時可以用:使用時可以用: LCALL LCALL 標號標號 ;標號表示子程序首地址;標號表示子程序首地址 ACALL ACALL 標號標號 來調(diào)用子程序。來調(diào)用子程序。例例 :2345H :ACALL 2678H指令的執(zhí)行過程是:指令的執(zhí)行過程是:當前當前PCP

44、C壓棧壓棧,子程序首地址送,子程序首地址送 PCPC,實現(xiàn)轉(zhuǎn)移。,實現(xiàn)轉(zhuǎn)移。RETRET ;子程序返回指令;子程序返回指令二、返回指令(二、返回指令(2條)條)RETIRETI ;中斷返回指令中斷返回指令二者不能互換使用。二者不能互換使用。4、空操作指令、空操作指令(1條)條)NOPNOP(00H00H);空操作,就是什么事也不干,停一個周期,一般用作短時間空操作,就是什么事也不干,停一個周期,一般用作短時間的延時。的延時。RET指令的執(zhí)行過程是:堆棧棧頂內(nèi)容(2字節(jié),調(diào)用時保存的當前PC值)彈出給PC,實現(xiàn)返回。RETI指令除了具有RET指令的功能實現(xiàn)程序返回外,同時還清除中斷優(yōu)先級生效觸發(fā)

45、器,開放低級中斷。例例3.18例如:已知(例如:已知(SP)=60H,執(zhí)行下列指令后的結(jié)果:,執(zhí)行下列指令后的結(jié)果:1000H:ACALL 1100H1000H:LCALL 0800H結(jié)果:結(jié)果:(SP)=62H,(,(61H)=02H,(,(62H)=10H, (PC)=1100H : (SP)=62H,(,(61H)=03H,(,(62H)=10H, (PC)=0800H3.3.5、位操作指令、位操作指令*直接使用位地址直接使用位地址 *位名稱表示位名稱表示如:如: CY, AC , F0, P*字節(jié)地址加位的表示方式字節(jié)地址加位的表示方式 如:如: 20H.020H.7*專用寄存器的符號加位號專用寄存器的符號加位號 如:如:Acc.0,P1.0P1.7*用戶使用偽指令定義過的符號地址用戶使用偽指令定義過的符號地址如:如:D1 BIT 02H位地址表示方式:位地址表示方式:一、位數(shù)據(jù)傳送指令一、位數(shù)據(jù)傳送指令MOV C MOV C , bit bit ; (bitbit)(C C)MOV bit MOV bit

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論