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

下載本文檔

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

文檔簡介

1、1第第14章章 AT89S51單片機的指令系統(tǒng)單片機的指令系統(tǒng)本章內容AT89S51單片機指令系統(tǒng)的格式 AT89S51單片機尋址方式 指令系統(tǒng)的分析 本章采用簡單例程講解解匯編語言指令功能214.1 指令格式指令:即命令, 人們給計算機的命令指令有兩種表示方式:機器碼機器語言(機器能直接識別)助記符匯編語言(供設計人員使用) 機器碼和助記符一一對應,匯編語言可匯編為機器語言,機器語言可反匯編為匯編語言。指令格式:匯編語言格式標號: 操作碼助記符 操作數(shù) ;注釋3 START : MOV A , #20H ; 把數(shù)20H送入累加器A 中 INC A ; (A)加一3.1 指令格式匯編語言指令的

2、幾種形式 (1)沒有操作數(shù):RET,RETI,NOP(2)有1個操作數(shù):INC A,DEC 20H,CLR C,SJMP NEXT (3)有2個操作數(shù):MOV R7, #DATA,ADD A, R0,DJNZ R2, LOOP(4)有3個操作數(shù):CJNE A, #20H, NEQ414.1 指令格式機器語言的幾種形式:(1)單字節(jié)指令 :INC DPTR 指令機器代碼:A3 ADD A, R7 指令機器代碼:2F (2) 雙字節(jié)指令 :SUBB A, 2BH 指令機器代碼:95 2B ORL C, /27H 指令機器代碼:A0 27 (3)三字節(jié)指令:MOV 20H, #00H 指令機器代碼:

3、 75 20 00 LJMP 2000H 指令機器代碼: 02 20 00 514.2 AT89S51 單片機的尋址方式尋址方式 :CPU執(zhí)行指令時獲取操作數(shù)的方式 MSC-51單片機有7種不同的尋址方式 :(1)立即尋址方式(2)直接尋址方式 (3)寄存器尋址方式(4)寄存器間接尋址方式(5)變址尋址方式 (6)位尋址方式(7)相對尋址方式 614.2 AT89S51 單片機的尋址方式(1)立即尋址方式 在指令中直接給出了參與運算的操作數(shù)。 MOV A , #20H(2)直接尋址方式 指令中給出了參與運算的操作數(shù)所在單元的地址或所在位的位地址 MOV A , 20H 直接尋址方式的使用范圍:

4、 1)單元地址 : 007FH 、21個SFR 2)對SFR的訪問只能采用直接尋址方式714.2 AT89S51 單片機的尋址方式(3)寄存器尋址方式 指令中,指出了參與運算的操作數(shù)所在的寄存器。MOV A , R0 寄存器尋址方式中的寄存器 :1)工作(通用)寄存器R0R7 、DPTR2)累加器A、寄存器B(僅在乘除法時)和布 爾累加器C 8(4)寄存器間接尋址方式 在指令中,指出了存放參與運算的操作數(shù)所在單元地址的寄存器。 MOV A,R0 地址寄存器CPU? !操作數(shù)在哪兒?它的地址在R0中RAM得到地址了!找數(shù)!AROMMOV A,R09 14.2 AT89S51 單片機的尋址方式 可

5、以作為地址寄存器的寄存器把存放操作數(shù)地址的寄存器稱為地址寄存器。地址寄存器可以是:R0、R1、DPTR、SP(隱含)。在指令中表示為R0、R1、 DPTR寄存器間接尋址方式尋址范圍:1)片內RAM:007FH 地址寄存器:R0、R12)片外RAM:0000FFFFH 地址寄存器:R0、R1、DPTR10(5)變址尋址方式(基址寄存器+變址寄存器間接尋址)操作數(shù)的地址由基址寄存器+變址寄存器間接尋址指出。AT89S51單片機中可以作基址寄存器:2個十六位寄存器,DPTR和PC AT89S51單片機中變址寄存器:8位寄存器:累加器A操作數(shù)存放在一個由(PC)+(A)或(DPTR)+(A)指出的十六

6、位地址所指的單元中(在ROM中),有以下3種指令MOVC A,A+PCMOVC A,A+DPTRJMP A+DPTR 14.2 AT89S51 單片機的尋址方式11(6)位尋址方式在指令中,指出了參與運算的操作數(shù)(一位)所在的位地址或寄存器(僅有位累加器C) 指令中位地址: 1)202FH的16個單元的128 位;007FH 2)專用寄存器(SFR)中的某些寄存器中的位(80FFH)CLR CMOV 00H,CMOV 20H.0, C14.2 AT89S51 單片機的尋址方式12(7)相對尋址方式 與程序的執(zhí)行順序有關,在指令執(zhí)行時改變了程序計數(shù)器PC的內容,從而改變了程序轉移的目標地址。 當

7、前的PC值加上指令中給出的地址偏移量rel而形成的目的(標)地址。相對尋址只出現(xiàn)在相對轉移指令中。 目的地址=源地址+rel+指令的字節(jié)數(shù) rel =目的地址源地址指令的字節(jié)數(shù) rel:指令中給出的地址偏移量。-128+127,用補碼表示,大于0正向跳轉(向后),小于0則反向跳轉(向前)。 JC rel SJMP NEXT1 JZ FIRST DJNZ R1,LOOP214.2 AT89S51 單片機的尋址方式13指令中的常用符號指令中的常用符號Rn: n=(07),表示當前工作寄存器R0R7中的一個Ri: i=(0、1),代表R0和R1寄存器中的一個,用作間接尋址寄存器direct : 8

