第3章80C51的匯編語言與程序設計_第1頁
第3章80C51的匯編語言與程序設計_第2頁
第3章80C51的匯編語言與程序設計_第3頁
第3章80C51的匯編語言與程序設計_第4頁
第3章80C51的匯編語言與程序設計_第5頁
已閱讀5頁,還剩69頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、2022-4-161第第3 3章章 80C5180C51的指令系統(tǒng)的指令系統(tǒng)匯編語言概述匯編語言概述3.180C51的的指令系統(tǒng)指令系統(tǒng)3.2數(shù)據(jù)傳送數(shù)據(jù)傳送指令指令 (29條)條)算數(shù)運算算數(shù)運算指令指令 (24條)條)邏輯運算邏輯運算與與循環(huán)循環(huán)類指令(類指令(24條)條)控制轉移控制轉移類指令類指令 (17條)條)位操作位操作類指令類指令 (17條)條)偽操作類指令偽操作類指令80C51匯編語言的編程方法匯編語言的編程方法3.32022-4-1623.1 匯編語言概述匯編語言概述3.1.1 3.1.1 機器指令的字節(jié)編碼形式機器指令的字節(jié)編碼形式 單字節(jié)指令(單字節(jié)指令(4949條)條)

2、機器指令機器指令:計算機能直接識別和執(zhí)行的指令。由操作碼和操:計算機能直接識別和執(zhí)行的指令。由操作碼和操作數(shù)組成。操作碼規(guī)定指令執(zhí)行的操作功能,操作數(shù)是指參作數(shù)組成。操作碼規(guī)定指令執(zhí)行的操作功能,操作數(shù)是指參與操作的數(shù)據(jù)。與操作的數(shù)據(jù)。 機器指令的字節(jié)編碼形式就是指機器指令以什么樣的二進機器指令的字節(jié)編碼形式就是指機器指令以什么樣的二進制碼形式存儲在制碼形式存儲在ROMROM中。中。 雙字節(jié)指令(雙字節(jié)指令(4545條)條) 三字節(jié)指令(三字節(jié)指令(1717條)條)2022-4-163 8 8位編碼僅為操作碼位編碼僅為操作碼 單字節(jié)指令(單字節(jié)指令(4949條)條)位號位號7 6 5 4 3

3、2 1 0字節(jié)字節(jié)opcode如:如:INC A INC A 編碼為:編碼為:0 0 0 0 0 1 0 0即:即:04H04H 8 8位編碼含操作碼和寄存器編碼位編碼含操作碼和寄存器編碼位號位號7 6 5 4 3 2 1 0 字節(jié)字節(jié)opcoder r r如:如:MOV AMOV A,R0 R0 編碼為編碼為:1 1 1 0 1 0 0 0即:即:E8HE8H2022-4-164 雙字節(jié)指令(雙字節(jié)指令(4545條)條)位號位號7 6 5 4 3 2 1 0字節(jié)字節(jié)opcodedata或或direct 三字節(jié)指令(三字節(jié)指令(1717條)條)位號位號7 6 5 4 3 2 1 0字節(jié)字節(jié)op

4、codedata或或directdata或或direct如:如:MOV AMOV A,#50H #50H 編碼為編碼為:0 1 1 1 0 1 0 00 1 0 1 0 0 0 0即:即:74H74H 50H 50H如:如:MOV 20HMOV 20H,#50H #50H 編碼為編碼為:0 1 1 1 0 1 0 10 0 1 0 0 0 0 00 1 0 1 0 0 0 0即:即:75H75H 20H 20H 50H 50H2022-4-165注意:注意:操作碼不能缺少,表示指令碼的功能操作碼不能缺少,表示指令碼的功能操作數(shù)個數(shù)可為:操作數(shù)個數(shù)可為:1 1、2 2、3 3個個2 2個操作數(shù)的