8、位直接字節(jié)地址(片內 RAM 和 SFR )#data: 8位立即數(shù),即8位常數(shù)??梢詾?進制(B)、10進制、 16進制(H)、 字符( )#data16: 表示16位立即數(shù),即16位常數(shù),取值范圍為#0000H#0FFFFHaddr16 : 表示16位地址 addr11 : 表示11位地址rel : 相對偏移量(為一字節(jié)補碼)用于相對轉移指令中bit :位地址,在位地址空間中。$: 表示當前指令的地址。14(X):表示X單元中的內容。(X):表示以X單元的內容為地址的存儲器單元內容,即(X)作地址,該地址單元的內容用(X)表示?!?”表示對該位操作數(shù)取反,但不影響該位的原值。 “”表示操作

9、流程,將箭尾一方的內容送入箭頭所指一方的單元中去。內容 地址 兩常數(shù)交換位置,兩側必須是常數(shù)1514.3 指令系統(tǒng)分析AT89S51單片機共有111條指令(1)按指令代碼的字節(jié)數(shù) 單字節(jié)指令(49條)雙字節(jié)指令(45 條)三字節(jié)指令(17 條)(2)按指令執(zhí)行的時間 單機器周期指令(64條)雙機器周期指令(45條) 四機器周期指令(2條) 14.3.1 指令的分類1614.3.1 指令的分類 (3)按照指令功能可分成五類:數(shù)據傳送類指令(2929條)條) 算術運算類指令(24條) 邏輯運算類指令 (24條) 控制轉移類指令(17條) 位操作類指令 (17條)1714.3.2 指令系統(tǒng)分析 一、

10、一、數(shù)據傳送類指令數(shù)據傳送(Data Transfers)類指令共有29條,分為以下5種類型: (1)通用傳送指令 (2)訪問程序存儲器的指令 (3)訪問外部RAM的指令 (4)堆棧操作指令 (5)交換指令1814.3.2 指令系統(tǒng)分析(一)通用傳送指令(一)通用傳送指令 (內(內RAMRAM和和SFRSFR間間1616條)條)通用傳送指令的一般形式為 : MOV 目的操作數(shù),源操作數(shù)(1)以以A為目的操作數(shù)的傳送指令為目的操作數(shù)的傳送指令 (4條)條)MOV A,源操作數(shù)MOV A,Rn ;(Rn)A,n07 MOV A,direct ;(direct) A MOV A,Ri ;(Ri) A

11、,i0, 1 MOV A,#data ; data A 1914.3.2 指令系統(tǒng)分析(2) 以Rn為目的操作數(shù)的傳送指令(3條) 一般 形式: MOV Rn,源操作數(shù) MOV Rn ,A ;(A)Rn MOV Rn ,direct ;(direct) Rn MOV Rn ,#data ; data Rn 20 (3) 以直接地址為目的操作數(shù)的指令(5條)一般形式:MOV direct,源操作數(shù) MOV direct,A ;(A)directMOV direct,Rn ;(Rn)directMOV direct1,direct2;(direct2)direct1MOV direct,Ri ;(

12、Ri)directMOV direct,#data ;datadirect 14.3.2 指令系統(tǒng)分析2114.3.2 指令系統(tǒng)分析(4)以間接地址為目的操作數(shù)的指令)以間接地址為目的操作數(shù)的指令(3條)條) 一般形式:MOV Ri,源操作數(shù) MOV Ri,A ;(A)(Ri) MOV Ri,direct ;(direct)(Ri) MOV Ri,#data ;data (Ri)2214.3.2 指令系統(tǒng)分析例1:已知(PSW) 00H,(A)11H,(20H) 22H,分析下列程序的執(zhí)行結果 MOV R0,A (A)R0 MOV R1,20H (20H)R1 MOV R2,#33H 33HR

13、2 分析結果如下: (R0)(00H)11H (R1)(01H)22H (R2)(02H)33H 2314.3.2 指令系統(tǒng)分析例2:已知(PSW)00H,(A)11H,(00H)22H,(01H)36H,(36H)33H,(33H)44H,分析下列程序的執(zhí)行結果。 MOV 30H,A; (A)30H MOV 31H,R0; (R0)31H MOV 32H,33H; (33H)32H MOV 34H,R1; (R1)34H MOV 35H,#55H ; 55H 35H 分析結果如下:(30H)11H,(31H)22H,(32H)44H,(34H)33H,(35H)55H。2414.3.2 指令

14、系統(tǒng)分析(5) 十六位數(shù)據傳送指令十六位數(shù)據傳送指令(1條)條) MOV DPTR,#data16 ; data815(DPH),data07 (DPL) 如:MOV DPTR,#2368H MOV DPTR,#35326 上述操作同: MOV DPH,#23H MOV DPL,#68H25ACCDirect直接尋址直接尋址Ri間接尋址間接尋址Rn寄存器尋址寄存器尋址#data立即數(shù)立即數(shù)2614.3.2 指令系統(tǒng)分析在使用通用數(shù)據傳送指令時,應注意以下幾點 :(1)AT89S51單片機不支持工作寄存器R0R7內容直接傳送給由地址寄存器內容指定的單元,或由地址寄存器內容指定單元的內容送給工作寄

15、存器R0R7,如果需要傳送,如果在程序中需要這樣的數(shù)據傳送,可以采用其他方式間接實現(xiàn)。 例如:希望把地址寄存器R1內容指定的單元內容傳送給工作寄存器R5,可以采用MOV A, R1 MOV R5, A2714.3.2 指令系統(tǒng)分析(2)雖然可以將一個指定的特殊功能寄存器的內容復制給累加器A,但下面這條指令是無效的:MOV A, ACC(3)在通用數(shù)據傳送指令中,地址寄存器只能由工作寄存器R0和R1擔當,其他工作寄存器沒有這個功能。(4)雖然AT89S51單片機由2個16位的寄存器:PC和DPTR,但只有DPTR用戶可以用指令方式直接設置其內容。2814.3.2 指令系統(tǒng)分析(二)(二)訪問程序

16、存儲器的指令(查表指令)訪問程序存儲器的指令(查表指令) MOVC A,A+DPTR ; (A)+(DPTR)A DPTR放表的首地址,A放所查數(shù)據在表中的偏移;查表范圍為64KB空間。遠程查表 MOVC A,A+PC ; (A)+(PC)A(唯一的一條用到PC的) PC的值為下一條指令的地址, A放所查數(shù)據相對PC值的偏移;查表范圍為最大為256B空間近程查表2914.3.2 指令系統(tǒng)分析例3:已知在ROM的第7010H單元開始存放正整數(shù)y=115的平方表(占16字節(jié)),要求:程序入口(ACC)=y,程序出口(ACC)=y2 ,DPTR的內容不得丟失。 MOV A ,#y ; PUSH DP

17、H; PUSH DPL; MOV DPTR,#7010H; MOV A,A+DPTR; POP DPL POP DPH 7010:07011:1 701F:2553014.3.2 指令系統(tǒng)分析(三)(三)訪問外部訪問外部RAMRAM和外部和外部I/OI/O口的數(shù)據傳送指令(口的數(shù)據傳送指令(4 4條)條)1 以以DPTR為地址寄存器的為地址寄存器的指令 (1)讀(輸入)指令:MOVX A,DPTR ;(DPTR) A 說明: 上述指令以DPTR為片外RAM單元的16位地址指 針,尋址范圍為尋址范圍為0000FFFFH,即64K 。3114.3.2 指令系統(tǒng)分析CPU執(zhí)行讀外部數(shù)據存儲器和外部I

18、/O口指令的時序3214.3.2 指令系統(tǒng)分析 例:把外部RAM的2000H單元的內容存入單片機內部RAM的30H單元。 MOV DPTR, #2000HMOVX A, DPTRMOV 20H, A 注意:1、外部RAM單元和外部I/O口的地址為16位;2、外部RAM單元和外部I/O口的信息必須通過A累加器才能進入單片機的CPU。3314.3.2 指令系統(tǒng)分析(2)寫(輸出)指令: 將單片機的累加器A的內容輸出到外部RAM某一單元或外部I/O口。 MOVX DPTR,A ; (A) (DPTR) 說明:上述指令以DPTR為片外RAM單元的16位地址指針,尋址范圍為尋址范圍為0000FFFFH

19、,即64K 3414.3.2 指令系統(tǒng)分析CPU執(zhí)行寫外部數(shù)據存儲器和外部I/O口指令的時序3514.3.2 指令系統(tǒng)分析例:把單片機內部RAM的20H單元的內容轉存到外部RAM的8000H單元。MOV DPTR, #8000HMOV A, 20HMOVX DPTR, A 注意:1、外部RAM單元和外部I/O口的地址為16位;而單片機內部RAM的單元地址為8位。2、單片機片內RAM單元的信息輸出到外部RAM單元或外部I/O口,必須通過A累加器實施。3614.3.2 指令系統(tǒng)分析2 以以R0和和R1為地址寄存器的為地址寄存器的指令 (1)讀(輸入)指令 MOVX A,Ri ;(P2)(Ri) A

20、,Ri=0, 1; 說明: 上述指令以R0或R1作低8位地址指針,由P0口送 出,尋址范圍為00FFH ,256B空間,高8位由當前的P2口狀態(tài)提供。3714.3.2 指令系統(tǒng)分析(2)寫(輸出)指令 MOVX Ri,A ;(A) (P2)(Ri),Ri=0, 1; 說明: 上述指令以R0或R1作低8位地址指針,由P0口送出,尋址范圍為256B空間,高8位由當前的P2口狀態(tài)提供。 注意:(1)上述2種指令的操作時序與前面訪問外部RAM的指令相同。(2)采用R0或R1作為地址寄存器指出的是外部RAM和外部I/O口的低八位地址,當擴展的數(shù)據存儲器單元和I/O口的空間不大于256個時,P2口可以作為

21、I/O口使用。3814.3.2 指令系統(tǒng)分析 ROM和片外數(shù)據RAM傳送類指令總結ROM數(shù)據傳送指令圖 片外RAM數(shù)據傳送指令 3914.3.2 指令系統(tǒng)分析(四)堆棧操作指令(四)堆棧操作指令 (2條) 堆棧是在內部RAM中開辟的一個先進后出(后進先出)的區(qū)域,用來保護CPU執(zhí)行程序的現(xiàn)場 1入棧指令PUSH direct;CPU操作:先(SP)+1 SP,修改堆棧指針;后(direct) (SP),入棧:例如:MOV SP, #70H PUSH 60H 6061707172A869FEC6CA片內RAM(SP)(SP)A84014.3.2 指令系統(tǒng)分析2 出棧指令POP directCPU