5、指令,目的操作數(shù)在左邊個操作數(shù)的指令,目的操作數(shù)在左邊格式中的標點符號都是英文符號格式中的標點符號都是英文符號一般格式一般格式3.1.2 3.1.2 符號指令的書寫格式符號指令的書寫格式標號: 操作碼操作碼 操作數(shù)1, 操作數(shù)2, 操作數(shù)3, ;注釋2022-4-166非數(shù)字字符開頭,后跟字母、數(shù)字、非數(shù)字字符開頭,后跟字母、數(shù)字、“- -”、“?”等等不能用已定義的保留字(指令助記符、偽指令等)不能用已定義的保留字(指令助記符、偽指令等)后跟英文冒號后跟英文冒號“: :” 標號(即符號地址)標號(即符號地址)數(shù)據(jù):二進制(數(shù)據(jù):二進制(B B) 十進制(十進制(D D或省略或省略D D) 十

6、六進制(十六進制(H H),注意),注意A AFF開頭時要加開頭時要加“ “0 0” ” ASCII ASCII碼,如碼,如 A A,12451245 操作數(shù)操作數(shù) 注釋注釋英文分號英文分號“; ;”開頭開頭2022-4-167 指令中出現(xiàn)的描述符號的含義指令中出現(xiàn)的描述符號的含義RnRn(n=0n=07 7)- -當前工作寄存器組中的寄存器當前工作寄存器組中的寄存器R0R0R7R7之一之一v RiRi(i=0,1i=0,1)- -當前工作寄存器組中的寄存器當前工作寄存器組中的寄存器R0R0或或R1R1v - -間址寄存器前綴,表示后面寄存器中數(shù)據(jù)為地址間址寄存器前綴,表示后面寄存器中數(shù)據(jù)為地

7、址v #data -8#data -8位立即數(shù)位立即數(shù)v #data16-16#data16-16位立即數(shù)位立即數(shù)v direct-direct-片內低片內低128128個個RAMRAM單元地址及單元地址及SFRSFR名稱名稱v addr11-addr11-表示表示2KB2KB范圍內范圍內1111位目的地址位目的地址v addr16-addr16-表示表示64KB64KB范圍內范圍內1616位目的地址位目的地址v rel-8rel-8位地址偏移量,范圍:位地址偏移量,范圍:128128127127v bit-bit-片內片內RAMRAM位地址、位地址、SFRSFR的位地址或名稱的位地址或名稱v

8、 $ -$ -當前指令的首地址當前指令的首地址v ()-表示表示 地址單元或寄存器中的內容地址單元或寄存器中的內容v / -/ -位操作數(shù)的取反操作前綴位操作數(shù)的取反操作前綴2022-4-16880C5180C51單片機有單片機有7 7種種尋址方式尋址方式尋址方式:尋找尋址方式:尋找操作數(shù)操作數(shù)操作所在的位置(地址),把操作操作所在的位置(地址),把操作數(shù)取出來的方法。數(shù)取出來的方法。1、寄存器尋址、寄存器尋址2、直接尋址、直接尋址3、寄存器間接尋址、寄存器間接尋址4、立即尋址、立即尋址5、相對尋址、相對尋址 6、變址尋址、變址尋址7、位尋址、位尋址3.1.2 80C513.1.2 80C51

9、的尋址方式的尋址方式2022-4-1691 1 寄存器尋址寄存器尋址操作數(shù)存放在工作寄存器中,指令中直接給出工操作數(shù)存放在工作寄存器中,指令中直接給出工作寄存器名稱的尋址方式。作寄存器名稱的尋址方式。操作數(shù)表示符號操作數(shù)表示符號 R0R0、R1R1、R7R7【例例】若(若(R0)=30H, 執(zhí)行MOV A,R0后,(A)=?2022-4-16102 2 直接尋址直接尋址在這種尋址方式中,操作數(shù)項給出的是參加運算在這種尋址方式中,操作數(shù)項給出的是參加運算的操作數(shù)的地址。的操作數(shù)的地址。操作數(shù)表示符號操作數(shù)表示符號 directdirect【例例】若(若(50H50H)=3AH =3AH , 執(zhí)行

10、MOV A,50H后,(A)=?2022-4-16113 3 立即尋址立即尋址指令碼中直接給出操作數(shù)的尋址方式。指令碼中直接給出操作數(shù)的尋址方式。立即數(shù)前必須加立即數(shù)前必須加“# #”標記。指令中的立即數(shù)有標記。指令中的立即數(shù)有8 8位立即數(shù)和位立即數(shù)和1616位立即數(shù)。位立即數(shù)。注意區(qū)別這個指令:MOV A, 50H通用符號通用符號: :#data (8位),位),#data16( (16位)位)【例例】執(zhí)行指令執(zhí)行指令 MOV AMOV A,#50H#50H和和MOV DPTRMOV DPTR,#3050H #3050H ,A A值值分別是多少?分別是多少? 小結:立即數(shù)與地址的區(qū)別是什么

11、?2022-4-16124 4 寄存器間接尋址寄存器間接尋址在這種尋址方式中,操作數(shù)項中的工作寄存器中存放的不是真正在這種尋址方式中,操作數(shù)項中的工作寄存器中存放的不是真正的數(shù)據(jù),而是的數(shù)據(jù),而是操作數(shù)的地址操作數(shù)的地址。間接尋址要在工作寄存器前加。間接尋址要在工作寄存器前加 表示間表示間址操作。址操作。符號符號 R0和和R1【例例】若(若(R0)=30H,(30H)=5AH 執(zhí)行MOV A,R0后,(A)=? 【例例】若(若(R1)=4CH,(A)=26H 執(zhí)行MOV R1,A后,(R1)=?,(4CH)=?2022-4-16135 5 變址尋址變址尋址(基址寄存器變址寄存器的間接尋址)【例

12、例】(A A)= 05H= 05H;(DPTRDPTR)= 2400H= 2400H 執(zhí)行執(zhí)行MOVC A,A+DPTRMOVC A,A+DPTR后后結果:(結果:(A A)= =? 以某個基址寄存器的內容為基礎,在這個基礎上再加上地址偏移量,形成真正的操作數(shù)地址?;芳拇嫫髦荒苁荄PTR或PC,變址寄存器只能是累加器A。采用變址尋址的指令有兩條:MOVC A, A+DPTR (最常用) MOVC A, A+PC2022-4-16146 6 相對尋址相對尋址相對尋址主要針對將程序轉移到相對地址的跳轉指令。相對尋址主要針對將程序轉移到相對地址的跳轉指令。以以當前當前PCPC值值作為基址,以作為基

13、址,以relrel作為變址,兩者之作為變址,兩者之和作為新的地址。和作為新的地址?!纠咳羧鬝JMP 75HSJMP 75H存放在存放在1000H1000H地址中,執(zhí)行指令地址中,執(zhí)行指令SJMP 75HSJMP 75H后,后,PCPC值是多少?值是多少? 通過查詢指令表,指令通過查詢指令表,指令SJMP 75HSJMP 75H的二進制碼為的二進制碼為80H,75H80H,75H,為兩字節(jié)指令,因此新的為兩字節(jié)指令,因此新的PCPC值為值為1000H+2H+75H=1077H1000H+2H+75H=1077H2022-4-16157 7 位尋址位尋址【例例】位地址位地址00H00H內容為內

14、容為1 1,MOV CMOV C,00H 00H 執(zhí)行后,位地址執(zhí)行后,位地址PSW.7PSW.7的內容為的內容為1 1。 對位地址中的內容進行位操作的尋址方式。注意:與MOV A,00H的區(qū)別。2022-4-1616分類分類數(shù)據(jù)傳送類指令數(shù)據(jù)傳送類指令 29數(shù)學運算類指令數(shù)學運算類指令 24邏輯運算類指令邏輯運算類指令 24控制轉移類指令控制轉移類指令 1717位操作指令位操作指令 1717共有共有111111條匯編指令條匯編指令3.2 8051單片機指令系統(tǒng)單片機指令系統(tǒng)2022-4-1617數(shù)據(jù)傳送類指令數(shù)據(jù)傳送類指令 2929條條2022-4-1618數(shù)學運算類指令數(shù)學運算類指令 24

15、24條條2022-4-1619邏輯運算類指令邏輯運算類指令 2424條條2022-4-1620控制轉移類指令控制轉移類指令 1717條條2022-4-1621位操作指令位操作指令 1717條條2022-4-1622經常使用的指令經常使用的指令 2525條條2022-4-1623主要指令精講主要指令精講 傳送類指令有兩大類傳送類指令有兩大類 一般傳送一般傳送 MOV MOV (最重要的指令)(最重要的指令) 特殊傳送,如:特殊傳送,如: MOVC MOVC (較為重要的指令)(較為重要的指令) MOVX MOVX PUSH PUSH、POPPOP XCH XCH、XCHDXCHD SWAP SW

16、AP 3.2.1 3.2.1 數(shù)據(jù)傳送類指令(數(shù)據(jù)傳送類指令(2929條)條)2022-4-1624數(shù)據(jù)傳送類指令數(shù)據(jù)傳送類指令 2929條條2022-4-1625一般傳送指令通用格式: MOV 目的操作數(shù),源操作數(shù)含義:將 源操作數(shù) 傳送到 目的操作數(shù) 中。類似于C語言的賦值語句。AARnRnMOV directdirectRiRi#data,MOV DPTR,#data16; DPTR data16一般傳送指令一般傳送指令注意:工作寄存器不能同時出現(xiàn)在源操作數(shù)和目的操作數(shù)中1616位傳送指令位傳送指令2022-4-1626【例3-13】執(zhí)行指令 MOV DPTR,#1234H 后 (DPT

17、R)=?,(DPH)=?,(DPL)=?【例例3-103-10】若若(R1)= 20H,(20H)= 55H。執(zhí)行指令 MOV A,R1 后,(A)= ?。【例3-9】執(zhí)行指令 MOV R6,#50H 后,(R6)= ?【例3-11】若(R1)=50H,(50H)=18H,執(zhí)行指令 MOV 40H,R1 后,(40H)=?【例3-12】若(R1)=30H,(A)=20H,執(zhí)行指令 MOV R1,A 后,(30H)=? 思考:將R5中數(shù)送到R4中,如何處理?2022-4-16273.3.2 3.3.2 特殊傳送指令特殊傳送指令 以以DPTRDPTR內容為基址內容為基址(較重要)(較重要)讀讀RO

18、MROM中數(shù)據(jù),必須使用指令中數(shù)據(jù),必須使用指令MOVCMOVCMOVC AMOVC A,A+DPTRA+DPTR;A A (A A)+ +(DPTRDPTR) 以以PCPC內容為基址內容為基址MOVC AMOVC A,A+PC A+PC ;A A (A A)+ +(PCPC)由于由于ROMROM只能讀不能寫,因此只能讀不能寫,因此ROMROM中的數(shù)據(jù)傳送都是單向的。中的數(shù)據(jù)傳送都是單向的。 【例例3-143-14】若若(DPTR)= 3000H,(A)= 20H;ROM中的(3020H)=78H, (3021H)=26H,執(zhí)行指令 MOVC A,A+DPTR 后,(A)= ??!纠?-15

19、3-15】若若(DPTR)= 3016H,(A)= 25H;ROM中的(303BH)=22H, (3041H)=35H,執(zhí)行指令 MOVC A,A+DPTR 后,(A)= ?。2022-4-1628 讀讀片外片外RAMRAM讀寫片外讀寫片外RAMRAM數(shù)據(jù)的指令數(shù)據(jù)的指令MOVXMOVX片外片外RAMRAM中數(shù)據(jù)傳送都是通過中數(shù)據(jù)傳送都是通過間接尋址間接尋址的方式來實現(xiàn)的的方式來實現(xiàn)的MOVX AMOVX A,DPTR DPTR ;A A (DPTRDPTR)MOVX AMOVX A,Ri Ri ;A A (RiRi) 寫寫片外片外RAMRAMMOVX DPTRMOVX DPTR,A A ;(

20、;(DPTRDPTR)A AMOVX RiMOVX Ri,A A ;(;(RiRi)A A2022-4-1629注意:注意:(1 1)地址寄存器只能使用)地址寄存器只能使用DPTRDPTR和和RiRi,其中,其中DPTRDPTR是是16 16 位,而位,而RiRi是是8 8位的;位的;(2 2)與片外)與片外RAMRAM傳送數(shù)據(jù)只能通過累加器傳送數(shù)據(jù)只能通過累加器A A來實現(xiàn);來實現(xiàn);(3 3)與片外)與片外RAMRAM傳送數(shù)據(jù)只能使用傳送數(shù)據(jù)只能使用MOVXMOVX指令。指令。【例例3-153-15】若若(DPTR)= 3000H,(3000H)= 20H;執(zhí)行指令MOVX A,DPTR 后

21、,(A)= ?。思考:MOV、MOVC、MOVX指令的區(qū)別?2022-4-1630 入入棧指令棧指令PUSHPUSH堆棧操作指令堆棧操作指令PUSHPUSH和和POPPOP堆棧堆棧是一片存儲區(qū),遵循是一片存儲區(qū),遵循“后進先出后進先出”原則,棧頂由原則,棧頂由SPSP指指示。主要用于系統(tǒng)發(fā)生中斷時保存中斷現(xiàn)場信息。示。主要用于系統(tǒng)發(fā)生中斷時保存中斷現(xiàn)場信息。PUSH direct PUSH direct ;SPSP(SPSP)1 1,(,(SPSP)(directdirect) 出出棧指令棧指令POPPOPPOP direct POP direct ;(;(directdirect)(SPSP

22、),),SP SP (SPSP)1 1 2022-4-1631(40H)=23H,(50H)=45H MOV SP,#6FHPUSH 40HPUSH 50HPOP 40HPOP 50H;(SP)=6FH;(SP)=70H,(70H)=(40H)= 23H結論:地址40H和50H中數(shù)據(jù)交換,這種情況一般不允許。;(SP)=71H,(71H)=(50H)= 45H;(40H)=(71H)=45H,(SP)= 70H;(50H)=(70H)=23H,(SP)= 6FH2022-4-1632(40H)=23H,(50H)=45H MOV SP,#6FHPUSH 40HPUSH 50HPOP 50HPO

23、P 40H;(SP)=6FH;(SP)=70H,(70H)=(40H)= 23H結論:地址40H和50H中數(shù)據(jù)入棧前和出棧后數(shù)據(jù)保持 一致,遵循“先進后出”的原則。這是正常使用。;(SP)=71H,(71H)=(50H)= 45H;(40H)=(70H)=23H,(SP)= 6FH;(50H)=(71H)=45H,(SP)= 70H2022-4-1633 字節(jié)字節(jié)交換指令交換指令XCHXCH數(shù)據(jù)交換指令數(shù)據(jù)交換指令XCHXCH、XCHDXCHD和和SWAPSWAP數(shù)據(jù)交換屬于同時進行的雙向傳送數(shù)據(jù)交換屬于同時進行的雙向傳送 )(;)(;)(;,RiA RidirectA direct RnA

24、Rn A XCH【例例3-203-20】若(若(R0)=80H,(A)=20H。執(zhí)行指令 XCH A,R0 后,(A)=?,(R0)=?。 2022-4-1634 半字節(jié)半字節(jié)交換指令交換指令XCHDXCHD【例例3-213-21】若(若(R0R0)=30H=30H,(,(30H30H)=67H=67H, (A A)=20H=20H。執(zhí)。執(zhí)行指令行指令XCHD AXCHD A,R0 R0 指令后,(指令后,(A A)=?=?,(,(30H30H)=?=? )();()()();(,ACC.0ACC.3ACC.4ACC.7 A SWAPACC.0ACC.30 .Ri3 .Ri Ri A XCHD

25、XCHDXCHD是間址操作數(shù)的低半字節(jié)與是間址操作數(shù)的低半字節(jié)與A A的低半字節(jié)互換。的低半字節(jié)互換。SWAPSWAP是累加器的高低是累加器的高低4 4位互換位互換【例例3-223-22】若(若(A A)30H30H,執(zhí)行指令,執(zhí)行指令SWAP ASWAP A后,(后,(A A)=?=?。 2022-4-16353.2.2 3.2.2 算數(shù)運算類指令(算數(shù)運算類指令(2424條)條)算數(shù)算數(shù)運算結果運算結果要要影響影響PSWPSW中標志位中標志位 CYCY為為1 1,無符號數(shù)無符號數(shù)(字節(jié))加減發(fā)生(字節(jié))加減發(fā)生進位進位或或借位借位 OVOV為為1 1,有符號數(shù)有符號數(shù)(字節(jié))加減發(fā)生(字節(jié)

26、)加減發(fā)生溢出溢出錯誤錯誤 ACAC為為1 1,低半字節(jié)出現(xiàn)進位或借位低半字節(jié)出現(xiàn)進位或借位 P P為為1 1,存于累加器,存于累加器A A中操作結果的中操作結果的“1 1”的個數(shù)的個數(shù)為為奇數(shù)奇數(shù) 標志位意義標志位意義2022-4-1636算數(shù)運算影響標志位示例算數(shù)運算影響標志位示例【例例】有有2 2個參與相加的機器數(shù),一個是個參與相加的機器數(shù),一個是84H84H,另一個是,另一個是8DH8DH。試分析運算過程及其對狀態(tài)標志的影響。試分析運算過程及其對狀態(tài)標志的影響。問題問題:CYCY為?;為?;ACAC為?;為?;OVOV為?;為?;P P為?為? 結果結果:CYCY為為1 1;ACAC為

27、為1 1 ;OVOV為為1 1 ;P P為為0 0 OV = D7D6OV = D7D62022-4-1637數(shù)學運算類指令數(shù)學運算類指令 2424條條2022-4-1638不帶進位加法不帶進位加法ADDADD、帶進位加法、帶進位加法ADDCADDC、帶借位減法、帶借位減法SUBBSUBBRnADDdirectADDC A RiSUBB#data,加加1 1、減、減1 1指令指令AR nIN C dirD PectD EC RTiR注意:沒有DEC DPTR指令。思考:DPTR能不能實現(xiàn)自減呢?2022-4-1639乘法和除法指令乘法和除法指令MUL AB MUL AB ;B B中為積的中為積

28、的高高8 8位位,A A中為積的中為積的低低8 8位位 ;CYCY總是被清總是被清0 0,OV=1OV=1表示積大于表示積大于FFHFFH【例例3-283-28】若(若(A A)= 50H= 50H,(,(B B)=A0H=A0H,執(zhí)行指令,執(zhí)行指令MUL ABMUL AB后,后,(A)=00H, (B)=32H, (OV)=1(A)=00H, (B)=32H, (OV)=1。DIV AB DIV AB ;A A中為商的中為商的整數(shù)整數(shù)部分,部分,B B中為中為余數(shù)余數(shù) ;CYCY總是被清總是被清0 0;OV=1OV=1表示除數(shù)為表示除數(shù)為0 0 【例例3-293-29】若(若(A A)= F

29、BH(251)= FBH(251),(,(B B)=12H(18)=12H(18),執(zhí)行指,執(zhí)行指令令DIV ABDIV AB后,后,(A)=0DH, (B)=11H, (OV)=0(A)=0DH, (B)=11H, (OV)=0。251/18251/181313余余1717,除數(shù)不為,除數(shù)不為0 02022-4-1640十進制調整指令(十進制調整指令(基本不用基本不用)DA A DA A ;調整;調整A A的內容為正確的的內容為正確的BCDBCD碼碼 兩個壓縮的兩個壓縮的BCDBCD碼按二進制相加后,必須經過調整方能碼按二進制相加后,必須經過調整方能得到正確的和。得到正確的和。 當當A A中

30、低中低4 4位出現(xiàn)了非位出現(xiàn)了非BCDBCD碼(碼(1010101011111111)或低)或低4 4位位的進位的進位AC=1AC=1,則應在低,則應在低4 4位加位加6 6調整。調整。 當當A A中高中高4 4位出現(xiàn)了非位出現(xiàn)了非BCDBCD碼(碼(1010101011111111)或高)或高4 4位位的進位的進位CY=1CY=1,則應在高,則應在高4 4位加位加6 6調整。調整。 執(zhí)行十進制調整指令后,執(zhí)行十進制調整指令后,PSWPSW中的中的CYCY表示結果的百位值表示結果的百位值 2022-4-1641【例例3-243-24】若(若(A A)0110 1001B0110 1001B,表

31、示的,表示的BCDBCD碼為碼為 BCD69)(R2R2)0101 1000B0101 1000B,表示的,表示的BCDBCD碼為碼為 BCD58)(,執(zhí)行指令:,執(zhí)行指令: ADD A,R2DA A(A A)0010 0111B0010 0111B,即,即 BCD27)(且(且(CYCY)1 1,即正確的結果為:,即正確的結果為:127127 2022-4-16423.2.3 3.2.3 邏輯運算與循環(huán)移位類指令(邏輯運算與循環(huán)移位類指令(2424條)條)2022-4-16433.2.3 3.2.3 邏輯運算與循環(huán)移位類指令(邏輯運算與循環(huán)移位類指令(2424條)條)邏輯與、邏輯或、邏輯異或

32、邏輯與、邏輯或、邏輯異或 邏輯運算:與、或、異或、清邏輯運算:與、或、異或、清0 0和取反和取反 循環(huán)移位:左、右移,帶進位位左、右移循環(huán)移位:左、右移,帶進位位左、右移ANLAORL direct #dataXRL,R nA N LdirectO R L A R iX R L#data,用的較多2022-4-1644【例例】(A A)=C3H=C3H,(,(R0R0)=55H=55H,執(zhí)行指令,執(zhí)行指令 ORL AORL A,R0 R0 后,(后,(A A)=D7H =D7H 或操作常用于對某些指定位進行或操作常用于對某些指定位進行“置置1 1”, ,同時同時“保留保留”其他位不變其他位不變

33、 【例例】(A A)=C3H=C3H,(,(R0R0)=AAH=AAH,執(zhí)行指令,執(zhí)行指令 XRL AXRL A,R0 R0 后,(后,(A A)=69H =69H 異或操作常用于對某些指定位進行異或操作常用于對某些指定位進行“取反取反”, ,同時同時“保留保留”其他位不變其他位不變 【例例】(A A)=C3H=C3H,(,(R0R0)=AAH=AAH,執(zhí)行指令,執(zhí)行指令 ANL AANL A,R0 R0 后,(后,(A A)=82H =82H 與操作常用于對某些指定位進行與操作常用于對某些指定位進行“清清0 0”, ,同時同時“保留保留”其他位不變其他位不變 2022-4-1645邏輯清邏輯

34、清0 0和取反和取反A0A;A;A CPLCLRCLR ACLR A指令與指令與MOV A,#00HMOV A,#00H功能相同,只是用功能相同,只是用MOVMOV指令時要多占指令時要多占用用1 1字節(jié)空間字節(jié)空間 2022-4-1646716007771600716007771600; (), ()R R; (), (), ()R R C A ;(),()R L;(),(),()R LCAAAAC YAAAAC YAAAAC YAAAAC Y累加器循環(huán)移位累加器循環(huán)移位2022-4-1647【例例3-373-37】若(若(A A)= C5H= C5H,執(zhí)行指令,執(zhí)行指令RL ARL A后,后

35、,(A)=8BH(A)=8BH?!纠?-383-38】若(若(A A)= 45H= 45H,(CY)=1, (CY)=1, 執(zhí)行指令執(zhí)行指令RLC ARLC A后,后,(A)=8BH,(CY)=0(A)=8BH,(CY)=0?!纠?-393-39】若(若(A A)= C5H= C5H,執(zhí)行指令,執(zhí)行指令RR ARR A后,后,(A)=E2H(A)=E2H。【例例3-403-40】若(若(A A)= C5H= C5H,(CY)=1, (CY)=1, 執(zhí)行指令執(zhí)行指令RRC ARRC A后,后,(A)=E2H,(CY)=1(A)=E2H,(CY)=1。2022-4-16483.2.4 3.2.

36、4 控制轉移類指令(控制轉移類指令(1717條)條)2022-4-16493.2.4 3.2.4 控制轉移類指令(控制轉移類指令(1717條)條)1 1 無條件轉移無條件轉移AJMP addr11 AJMP addr11 ;PC PC (PCPC)+ 2+ 2,PC10PC100 addr11 0 addr11 LJMP addr16 LJMP addr16 ;PC addr16 (PC addr16 (用的最多用的最多)SJMP rel SJMP rel ;PC PC (PCPC)+ 2+ 2,PC PC (PCPC)+ rel + rel AJMP AJMP 標號標號 ;跳轉范圍為;跳轉范

37、圍為2KB2KBLJMP LJMP 標號標號 ;跳轉范圍為;跳轉范圍為64KB64KBSJMP SJMP 標號標號 ;跳轉范圍為;跳轉范圍為256B256B2022-4-1650非數(shù)字字符開頭,后跟字母、數(shù)字、非數(shù)字字符開頭,后跟字母、數(shù)字、“- -”、“?”等等不能用已定義的保留字(指令助記符、偽指令等)不能用已定義的保留字(指令助記符、偽指令等)后跟英文冒號后跟英文冒號“: :” 標號:是指令的符號地址,通常作為轉移指令的操作數(shù)。標號:是指令的符號地址,通常作為轉移指令的操作數(shù)。 LOOP:MOV A,#7FH LOOP:MOV A,#7FH LJMP LOOP LJMP LOOPHERE

38、:LJMP HERE HERE:LJMP HERE 或或 LJMP $LJMP $HERE:AJMP HERE HERE:AJMP HERE 或或 AJMP $AJMP $HERE:SJMP HERE HERE:SJMP HERE 或或 SJMP $SJMP $編程時,經常遇到等待中斷或調試程序,常使程序編程時,經常遇到等待中斷或調試程序,常使程序“原地原地踏步的需要,可使用以下指令:踏步的需要,可使用以下指令: 2022-4-1651比較不等轉移比較不等轉移CJNE Aderect ACJNE Rn#data, Ri, 標號,標號注意:該指令會改變PSW寄存器中的CY值。(1)若目的字節(jié)中內

39、容小于源字節(jié)中內容時,CY置1;(2)若目的字節(jié)中內容大于或等于源字節(jié)中內容時,CY清02 2 條件轉移條件轉移用的較多2022-4-1652減減1 1不為不為0 0轉移轉移RnDJNZ direct,標號累加器判累加器判0 0轉移(基本不用)轉移(基本不用) JZ JNZ標號用的較多2022-4-1653【例例3-483-48】有一段程序如下,該程序執(zhí)行后,有一段程序如下,該程序執(zhí)行后,A A中的值是多少?中的值是多少? MOV R0,#0AH CLR ALOOPX:ADD A,R0 DJNZ R0,LOOPX SJMP $(A A)=10+9+8+7+6+5+4+3+2+1=37H=10+

40、9+8+7+6+5+4+3+2+1=37H,本例中,本例中23H23H地址就地址就是一個軟計數(shù)器是一個軟計數(shù)器思考:能否有其他方法編寫這段程序?55/16=3 755/16=3 72022-4-1654 MOV R0,#10 CLR ALOOPX:ADD A,R0 DEC R0 CJNE R0,#0,LOOPX SJMP $2022-4-16553 3 子程序調用與返回子程序調用與返回調用指令調用指令ACALL LCALL標號返回指令返回指令RETRETIRETRET指令的功能是從堆棧中彈出調用指令壓入堆棧保護指令的功能是從堆棧中彈出調用指令壓入堆棧保護的返回地址(又稱為斷點)。的返回地址(又

41、稱為斷點)。RETIRETI專用于中斷服務程專用于中斷服務程序返回,它具有清除內部相應的中斷狀態(tài)觸發(fā)器(以序返回,它具有清除內部相應的中斷狀態(tài)觸發(fā)器(以保證正確的中斷邏輯)的功能。保證正確的中斷邏輯)的功能。 普通子程序返回指令中斷子程序返回指令2022-4-16564 4 空操作空操作NOP NOP ;PC PC (PCPC)+ 1+ 1,占占1 1個周期個周期、一個字節(jié)一個字節(jié) 這條指令不產生任何功能性作用,在執(zhí)行時間上要消耗這條指令不產生任何功能性作用,在執(zhí)行時間上要消耗1 1個機器周期,因此主要個機器周期,因此主要用于較短暫精確時間延時用于較短暫精確時間延時。2022-4-1657延時

42、子程序示例延時子程序示例Delay:MOV R4,#249Delay:MOV R4,#249 ;1;1個機器周期個機器周期DL2:DL2:NOP NOP ;1;1個機器周期個機器周期NOPNOP;1;1個機器周期個機器周期DJNZ R4,DL2DJNZ R4,DL2 ;2;2個機器周期個機器周期RETRET;2;2個機器周期個機器周期【例例】若晶振頻率為若晶振頻率為12MHz12MHz,試計算下述延時子程序延時的,試計算下述延時子程序延時的時間。時間。延時的時間為:(1*1+1*249+1*249+2*249+2*1)us=999us思考:若延時時間再長些,比如10ms,如何處理?1次249次

43、249次249次1次2022-4-1658嵌套嵌套延時子程序示例延時子程序示例Delay:MOV R5,#10Delay:MOV R5,#10;1;1個機器周期個機器周期DL1:DL1:MOV R4,#249MOV R4,#249 ;1;1個機器周期個機器周期DL2:DL2:NOP NOP ;1;1個機器周期個機器周期NOP NOP ;1;1個機器周期個機器周期DJNZ R4,DL2DJNZ R4,DL2 ;2;2個機器周期個機器周期DJNZ R5,DL1DJNZ R5,DL1 ;2;2個機器周期個機器周期RETRET;2;2個機器周期個機器周期延時的時間為:(1+1*10+4*2490+2*

44、10+2*1)us=9993us, 非常接近10ms1次10次249*10次249*10次249*10次10次1次2022-4-16593.2.5 3.2.5 位操作類指令(位操作類指令(1717條)條)位操作是以位為單位進行的各種操作。位操作指位操作是以位為單位進行的各種操作。位操作指令中的位地址有令中的位地址有4 4種表示形式:種表示形式: 直接地址直接地址 (如,(如,0D5H0D5H);); 點操作符點操作符 (如,(如,0D0H.40D0H.4、PSW.4PSW.4等);等); 位名稱位名稱 (如,(如,RS1RS1);); 偽指令定義(如,偽指令定義(如,MYFLAG BIT F0

45、MYFLAG BIT F0)。)。以上幾種形式表示的都是以上幾種形式表示的都是PSWPSW中的中的位位5 5。位操作指令中,位累加器要用位操作指令中,位累加器要用“C C”表示。表示。位累加器相當于字節(jié)操作時的累加器位累加器相當于字節(jié)操作時的累加器A A。2022-4-16601 1 位傳送(用的很少)位傳送(用的很少)MOV bit,C ;bit(CY) MOV C ,bit ;CY (bit) 2 2 位狀態(tài)設置(位狀態(tài)設置(用的較多用的較多)位清位清0 0 0bit bit 0CY C CLR;位置位位置位 1bit bit 1CY C SETB;2022-4-16613 3 位邏輯運算

46、(用的很少)位邏輯運算(用的很少)位邏輯與位邏輯與位邏輯或位邏輯或 bitCYCY /bit bitCYCY bit C ANL)()(;)()(;, bitCYCY /bit bitCYCY bit C ORL)()(;)()(;,位取反位取反 bitbit bit CYCY C CPL)(;)(;2022-4-1662判判CYCY轉移(注意與轉移(注意與JZJZ和和JNZJNZ的區(qū)別)的區(qū)別) (用的很少)(用的很少)判判bitbit轉移轉移4 4 位控制轉移位控制轉移JC JNC標號; ;若(若(CYCY)=1,PC=1,PC(PCPC)+2+rel,+2+rel,否則順次執(zhí)行。否則順次

47、執(zhí)行。; ;若(若(CYCY)=0;PC=0;PC(PCPC)+2+rel;+2+rel;否則順次執(zhí)行。否則順次執(zhí)行。JBJNBJBC bit , 標號; ;(bitbit)=1,PC=1,PC(PCPC)+3+rel,+3+rel,否則順次執(zhí)行。否則順次執(zhí)行。; ;(bitbit)=1,PC=1,PC(PCPC)+3+rel,bit0,+3+rel,bit0,否則順次執(zhí)行否則順次執(zhí)行; ;(bitbit)=0,PC=0,PC(PCPC)+3+rel,+3+rel,否則順次執(zhí)行否則順次執(zhí)行 用的較多2022-4-1663偽指令,也叫匯編命令。僅對匯編過程進行指示作用偽指令,也叫匯編命令。僅對匯

48、編過程進行指示作用偽指令無對應的單片機可執(zhí)行代碼偽指令無對應的單片機可執(zhí)行代碼 1 1、起始地址設定偽指令、起始地址設定偽指令ORGORGORG ORG 表達式表達式表達式通常為十六進制地址,例:表達式通常為十六進制地址,例: ORG 8000HSTART:MOV A,#30H ORGORG可多次使用,但地址值的順序要由小到大可多次使用,但地址值的順序要由小到大 2 2、結束匯編偽指令、結束匯編偽指令ENDENDEND該偽指令位于源程序的該偽指令位于源程序的最后一行最后一行。3.2.6 3.2.6 偽操作類指令偽操作類指令每次都用每次都用2022-4-16643 3、定義字節(jié)數(shù)據(jù)表偽指令、定義

49、字節(jié)數(shù)據(jù)表偽指令DBDB1000H 標號:標號: DB DB 字節(jié)數(shù)據(jù)表字節(jié)數(shù)據(jù)表如:如:ORG 1000HORG 1000HDB -2,-4,-6,8,10,18DB -2,-4,-6,8,10,18FEH FCHFAH08H0AH12H1001H用的較多4 4、定義位地址為符號名偽指令、定義位地址為符號名偽指令BITBIT符號名符號名 BIT BIT 位地址表達式位地址表達式如:如:ST BIT P1.0 ;ST BIT P1.0 ;將將P1.0P1.0的位地址賦給符號名的位地址賦給符號名STSTCF BIT 0D7H ;CF BIT 0D7H ;將位地址為將位地址為D7HD7H的位定義為

50、符號名的位定義為符號名初學用的較少2022-4-16655 5、定義常值為符號名偽指令、定義常值為符號名偽指令EQUEQU符號名符號名 EQU EQU 常值表達式常值表達式 LENLEN EQUEQU 10 10 SUMSUM EQUEQU 21H 21HBLOCKBLOCK EQU EQU 22H 22H CLR A CLR A MOV R7, MOV R7,LENLEN MOV R0, MOV R0,BLOCKBLOCK LOOP:ADD A,R0 LOOP:ADD A,R0 INC R0 INC R0 DJNZ R7,LOOP DJNZ R7,LOOP MOV MOV SUMSUM,A ,A 符號名為:符號名為:v地址地址v常數(shù)常數(shù)v段名段名v字符串字符串v寄存器名寄存器名v位名位名初學用的較少2022-4-1666 單片機應用系統(tǒng)由單片機應用系統(tǒng)由硬件系統(tǒng)硬件系統(tǒng)和和軟件程序軟件程序構成構成 匯編語言匯編語言 高級語言高級語言 軟件程序設計方法軟件程序設計方法v匯編語言是用語言直接控制硬件,由硬件間接達匯編語言是用語言直接控制硬件,由硬件間接達到某種控制效果。而到某種控制效果。而C語言是一種比較高級的語語言是

溫馨提示

  • 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

提交評論