22、操作:先(SP) direct,出棧,把堆棧中由(SP)所指單元的內容傳送到指定單元direct。后(SP)1 SP,修改堆棧指針 例如: MOV SP, #71H POP 60H 6061707172A869FEC6CA片內RAM(SP)(SP)C64114.3.2 指令系統(tǒng)分析在使用堆棧時,應注意以下幾點 :(1)PUSH和POP指令的操作數(shù)必須是單元地址。PUSH指令中指定的單元地址是被保護單元的地址(源操作數(shù)),指令隱含了目的操作數(shù);而POP指令中指定的單元地址是內容要恢復的單元地址(目的操作數(shù)),指令隱含了源操作數(shù)。(2)AT89S51單片機的堆棧建在內部RAM中,單片機復位后,(S

23、P)07H,從08H單元開始的區(qū)域均為棧區(qū)。在應用系統(tǒng)中,一般把棧區(qū)開辟在內部RAM的307FH這一區(qū)域,棧區(qū)最好靠近內部RAM的末端,以避免堆棧加1向上增長時覆蓋有效數(shù)據。4214.3.2 指令系統(tǒng)分析(3)在使用堆棧操作指令時,入棧指令PUSH和出棧指令POP應成對出現(xiàn),保護指定單元內容時,必須遵循先進后出的步驟,否則,單元內容在出?;謴蜁r會發(fā)生改變。(4)AT89S51單片機不支持對工作寄存器R0R7直接使用堆棧操作指令。如果要用堆棧操作保護某一寄存器Rn(n07)的狀態(tài),可用該工作寄存器對應單元進行操作。如當(PSW.4)1、(PSW.3)0時,把R5的內容入棧,可用PUSH 15H;

24、出棧時,PUSH 15H,即可恢復R5原來的內容。4314.3.2 指令系統(tǒng)分析例: 已知(30H)11H,(31H)22H,則下列程序段的操作過程如下。MOV SP, #60H ;開辟棧區(qū)PUSH 30H ;(SP)+1 SP,30H單元內容進棧 61H單元 PUSH 31H ;(SP)+1 SP,31H單元內容進棧 62H單元,(SP)62HPOP ACC ;(SP)ACC,棧頂62H單元內容彈出到累加器ACC,(SP)1SP,(SP)61H。POP B ;(SP)B,棧頂61H單元內容彈出寄 存器B,(SP)1SP,(SP)60H。44(五)(五)交換指令(交換指令(5 5條)條) (1

25、)字節(jié)交換指令 將源操作數(shù)的內容與A累加器的內容互換。 XCH A,源 源Rn,direct,Ri指令:XCH A,Rn ; (A)(Rn)XCH A,direct ; (A)(direct)XCH A,Ri ; (A)(Ri)例:將內RAM的20H單元的內容與40H單元交換。14.3.2 指令系統(tǒng)分析4514.3.2 指令系統(tǒng)分析方法1: MOV A,20H XCHA,40H MOV 20H, A方法2: MOV A,20H MOV 20H, 40H MOV40H, A46(2)低半字節(jié)交換指令 XCH A,Ri ; (A03) (Ri)03) 將某一單元內容的低四位與累加器A的低四位互換,

26、而二者的高四位保持不變。14.3.2 指令系統(tǒng)分析D0D1D2D3D4D5D6D7(A)D0D1D2D3D4D5D6D7(R0)D0D1D2D3D4D5D6D7(A)D0D1D2D3D4D5D6D7(R0)XCH A,Ri執(zhí)行過程例題:兩個單元的低四位互換。4714.3.2 指令系統(tǒng)分析(3)累計器A的高低四位互換指令 將累加器A的高四位和低四位互換。 SWAP A ;(A03)(A47 )D0D1D2D3D4D5D6D7(A)(A)D0D1D2D3D4D5D6D7如:設(A)=5BH SWAP A ; (A)=B5H4814.3.2 指令系統(tǒng)分析交換指令總結必須通過ACC實現(xiàn)交換且僅在內RA

27、M中交換49綜述(a)均為無符號數(shù)的8位整數(shù)運算(b)除INC、DEC之外,其余17條必通過ACC(c)17條指令影響四個標志位(d)單片機不支持片外運算 14.3.3 算術運算指令50(一) 二進制加法指令(1)不帶進位位的加法指令(4條) ADD A,源 ; (A)+源A 源 #data,Rn,direct,Ri 指令:ADD A,#data; (A)+ data AADD A,Rn ; (A)+ (Rn) AADD A,direct ; (A)+ (direct) AADD A,Ri ; (A)+(Ri) A 影響標志位CY,AC,OV,P 14.3.3 算術運算指令5114.3.3 算

28、術運算指令加法指令加法指令執(zhí)行過程與標志位之間的關系D0D1D2D3D4D5D6D7(A)源(A)結果進位(AC)=1進位(CY)=1(CY) D6與D7兩位其中一位在運算中有進位,而另一位沒有,則(OV)=1,否則,(OV)=0. 運算結果(A)中1的個數(shù)為偶數(shù),(P)=0,否則,(P)=15214.3.3 算術運算指令加法指令例:單字節(jié)二進制加法:x存放在20H單元,y存放在21H單元,求 z=x+y(設z小于FFH)D0D1D2D3D4D5D6D7)(CY) 如果z=x+y的結果大于255,勢必會產生進位,進位如何處理?53(2)帶進位位的加法指令(4條) ADDC A,源 ; (A)+

29、源+(CY)A源 #data,Rn,direct,Ri 指令:ADDC A,#dataADDC A,RnADDC A,directADDC A,Ri 影響標志位Cy,AC,OV,P只用于多字節(jié)加法指令中,除最低字節(jié)以外其余高字節(jié)的加法14.3.3 算術運算指令加法指令5414.3.3 算術運算指令加法指令例1:單字節(jié)二進制加法:x存放在20H單元,y存放在21H單元,求 z=x+yD0D1D2D3D4D5D6D7)CY00000000000000005514.3.3 算術運算指令加法指令例2:雙字節(jié)二進制加法:x存放在20H、21H單元(高8位在20H單元),y存放在22H、23H單元(高8位

30、在20H單元) ,求 z=x+yXX20HXX21HXX22HXX23HXX24HXX25HXX26HXX27H內RAM20H21H23H22H+)32H31H33H為什么會出現(xiàn)3個字節(jié)? ? 多字節(jié)二進制加法與雙字節(jié)原理相同,我們可以將此算法推廣到多字節(jié)。56MOV A,21HADD A,23HMOV 31H,AMOV A,20HADDC A,22HMOV 32H,AMOV A,#0MOV 33H,#0ADDC A,31HMOV 33H,ARET14.3.3 算術運算指令加法指令20H21H23H22H+)32H31H33H入口:20H、21H、22H、23H出口:33H、32H、31H57

31、(3)加1指令 (5條)INC 源; 源+1 源 源A,Rn,direct,Ri指令INC AINC RnINC directINC Ri INC DPTR 以上指令不影響標志CY、AC和OV NOTENOTE:上溢:上溢14.3.3 算術運算指令加法指令58(4)十進制加法調整指令 DA A 影響標志位CY、AC、OV、P說明: 1)該指令必須與加法指令聯(lián)合使用!將A中的和調整為BCD碼,并且ADD或ADDC的兩個操作數(shù)是BCD碼; 2)調整方法: 若(A03)9或(AC)=1,則(A03) +6A03; 若(A47)9或(CY)=1,則(A47) +6 A47; 例:多字節(jié)十進制加法14.

32、3.3 算術運算指令加法指令5914.3.3 算術運算指令加法指令開始(A)03 9?(AC) = 1(A)47 9?(Cy) = 1結束(A)+06H (A) (A)+60H (A) YYYYNNNNCPU執(zhí)行DA A的流程6014.3.3 算術運算指令加法指令 使用DA A指令時,必須注意以下幾點:(1)該指令的前提是兩個2位十進制數(shù)(BCD碼)的加法,對加法運算的結果進行調整,使結果為十進制數(shù),即將A中的和調整為BCD碼。(2)必須與加法指令聯(lián)合使用?。?)單獨使用該指令是不能把累加器A中的數(shù)據轉換為BCD碼形式的,因為,DA A的調整結果不僅依賴于累加器A的內容,而且與標志位CY和AC

33、的狀態(tài)有關。6114.3.3 算術運算指令加法指令例: 已知在30H和31H單元中分別存儲兩個BCD碼表 示的十進制數(shù)19和53。求兩個數(shù)之和,并把結果 存到32H單元。 程序如下: MOV A, 30H ; (A)19H ADD A, 31H ; (A)19H53H6CH DA A ; 十進制調A72H MOV 32H, A ; (32 H)72H62(二)二進制減法指令(1)帶借位的減法指令(4條)SUBB A,源; (A)源(CY)A源 #data,Rn,direct,Ri 指令:SUBB A,#dataSUBB A,RnSUBB A,direct SUBB A,Ri 影響標志位CY,A

34、C,OV,P 多字節(jié)相減時,應先清多字節(jié)相減時,應先清CY,然后對低字節(jié)進行減法,然后對低字節(jié)進行減法CLR C減法指令63例: 設累加器A的內容為0C9H,寄存器R2的內容為 54H,當前CY的狀態(tài)為1,執(zhí)行指令 SUBB A,R2結果: 累加器A的內容為74H, (CY)0,(AC)0, (OV)1,(P)0。64(2)減1指令 (4條)DEC 源;源1 源源A,Rn,direct,Ri 指令:DEC ADEC RnDEC directDEC Ri 以上指令不影響標志CY、AC和OV NOTE:下溢:下溢減法指令65減法指令例: 設R0的內容為7EH,內部RAM的7DH和7EH單元的內容分

35、別為00H和40H,P1口的內容為55H,執(zhí)行下列指令后,R0、P1、7EH和7DH單元的內容分別是多少? DEC R0 DEC R0 DEC R0 DEC 7EH DEC P1 (R0)= 7DH;(P1)= 55H; (7E)=39H; (7D)=FFH;66乘法指令(三)乘法指令 (1條) MUL AB (A)(B)的乘積高八位存儲在(B),低八位存儲在(A)。說明:(1)此指令為無符號數(shù)乘法; (2) 指令執(zhí)行后,(CY)=0。若乘積大于255,則(OV)=1。例: 已知x存放在(20H)中,y存放在(21H),求x*y.67乘法指令多字節(jié)乘以單字節(jié)的乘法算法:十進制數(shù)乘法運算會給我們

36、什么啟示?899818 0 1899818 0 172多字節(jié)乘以單字節(jié)的實現(xiàn)算法68乘法指令41H40H30HB1A1B2A250H52H51H+MOV R1,#50HMOV B,30HMOV A,40HMUL ABMOV R1,AINC R1MOV R1,BMOV B,30HMOV A,41HMUL ABMOV B,30HMOV A,41HMUL ABADD A , R1MOV R1,AINC R1MOV A,BADDC A,#00HMOV R1,A6914.3.3 算術運算指令除法指令(四)除法指令 DIV AB (A)/(B)的商存儲在(A),余數(shù)存儲在(B)說明:(1)此指令為無符號數(shù)

37、除法; (2)若除數(shù)(B)=0,則(OV)=1,若(B) 0,則(OV)=0;(CY)=0。多字節(jié)除法和乘法、負數(shù)、小數(shù)除法編子程序例: 已知x存放在(20H)中,y存放在(21H),求x/y.7014.3.3 算術運算指令總結71 邏輯運算指令包括與、或、異或、清除、求反、移位等操作。這類指令一般不影響標志位CY、AC和OV。14.3.4 邏輯運算指令 (一) 由累加器A實現(xiàn)的邏輯操作指令 (1)清零 CLR A 說明:執(zhí)行結果同 MOV A,#00H,只影響標志位P (2)累加器A取反指令(按位取反) CPL A ;(/A) A 說明:不影響標志位。例: 設(A)=56H (0101011

38、0) CPL A ;結果為0A9H(10101001)7214.3.4 邏輯運算指令邏輯操作指令 (3)循環(huán)左移 RL A ;D0D1D2D3D4D5D6D7說明:(1)每次只移動一位;(2)在(A)07FH時,左移一位相當于(A)乘以2;7314.3.4 邏輯運算指令邏輯操作指令 (4)帶進位位循環(huán)左移 RLC A ;D0D1D2D3D4D5D6D7CY說明:(1)每次只移動一位;左移一位相當于(A)乘以2;(3)帶進位位移動時,影響標志位CY和P。7414.3.4 邏輯運算指令邏輯操作指令 (5)循環(huán)右移 RR A ;D0D1D2D3D4D5D6D7說明:(1)每次只移動一位;(2)在(A

39、)為偶數(shù)時,右移一位相當于(A)除以2;7514.3.4 邏輯運算指令邏輯操作指令 (6)帶進位位循環(huán)右移 RRC A ;D0D1D2D3D4D5D6D7CY說明:(1)每次只移動一位;移一位相當于(A)除以2;(3)帶進位位移動時,影響標志位CY和P。7614.3.4 邏輯運算指令與操作指令(二) 與邏輯操作指令 ANL 目的操作數(shù),源操作數(shù) (1) 以累加器A為目的操作數(shù)的與邏輯運算指令 ANL A,#data ; (A)data A ANL A,Rn ;n=07, (A) (Rn) A ANL A,direct ; (A)(direct) A ANL A,Ri; ;i=0,1,(A)(R

40、i) A 這4條指令執(zhí)行時僅影響標志位P (2)以某個單元為目的操作數(shù)的與邏輯運算指令 ANL direct,#data ;(direct)datadirect ANL direct,A ;(direct)(A) direct 指令執(zhí)行時不會影響任何標志位7714.3.4 邏輯運算指令與操作指令與邏輯操作指令用于實現(xiàn)屏蔽。屏蔽碼屏蔽碼xxxxxxxxD0D1D2D3D4D5D6D7011100100 xxx00 x0單元單元設某位數(shù)值為di = 0, 1,與運算法則如下: di 0 = 0 (屏蔽) di 1 = di (保留)例: 設累加器A的內容為0CBH(11001011B),內部RAM

41、30H單元的內容為0AAH(10101010B),執(zhí)行指令: ANL A,30H 則累加器A的內容為8AH(10001010B)7814.3.4 邏輯運算指令或操作指令(三) 或邏輯運算指令 ORL 目的操作數(shù),源操作數(shù) (1)以累加器A為目的操作數(shù)的或邏輯運算指令 ORL A,#data ;(A) data A ORL A,Rn ;n = 07,(A) (Rn)A ORL A,direct ; (A) (direct) A ORL A,Ri; ;i=0,1,(A) (Ri) A 指令執(zhí)行時僅影響標志位P (2) 以某個單元為目的操作數(shù)的或邏輯運算指令 ORL direct,#data ;(d

42、irect) datadirect ORL direct,A ;(direct)(A) direct 指令執(zhí)行時不會影響任何標志位7914.3.4 邏輯運算指令與操作指令或邏輯操作指令用于實現(xiàn)置位。設某位數(shù)值為di = 0, 1,與運算法則如下: di 0 = di (保留) di 1 = 1(置位)例:設累加器A的內容為0D5H,執(zhí)行指令 ORL A,#0FH,則累加器A的內容為 ? 則累加器A的內容為0DFH(11011111B)置位碼置位碼單元單元x x x x x x x xD0D1D2D3D4D5D6D70 1 1 1 0 0 1 0 x 1 1 1 x x 1 x8014.3.4

43、邏輯運算指令異或操作指令(四)異或邏輯運算指令 XRL 目的操作數(shù),源操作數(shù) (1)以累加器A為目的操作數(shù)的異或邏輯運算指令 XRL A,#data ;(A)dataA XRL A,Rn ;n=07,(A) (Rn) A XRL A,direct ;(A) (direct) A XRL A,Ri; ;i=0, 1,(A) (Ri) A 指令執(zhí)行時僅影響標志位P。(2)以某個單元為目的操作數(shù)的異或邏輯運算指令 XRL direct,#data ;(direct) data direct XRL direct,A ;(direct) (A) direct 指令執(zhí)行時不會影響任何標志位8114.3.

44、4 邏輯運算指令與操作指令異或邏輯操作指令用于實現(xiàn)取反。例:累加器A的內容為0C3H(11000011B),寄存器R0的內容為0AAH,執(zhí)行指令:XRL A, R0,則累加器A的內容為? 例:一個負數(shù)的原碼存放在30H單元,求其補碼 。設某位數(shù)值為di = 0, 1,與運算法則如下: di 0 = di (保留) di 1 = di (置位)取反碼取反碼單元單元x x x x x x x xD0D1D2D3D4D5D6D70 1 1 1 0 0 1 0 x x x x x x x x8214.3.4 邏輯運算指令總結8314.3.5 14.3.5 位操作指令位操作指令位操作指令包括位變量傳送、

45、邏輯運算、控制轉移等指令,共17條。適用范圍:位地址空間適用范圍:位地址空間 指令中,位地址的表示方法: (1)直接用位地址 如:D4H (2)用特殊功能寄存器名加位數(shù) 如:PSW.4 (3)用位名稱 如:RS1 (4)用偽指令bit定義的有名字的位地址(稍后介紹) 如:SUB.REG bit RS1, FLAGRUN bit 02H8414.3.5 14.3.5 位操作指令位操作指令位數(shù)據傳送指令位數(shù)據傳送指令(1)位數(shù)據傳送指令)位數(shù)據傳送指令(2條)條)MOV C,bit ;(bit)CMOV bit,C ;(CY) bit說明:位與位之間的狀態(tài)傳送必須通過C來進行,2個位地址的位不能直

46、接傳送。 例:MOV C,TR0 MOV 08H,C8514.3.5 位操作指令位修正指令2、位修正指令(6條) ( 1)位清0CLR C ; 0 CCLR bit ; 0 bit( 2)位置1SETB C ; 1 C SETB bit ; 1 bit( 3)位取反CPL C ; (/C) C CPL bit ; (/bit) bit(C)(C)8614.3.5 14.3.5 位操作指令位操作指令位邏輯運算指令 3、位邏輯運算指令(4條) (1) 位邏輯與運算指令ANL C,bit ; (C) (bit)CANL C,/bit ; (C)( / bit) C(C)(bit)(C)(C)(bit

47、)(C)8714.3.5 14.3.5 位操作指令位操作指令位邏輯運算指令 (2) 位邏輯或運算指令ORL C,bit ; (C) (bit)CORL C,/bit ; (C) ( / bit) C(C)(bit)(C)(C)(bit)(C)8814.3.5位操作指令位操作指令位比較轉移指令比較轉移指令 1.以進位位CY狀態(tài)為判別條件的轉移指令 (1)以CY狀態(tài)是1為判別條件的轉移指令JC rel ; (PC) +2 (PC) ; ;(CY)=1,則(PC) +rel (PC) ; (CY) =0,則順序向下執(zhí)行(PC)+2 (PC)(CY)=1?(PC)+rel (PC)下一條指令目標地址C

48、PU執(zhí)行過程YN用法: JC LABEL(CY) =1下一條指令LABELYN8914.3.5位操作指令位操作指令位比較轉移指令比較轉移指令(2)以CY狀態(tài)是0為判別條件的轉移指令JNC rel ; (PC) +2 (PC) ; ;(CY)=0,則(PC) +rel (PC) ; (CY) =1,則順序向下執(zhí)行(PC)+2 (PC)(CY)=0?(PC)+rel (PC)下一條指令目標地址CPU執(zhí)行過程YN用法: JC LABEL(CY) = 0?下一條指令LABELYN9014.3.5位操作指令位操作指令位比較轉移指令比較轉移指令例:比較兩個數(shù)x、y的大小,將大數(shù)存放在MAX單元,若相等置標

49、志位F0位1,否則,F(xiàn)0清0。9114.3.5 位操作指令位操作指令 2.以位狀態(tài)為判別條件的轉移指令(1)以位狀態(tài)為1作為判別條件JB bit,rel ; ; (PC)+3 (PC) ;若(bit)=1,則(PC)+rel (PC) ;若(bit)=0,則順序向下執(zhí)行(PC)+3 (PC)(bit)=1?(PC)+rel (PC)下一條指令目標地址CPU執(zhí)行過程YN用法: JB bit, LABEL (bit)=1?下一條指令LABELYN92 (2)以位狀態(tài)為0作為判別條件 JNB bit,rel ; (PC)+3 (PC);若(bit)=0,則(PC)+rel (PC) ;若(bit)=

50、1,則順序向下執(zhí)行(PC)+3 (PC)(bit)=0?(PC)+rel (PC)下一條指令目標地址CPU執(zhí)行過程YN用法: JNB bit ,LABEL(bit)=0?下一條指令LABELYN14.3.5位操作指令位操作指令位比較轉移指令比較轉移指令9314.3.5位操作指令位操作指令位比較轉移指令比較轉移指令 例: 已知累加器A的內容為56H (01010110B),執(zhí)行下列指令序列:JBC ACC.3, LABEL1JBC ACC.2, LABEL2程序將轉移到LABEL2處,并且累加器A的內容變?yōu)?2H (01010010B) 9414.3.5位操作指令位操作指令位比較轉移指令比較轉移

51、指令(3) 判斷位值并清0 JBC bit,rel ; (PC)+3 ;若(bit)=1,則(PC)+rel (PC) ;若(bit)=0,則順序向下執(zhí)行用法: JBC bit, LABEL(PC)+3 (PC)(bit)=1?(Cy)=0(PC)+rel (PC)下一條指令目標地址CPU執(zhí)行過程YN(bit)=1?下一條指令(Cy)=0YNLABEL9514.3.5 14.3.5 位操作指令位操作指令例:用位操作指令實現(xiàn)X=X0 X1,設X0為P1.0, X1為P1.1 , X為AAC.0法1:因無異或法2:異或規(guī)則 一個數(shù)與0異或該X=X0 X1=X0/X1+/X0X1值不變 與1異或該值

52、取反X bit ACC.0MOV C,X0X0 bit P1.0JNB X1,NCEX;X1=0 X=C=X0X1 bit P1.1CPL CMOV C, X0 NCEX:MOV X,C; X1=1 X=C=X0ANL C ,/X1SJMP $MOV 20,CMOV C, /X0ANL C , X1ORL C,20HMOV X,CSJMP $9614.3.5 14.3.5 位操作指令位操作指令總結9714.3.6 14.3.6 控制轉移指令控制轉移指令 CPU控制轉移指令將改變程序的執(zhí)行順序,這類指令有以下幾種:(1)無條件轉移指令(2)條件轉移指令(3)循環(huán)控制轉移指令(4)調用/返回指令

53、本節(jié)主要從編程角度出發(fā),根據指令的功能介紹控制轉移指令的使用方法。9814.3.6 控制轉移指令無條件轉移一、 無條件轉移指令(4條) 這組指令相當于高級語言的 “GOTO 標號”語句, CPU在執(zhí)行程序的過程中,碰到該類型指令將“無條件”地改變PC的內容,改變程序執(zhí)行的流向。 (1) 短轉移指令 AJMP addr11 轉移范圍:含有下一條指令首地址的同一個2KB范圍,即高5位地址相同;例: AJMP NEXT使用方式: SJMP LABELCPU的執(zhí)行過程;(PC)+2 PC ;addr11 PC100 ,(PC1511)不變9914.3.6 控制轉移指令無條件轉移(2)長轉移指令LJMP

54、 addr16 說明: 轉移范圍:64KB全程序空間任何單元CPU的執(zhí)行過程addr16 PC) 使用方式: LJMP LABEL 例:長轉移指令應用 ; INC A ; ; LJMP LOOP1 ; 無條件轉移到LOOP1執(zhí)行程序10014.3.6 控制轉移指令無條件轉移(3)相對轉移指令 SJMP rel rel為指令代碼中的轉移范圍(相對量): 128+127;對應rel值為:00H7FH(0+127)、80HFFH( 128 1);用法: SJMP LABEL例: SJMP NEXTCPU的執(zhí)行過程(PC)+2 PC, (PC)+rel PC10114.3.6 控制轉移指令無條件轉移(

55、4)間接轉移指令JMP A+DPTR ;(A)+(DPTR) PC說明: (1)具有多分枝轉移功能,即散轉功能,又叫散轉指令; (2)轉移范圍:是以DPTR為首地址的256B。例: 根據累加器A中的命令鍵鍵值,設計命令鍵操作程序入口跳轉表。10214.3.6 控制轉移指令無條件轉移 CLR C RLC A MOV DPTR,#JPTAB JMP A+DPTRJPTAB: AJMP CCS0 AJMP CCS1 AJMP CCS2 :10314.3.6 控制轉移指令條件轉移條件轉移指令相當于高級語言的“ IF 條件 THEN 標號”語句 (一)以 累加器A內容為判別條件的轉移指令 (1)判(A)

56、為零轉移 JZ rel ; (PC)+2PC 當(A)=0時,(PC)+relPC轉移; 當(A)0時,順序執(zhí)行。用法: JZ LABEL(PC)+2 (PC)(A)=0?(PC)+rel PC下一條指令目標地址CPU執(zhí)行過程YN(A)=0?下一條指令LABELNY二、 條件轉移指令(8條)10414.3.6 控制轉移指令條件轉移(2)判(A)不為零轉移 JNZ rel ; (PC)+2PC 當(A) 0時,(PC)+relPC轉移; 當(A) = 0時,順序執(zhí)行。用法: JNZ LABEL(PC)+2 (PC)(A)0?(PC)+rel PC下一條指令目標地址CPU執(zhí)行過程YN(A) 0?下

57、一條指令LABELYN10514.3.6 控制轉移指令條件轉移例:設無符號數(shù)存放于20H單元,存放于21H單元, 比較兩個數(shù)、是否相等,若相等置標志位F0位1,否則,F(xiàn)0清0。10614.3.6 控制轉移指令比較轉移(二)比較轉移指令 (1)累加器A與指定單元比較的轉移指令 CJNE A,direct,rel ; (PC)+(PC) ;若(A) (direct),則(PC)+rel PC,且0 CY; ;若(A) (direct), 0 CY(A) (direct), 0 CY(A) #data ,則(PC)+relPC ,且0CY; ;若A #data ,則(PC)+rel PC ,且0 C

58、Y; ;若(Rn) #data ,則(PC)+rel PC ,且0 CY; ;若(Ri) #data ,則(PC)+rel PC ,且1 CY; ;若(Ri) =#data ,則順序執(zhí)行,且0 CY 。 使用方式:CJNE Ri,#data,LABEL 11014.3.6 控制轉移指令比較轉移例:比較兩個數(shù)x、y是否相等,若相等置標志位F0位1,否則,F(xiàn)0清0。例:從內部RAM的30H單元開始連續(xù)存儲有20個無符號8位二進制數(shù)。統(tǒng)計這一組數(shù)據中00H的個數(shù),結果存入60H單元。11114.3.6 控制轉移指令循環(huán)控制轉移 (五)循環(huán)控制轉移指令(1)以工作寄存器內容作為循環(huán)控制變量 DJNZ Rn,rel ;(PC)+2PC;(Rn)1 Rn; ;若(Rn)0, 則(PC)+rel PC; ;若(Rn) = 0, 則結束循環(huán), 順序執(zhí)行CPU執(zhí)行過程(Rn)1 Rn(Rn)0?(PC)+rel PC下一條指令目標地址YN(PC)+2 PC(Rn)1 Rn(Rn)0?下一條指令LABELYN用法:DJNZ R

溫馨提示

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

最新文檔

評論

0/150

提交評論