匯編語言指令PPT_第1頁
匯編語言指令PPT_第2頁
匯編語言指令PPT_第3頁
匯編語言指令PPT_第4頁
匯編語言指令PPT_第5頁
已閱讀5頁,還剩186頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第三章第三章 指令系統(tǒng)及程序設(shè)計舉例指令系統(tǒng)及程序設(shè)計舉例Exit3.3 3.3 MCS-51指令系統(tǒng)指令系統(tǒng)3.1 3.1 匯編語言匯編語言3.2 3.2 尋址方式尋址方式3.4 3.4 程序設(shè)計舉例程序設(shè)計舉例23.1 3.1 匯編語言匯編語言3.1.1 3.1.1 指令和程序設(shè)計語言指令和程序設(shè)計語言3.1.2 3.1.2 指令格式指令格式BACK33.1.1 3.1.1 指令和程序設(shè)計語言指令和程序設(shè)計語言指令:指令:是是CPU根據(jù)人的意圖來執(zhí)行某種操作的命令。根據(jù)人的意圖來執(zhí)行某種操作的命令。程序設(shè)計語言:程序設(shè)計語言:是實現(xiàn)人機交換信息的基本工具,是實現(xiàn)人機交換信息的基本工具,分為

2、機器語言、匯編語言和高級語言。分為機器語言、匯編語言和高級語言。機器語言:機器語言:用二進制編碼表示每條指令,是計算機用二進制編碼表示每條指令,是計算機能直接識別和執(zhí)行的語言。能直接識別和執(zhí)行的語言。匯編語言:匯編語言:是用助記符、符號和數(shù)字等來表示指令是用助記符、符號和數(shù)字等來表示指令的程序設(shè)計語言。它與機器語言指令是一一對應的。的程序設(shè)計語言。它與機器語言指令是一一對應的。BACK4用機器語言編寫的程序稱為機器語言程序或者指令程序(機器碼程序),因為機器只能直接識別和執(zhí)行這種機器碼程序,所以又稱他為目標程序目標程序。51單片機是8位機,其機器語言以8位二進制碼為單位,稱為1字節(jié)。eg:要做

3、10+20的加法,在51單片機中可用機器碼指令編程:01110100 00001010 把把10放入累加器放入累加器A中中00100100 00010100 A加加20,結(jié)果仍然放在,結(jié)果仍然放在A中中為了便于書寫和記憶,可采用為了便于書寫和記憶,可采用16進制表示指令碼,以上指令可寫進制表示指令碼,以上指令可寫為:為: 74 0AH 24 14H顯然,用機器語言編寫程序,不易記憶,不易差錯、修改,顯然,用機器語言編寫程序,不易記憶,不易差錯、修改,因此為了克服這些,采用匯編語言。,因此為了克服這些,采用匯編語言。 指令的三種表示形式指令的三種表示形式l二進制:l十六進制:l助記符: MCS5

4、1指令系統(tǒng)中共有42種助記符,代表了33種不同的功能。例如MOV是數(shù)據(jù)傳送的助記符。如ADD A, #08H;十六進制形式為2408H.從記憶和理解的角度助記符更有優(yōu)勢。63.1.2 3.1.2 指令格式指令格式MCS-51匯編語言指令格式匯編語言指令格式操作碼操作碼 目的操作數(shù)目的操作數(shù),源操作數(shù),源操作數(shù);注釋;注釋字節(jié)數(shù):指令編譯成機器碼后在中占用的空間。匯編語言指令對應的二進制代碼格式匯編語言指令對應的二進制代碼格式單字節(jié)指令單字節(jié)指令(條)雙字節(jié)指令雙字節(jié)指令(5條)三字節(jié)指令三字節(jié)指令(7條)BACK7單字節(jié)指令單字節(jié)指令491、無操作數(shù):指令碼中隱含著對某一種寄指令碼中隱含著對某

5、一種寄存器的操作存器的操作如:指令如:指令“INC DPTR”的指令代碼格式為:的指令代碼格式為:A3H=1 0 1 0 0 0 1 12、含有操作數(shù)寄存器號:由指令中的由指令中的rrr三三位的不同編碼指定某一寄存器位的不同編碼指定某一寄存器如:指令如:指令“MOV A,Rn”的指令代碼格式的指令代碼格式為:為:1 1 1 0 1 r r r BACK8雙字節(jié)指令雙字節(jié)指令45用一個字節(jié)表示操作碼,另一個字節(jié)表用一個字節(jié)表示操作碼,另一個字節(jié)表示操作數(shù)或操作數(shù)所在的地址。示操作數(shù)或操作數(shù)所在的地址。格式為:格式為:操作碼操作碼立即數(shù)或地址立即數(shù)或地址BACK如:MOV A , #data ;

6、INC direct9三字節(jié)指令三字節(jié)指令16一個字節(jié)操作碼,兩個字節(jié)操作數(shù)。一個字節(jié)操作碼,兩個字節(jié)操作數(shù)。格式為:格式為:操作碼操作碼立即數(shù)或地址立即數(shù)或地址立即數(shù)或地址立即數(shù)或地址BACKMOV DPTR, #data16 MOV direct, #data CJNE A, #data, rel LCALL addr16103.2 3.2 尋址方式尋址方式一、什么是尋址方式:一、什么是尋址方式:如何找到存放操作數(shù)如何找到存放操作數(shù)的地址,把操作數(shù)提取出來的方法。的地址,把操作數(shù)提取出來的方法。二、尋址方式的種類:二、尋址方式的種類:三、尋址空間及符號注釋:三、尋址空間及符號注釋:BACK

7、11二、尋址方式的種類:二、尋址方式的種類:1、寄存器尋址、寄存器尋址2、直接尋址、直接尋址3、立即數(shù)尋址、立即數(shù)尋址4、寄存器間接尋址、寄存器間接尋址 5、變址尋址、變址尋址6、相對尋址、相對尋址 7、位尋址、位尋址BACK121、寄存器尋址、寄存器尋址寄存器尋址:寄存器尋址:由指令指出寄存器組由指令指出寄存器組R0R7中的某一個或其他寄存器中的某一個或其他寄存器(A,B,DPTR等等)的內(nèi)的內(nèi)容作為操作數(shù)。容作為操作數(shù)。例如:例如:MOV A,R0;(R0)A MOV P1,A;(A)P1口 ADD A,R0;(A)+(R0)ABACK132、直接尋址、直接尋址直接尋址方式:直接尋址方式:

8、在指令中直接給出操作數(shù)所在存儲在指令中直接給出操作數(shù)所在存儲單元的地址。指令中操作數(shù)部分是操作數(shù)所在地址。單元的地址。指令中操作數(shù)部分是操作數(shù)所在地址。直接尋址方式可訪問片內(nèi)直接尋址方式可訪問片內(nèi)RAM的的128個單元以及所有個單元以及所有的的SFR。對于。對于SFR,既可以使用它們的地址,也可以,既可以使用它們的地址,也可以使用它們的名字。使用它們的名字。例如:例如:MOV A,3AH;(3A) A MOV A,P1;(P1口口) A 或:或: MOV A,90H; 90H是是P1口的地址口的地址BACK MOV A,52H ;把片內(nèi)RAM字節(jié)地址52H單元的內(nèi)容送累加器A中。MOV 52H

9、,A ;把A的內(nèi)容傳送給片內(nèi)RAM的52H單元中。MOV 50H,60H ;把片內(nèi)RAM字節(jié)地址60H單元的內(nèi)容送到50H單元中。MOV IE,#40H ;把立即數(shù)40H送到中斷允許寄存器IE。IE為專用功能寄存器,其字節(jié)地址為0A8H。該指令等價于MOV 0A8H,#40H。INC 60H ;將地址60H單元中的內(nèi)容自加1。l 圖3.2直接尋址方式示意圖 3 立即數(shù)尋址 立即尋址方式是操作數(shù)包括在指令字節(jié)中,指令操作碼后面字節(jié)的內(nèi)容就是操作數(shù)本身,其數(shù)值由其數(shù)值由程序員在編制程序時指定,以指令字節(jié)的形式存放程序員在編制程序時指定,以指令字節(jié)的形式存放在程序存儲器中在程序存儲器中。立即數(shù)只能作

10、為源操作數(shù),不能當作目的操作數(shù)。用用“#”號表示,以區(qū)別直接地號表示,以區(qū)別直接地址。址。 例如: MOV A,#52H ;A52H MOV DPTR,#5678H ;DPTR5678H 立即尋址示意圖如3.1所示。 l 圖3.1 立即尋址示意圖 由指令指出某一個寄存器的內(nèi)容作為操作數(shù)地址,這種尋址方式稱為寄存器間接尋址。 寄存器間接尋址只能使用寄存器寄存器間接尋址只能使用寄存器R0R0或或RlRl作為地址指針,來尋址內(nèi)部RAM(00HFFH)中的數(shù)據(jù)。寄存器間接寄存器間接尋址也適用于訪問外部尋址也適用于訪問外部64K64K的的RAMRAM,可使用R0R0,RlRl或或DPTRDPTR作為地址

11、指針。寄存器間接尋址用符號“”表示。 例如: MOV R0,#31H ;R031H MOV A, R0 ;A (R0) MOV A ,R1 ;A (R1) 例如:MOV DPTR,#3456H ;DPTR3456H MOVX A,DPTR ;A (DPTR)是把DPTR寄存器所指的那個外部數(shù)據(jù)存儲器(RAM)的內(nèi)容傳送給A,假設(shè)(3456H)=99H,指令運行后(A)=99H。4、寄存器間接尋址、寄存器間接尋址 圖3.3 寄存器間接尋址方式示意圖 20例如:例如:將片內(nèi)RAM 65H單元內(nèi)容47H送A,可執(zhí)行指令“MOV A,R0”。其中R0內(nèi)容為65H。如圖所示:65H47HR0A47H數(shù)據(jù)

12、存儲器數(shù)據(jù)存儲器地址65H以指令中所指定以指令中所指定的的R0內(nèi)容(內(nèi)容(65H)為指針為指針將片內(nèi)將片內(nèi)RAM 65H單元內(nèi)容單元內(nèi)容47H送送ABACK215、變址尋址、變址尋址(基址寄存器基址寄存器+變址寄存器間接尋址變址寄存器間接尋址)變址尋址:變址尋址:以某個寄存器的內(nèi)容為基地址,在這個基地址的基礎(chǔ)上加上地址偏移量形成真形成真正的操作數(shù)地址正的操作數(shù)地址。采用DPTR或PC為基址寄存器,A的內(nèi)容為變址寄存器。兩個寄存器的內(nèi)容作為無符號數(shù)相加形成16位的地址,改地址為操作數(shù)的地址變址尋址只能訪問程序存儲器,訪問范圍為64KB。多用于查表指令。多用于查表指令。僅有僅有3條:條:MOVC

13、A,A + DPTR MOVC A,A + PC JMP DPTR22例如:例如:MOVC A,A+DPTR;(A)+(DPTR)A如圖所示如圖所示1EH0302HROMDPTRAA02F1H11H1EH+DPTR內(nèi)容與內(nèi)容與A的內(nèi)容之的內(nèi)容之和為程序存儲器地址和為程序存儲器地址程序存儲器內(nèi)容送程序存儲器內(nèi)容送ABACK236、相對尋址、相對尋址 相對尋址:相對尋址:是以當前的PC值加上指令中規(guī)定的偏移量rel而形成實際的轉(zhuǎn)移地址。相對尋址只出現(xiàn)在相對轉(zhuǎn)移指令中。相對尋址只出現(xiàn)在相對轉(zhuǎn)移指令中。用于訪問用于訪問ROM當前的PC值是指執(zhí)行完相對指令后的PC值;相對轉(zhuǎn)移指令操作碼所在地址稱為源地址

14、;轉(zhuǎn)移后的地址稱為目的地址。目的地址目的地址=源地址源地址+相對轉(zhuǎn)移指令字節(jié)數(shù)相對轉(zhuǎn)移指令字節(jié)數(shù)+relrel為補碼表示的有符號數(shù),在在-128+127之間。之間。例如:例如:jc rel 原地址原地址1000H,rel=75H 則目的地址則目的地址1077HBACK247、位尋址、位尋址位尋址:位尋址:采用位尋址方式的指令的操作數(shù)是8位二進制數(shù)中的某一位,指令中給出的是位地址。位地址在指令中用bit表示。例如:CLR bit;位地址的兩種表示方法:位地址的兩種表示方法:直接使用位地址,如D3H;直接用寄存器名字加位數(shù),如PSW.3。位尋址區(qū)域:位尋址區(qū)域:片內(nèi)RAM的20H-2FH的16個單

15、元中的128位;字節(jié)地址能被8整除的SFR。BACK MCS-51單片機中設(shè)有獨立的位處理器。位操作指令能對內(nèi)部RAM中的位尋址區(qū)(20H2FH)和某些有位地址的特殊功能寄存器進行位操作。SETB P1.7 ;P1.71CLR 00H ;(00H)0MOV C,57H ;將57H位地址的內(nèi)容傳送到 位C中 MOV ACC.0 ,80H ;把P0口的最低位數(shù)據(jù)送A中的最低位。 ANL C,5FH ;將5FH位狀態(tài)與進位位C相 與,結(jié)果在C中 26三、尋址空間及符號注釋三、尋址空間及符號注釋1、尋址空間:見表、尋址空間:見表3-1。2、符號注釋:、符號注釋:BACK27表表3-1 操作數(shù)尋址方式和

16、有關(guān)空間操作數(shù)尋址方式和有關(guān)空間尋址方式尋址空間立即數(shù)尋址程序存儲器 ROM直接尋址片內(nèi) RAM 低 128B、特殊功能寄存器寄存器尋址工作寄存器 R0-R7、A、B、C、DPTR寄存器間接尋址片內(nèi) RAM 低 128B、片外 RAM變址尋址程序存儲器(A+PC,A+DPTR)相對尋址程序存儲器 256B 范圍(PC+偏移量)位尋址片內(nèi) RAM 的 20H-2FH 字節(jié)地址、部分 SFRBACKR1R0SP28符號注釋符號注釋Rn(n=0-7):當前選中的工作寄存器組:當前選中的工作寄存器組R0-R7。Ri(I=0,1):作為地址指針的兩個工作寄存器:作為地址指針的兩個工作寄存器R0,R1。#

17、data:8位立即數(shù)。位立即數(shù)。#data16:16位立即數(shù)。位立即數(shù)。direct:8位片內(nèi)位片內(nèi)RAM單元(包括單元(包括SFR)的直接地址。)的直接地址。addr11:11位目的地址,用于位目的地址,用于ACALL和和AJMP指令中。指令中。addr16:16位目的地址。用于位目的地址。用于LCALL和和LJMP指令中。指令中。rel:補碼表示的:補碼表示的8位地址偏移量。范圍:位地址偏移量。范圍:-128-+127D。DPTRDPTR數(shù)據(jù)指針,可用作數(shù)據(jù)指針,可用作1616位的地址寄存器。位的地址寄存器。AA累加器累加器BB寄存器,用于寄存器,用于MULMUL和和DIVDIV指令中。指

18、令中。CC進位標志或進位位。進位標志或進位位。BACK29bit:片內(nèi):片內(nèi)RAM或或SFR的直接尋址位地址。的直接尋址位地址。:間接寄存器的符號。:間接寄存器的符號。/:位操作指令中對該位先取反再參與操作,不影響原值。:位操作指令中對該位先取反再參與操作,不影響原值。():中的內(nèi)容。中的內(nèi)容。():指出的地址單元中的內(nèi)容。指出的地址單元中的內(nèi)容。:指令操作流程方向。:指令操作流程方向。3.3 3.3 MCS-51 MCS-51 指令系統(tǒng)指令系統(tǒng)概述:概述:MCS-51MCS-51 指令系統(tǒng)由指令系統(tǒng)由 111111 條指令組成。條指令組成。其中,單字節(jié)指令其中,單字節(jié)指令 4949 條,雙字

19、節(jié)指令條,雙字節(jié)指令 4545 條,條,三字節(jié)指令三字節(jié)指令 1717 條。條。從指令執(zhí)行時間看,單周期指令從指令執(zhí)行時間看,單周期指令 6464 條,雙周期條,雙周期4545 條,只有乘、除指令為條,只有乘、除指令為 4 4 個周期。個周期。BACKMCS-51MCS-51指令系統(tǒng)可分為五大類指令系統(tǒng)可分為五大類1 1 數(shù)據(jù)傳送指令:數(shù)據(jù)傳送指令:2828條條2 2 算術(shù)運算指令:算術(shù)運算指令:2424條條3 3 邏輯運算及移位指令:邏輯運算及移位指令:2525條條4 4 控制轉(zhuǎn)移指令:控制轉(zhuǎn)移指令:1717條條5 5 位操作指令(布爾操作):位操作指令(布爾操作):1717條條Back 3

20、.3.1 3.3.1 數(shù)據(jù)傳送指令數(shù)據(jù)傳送指令(28條) 1.1.以累加器以累加器A A為目的操作數(shù)的指令為目的操作數(shù)的指令 (4(4條條, ,即即4 4種尋址方式種尋址方式) ) 2. 2.以寄存器以寄存器RnRn為目的操作數(shù)的指令(為目的操作數(shù)的指令(3 3條)條) 3.3.以直接地址為目的操作數(shù)的指令(以直接地址為目的操作數(shù)的指令(5 5條)條) 4.4.以間接地址為目的操作數(shù)的指令(以間接地址為目的操作數(shù)的指令(3 3條)條)Back 5.5.十六位數(shù)據(jù)傳送指令十六位數(shù)據(jù)傳送指令(1(1條條) ) 6. 6.查表指令(查表指令(2 2條)條) 7.7.累加器累加器A A與片外與片外RA

21、MRAM傳送指令傳送指令(4(4條條) ) 8.棧操作指令(二條) 9.9.交換指令交換指令(4(4條條) )Back數(shù)據(jù)傳送類指令用到的助記符有:MOV,MOVX,MOVC,XCH,XCHD,PUSH,POP。Back1.1.以累加器以累加器A A為目的操作數(shù)的指令為目的操作數(shù)的指令(4(4條條, ,即即4 4種尋址方式種尋址方式) )匯編指令格式機器碼格式操作注釋MOV A,Rn;1110 1rrr(Rn) 將工作寄存器 Rn(即R0R7)內(nèi)容傳送到累加器A 中MOV A,direct;1110 0101direct(direct) 將直接尋址所得的片內(nèi)RAM 單元內(nèi)容或特殊功能寄存器中的

22、內(nèi)容傳送到累加器A 中MOV A,Ri;1110 011i(Ri) 將間接尋址(Ri 為 R0或 R1)所得的片內(nèi) RAM單元內(nèi)容或特殊功能積存器中的內(nèi)容傳送到累加器A中MOV A,#data;0111 0100data #data 將立即數(shù)傳送到累加器A中例:例: MOV AMOV A,#30H #30H ;(;(A A)=30H=30H MOV A MOV A, 30H 30H ;(;(A A)=11H=11H MOV A MOV A,R1 R1 ;(;(A A)=11H=11H MOV A MOV A,R1 R1 ;(;(A A)=30H=30H 2 2 、以寄存器、以寄存器RnRn為目

23、的操作數(shù)的指令(為目的操作數(shù)的指令(3 3條)條)匯編指令格式 機器碼格式操作注釋MOV Rn,A;1111 1rrr Rn將累加器 A 中內(nèi)容傳送到工作寄存器 Rn(即R0-R7)中MOV Rn,direct;1010 1rrrdirect(direct) Rn將直接尋址所得的片內(nèi) RAM 單元內(nèi)容或特殊功能寄存器中的內(nèi)容傳送到工作寄存器Rn(即R0-R7)中MOV Rn,#data;0111 1rrrdata#data Rn將立即數(shù)傳送到工作寄存器Rn (即R0-R7)中Back 這組指令的功能是把源操作這組指令的功能是把源操作數(shù)所指定的內(nèi)容送到當前工作寄數(shù)所指定的內(nèi)容送到當前工作寄存器組

24、存器組R0R7R0R7中的某個寄存器。中的某個寄存器。源源操作數(shù)有寄存器尋址,操作數(shù)有寄存器尋址,立立即數(shù)尋即數(shù)尋址址和直接尋址和直接尋址三種方式。三種方式。如:(如:(A A)=78H=78H,(,(R5R5)=47H=47H,(,(70H70H)=F2H=F2H,執(zhí)行指令:執(zhí)行指令:MOV R5MOV R5,A A ;(;(A A)R5R5, (R5R5)=78H=78HMOV R5MOV R5,70H 70H ;(;(70H70H)R5R5, (R5R5)=F2H=F2HMOV R5MOV R5,#A3H#A3H; A3HA3HR5R5, (R5R5)=A3H=A3H注意注意,在,在89

25、C5189C51指令系統(tǒng)中沒有指令系統(tǒng)中沒有“MOV RnMOV Rn,Rn”Rn”傳送指令。傳送指令。Back 3 3 、以直接地址為目的操作數(shù)的指令(、以直接地址為目的操作數(shù)的指令(5 5條)條)匯編指令格式 機器碼格式操作注釋MOV direct,A;1111 0101 direct(A) direct將累加器 A 中內(nèi)容傳送到直接地址direct所指出的片內(nèi)存儲單元中。MOV direct,Rn;111 1rrr direct(Rn) direct將工作寄存器Rn(即R0-R7)中內(nèi)容傳送到直接地址 direct所指出的片內(nèi)存儲單元中BackMOV direct, direct; 10

26、00 0101 源direct目的direct(源direct)目的direct將直接地址源direct所指出的片內(nèi)存儲單元中內(nèi)容傳送到直接地址目的 direct 所指出的片內(nèi)存儲單元中MOV direct,Ri;1000 011i direct(Ri) direct將間接尋址 (Ri為R0或R1) 所得的片內(nèi)RAM單元內(nèi)容傳送到直接地址 direct 所指出的片內(nèi)存儲單元中MOV direct,#data;0111 0101 direct data#data direct將立即數(shù)傳送到直接地址 direct 所指出的片內(nèi)存儲單元中 這組指令的功能是把源操作數(shù)所指 定的 內(nèi) 容 送 入由 直接

27、 地 址direct 所指出的片內(nèi)存儲單元中。源操作數(shù)有寄存器尋址,直接尋址,寄存器間接尋址和立即尋址等方式。Back4 4 、以間接地址為目的操作數(shù)的指令(、以間接地址為目的操作數(shù)的指令(3 3條)條)匯編指令格式 機器碼格式操作注釋MOV Ri, A ;1111 011i(A) (Ri)將累加器A 中內(nèi)容傳送到間接尋址(Ri 為 R0或R1)所得的片內(nèi)RAM單元中。MOV Ri, direct;0101 011i direct(direct) (Ri)將直接尋址所得的片內(nèi)RAM 單元內(nèi)容或特殊功能寄存器中的內(nèi)容傳送到間接尋址(Ri 為 R0或R1)所得的片內(nèi)RAM單元中MOV Ri, #d

28、ata ;0111 011Idata#data (Ri)將立即數(shù)傳送到間接尋址(Ri為R0或R1)所得的片內(nèi)RAM單元中BackBackRidirectRn#dataACC圖36 傳送指令在片內(nèi)存儲器的操作功能5 5、 十六位數(shù)據(jù)傳送指令十六位數(shù)據(jù)傳送指令(1(1條條) ) 這條指令的功能是把這條指令的功能是把1616位常數(shù)送入位常數(shù)送入DPTRDPTR。DPTRDPTR由由DPHDPH和和DPLDPL組成。組成。匯編指令格式機器碼格式操作注釋MOV DPTR, #data16;1000 0000高位字節(jié)低位字節(jié)dataH DPHdataL DPL將高 8 位立即數(shù)dataH 送入 DPH,低

29、 8 位立即數(shù)dataL 送入 DPL。Back例例:M MO OV V D DP PT TR R # #1 10 00 00 0H H;(D DP PT TR R)= =1 10 00 00 0H H, (D DP PH H)= =1 10 0H H,(D DP PL L)= =0 00 0H H Back6 6 、查表指令(、查表指令(2 2條)條)匯編指令格式機器碼格式操作注釋MOVC A,A+DPTR;1001 0011先(PC)+1 PC,后(A)+(DPTR) A(遠程查表)MOVC A, A+PC;1000 0011先(PC)+1 PC,后(A)+(PC) A(近程查表)Back

30、基地址寄存器+變址寄存器間接尋址PC+A(程序存儲器0-64K)基地址寄存器+變址寄存 器間接尋址DPTR+A(程序存儲器0-64K)A寄存器圖圖3-7 3-7 程序存貯器傳送(查表)程序存貯器傳送(查表)例: 若:初始 ROM 內(nèi)容 2000H00H2001H01H2002H09H2003H04H2004H06H2005H08H2006HFFH2007H66H2008H45H2009HABH200AH11HH執(zhí)行下面程序段后結(jié)果如何?執(zhí)行下面程序段后結(jié)果如何?MOV DPTR, #2000H MOV DPTR, #2000H ;(;(DPTRDPTR)=2000H=2000HMOV A ,

31、#0AH MOV A , #0AH ;(;(A A)=0AH=0AHMOVC A , A+DPTRMOVC A , A+DPTR;( (A A) )= =(A A) )+ +(DPTRDPTR)= =(200AH200AH)則:則:(A)=(200AH)=11H(A)=(200AH)=11H 1000H74 0D MOV A, #0DH;( A) =0DH1002H83MOVC A, A+PC;( PC) =1002+1=1003H,( A) =( ( A) +( PC) )=(0D+1003)=( 1010H)( A) =01H1003HF8MOV R0, A;( R0) =( A) =01

32、H 所以,最后結(jié)果為:所以,最后結(jié)果為:(A)=01 (R0)=01 (A)=01 (R0)=01 (PC)=1004(PC)=1004Back例例: :機器碼7 7、 累加器累加器A A與片外與片外RAMRAM傳送指令傳送指令(4(4條條) ) 在 8051 指令系統(tǒng)中,CPU 對片外 RAM 的訪問只能用寄存器間接尋址的方式,且僅有四條指令:Back匯編指令格式機器碼格式操作注釋MOVX A,Ri ;1110 001i(Ri) AMOVX A, DPTR ;1110 0000(DPTR) AMOVX Ri, A;1111 001i(A) (Ri)MOVX DPTR, A;1111 0000

33、(A) (DPTR)第第2 2,4 4兩條指令以兩條指令以DPTRDPTR為片外數(shù)據(jù)存儲器為片外數(shù)據(jù)存儲器1616位地址指針,尋址范圍達位地址指針,尋址范圍達64KB64KB。其功能是。其功能是DPTRDPTR所指定的片外數(shù)據(jù)存儲器與累加器所指定的片外數(shù)據(jù)存儲器與累加器A A之間之間傳送數(shù)據(jù)。傳送數(shù)據(jù)。第第1 1,3 3兩條指令是用兩條指令是用R0R0或或R1R1作低作低8 8位地址指位地址指針,由針,由P0P0口送出,尋址范圍是口送出,尋址范圍是256256字節(jié)。這兩字節(jié)。這兩條指令完成以條指令完成以R0R0或或R1R1為地址指針的片外數(shù)據(jù)存為地址指針的片外數(shù)據(jù)存儲器與累加器儲器與累加器A

34、A之間的傳送數(shù)據(jù)。之間的傳送數(shù)據(jù)。上述四條指令的操作如圖上述四條指令的操作如圖3-83-8所示所示: :寄存器寄存器間接尋址 寄存器間接尋址 R1.R0DP(外RAM0-255) ( 外RAM0-64K)圖 3-8 外部數(shù)據(jù)存儲器傳送操作例例: : 若:片內(nèi)若:片內(nèi)RAM (30H)=01HRAM (30H)=01H,片外,片外RAM RAM (30H)=02H(30H)=02H,執(zhí)行下面程序段后的結(jié)果如何,執(zhí)行下面程序段后的結(jié)果如何。MOV R1, #30H;(R1)=30H MOVX A, R1 ;(A)=02H MOV R0, A ;(R0)=(A)=02H MOV A,R1 ; (A)

35、=(R1)=01H MOV R2, A ;(R2)=(A)=01HBack 8 、棧操作指令(二條)堆棧:先進后出,后進先出。匯編指令格式機器碼格式操作注釋PUSH direct;1100 0000 direct先(SP)+1 SP,后(direct) (SP)PUSH(入棧)指令PUSH direct;1101 0000direct先(SP) direct, 后(SP)1 SPPOP(出棧)指令Back堆棧的用途主要是調(diào)用子程序時暫存斷點地址和保護(恢復)現(xiàn)場數(shù)據(jù)。堆棧的用途主要是調(diào)用子程序時暫存斷點地址和保護(恢復)現(xiàn)場數(shù)據(jù)。堆棧是一種存儲部件,即數(shù)據(jù)的寫入跟讀出不需要提供地址,而是根據(jù)堆

36、棧是一種存儲部件,即數(shù)據(jù)的寫入跟讀出不需要提供地址,而是根據(jù)寫入的順序決定讀出的順序。寫入的順序決定讀出的順序。 例:例: MOV SP, #18H; (SP)=18H MOV A, #30H; (A)=30H MOV DPTR, #1000H; (DPTR)=1000H PUSH A; (SP)=19H(19H)=30H PUSH DPH; (SP)=1AH(1AH)=10H PUSH DPL; (SP)=1BH(1BH)=00H繼續(xù)上例繼續(xù)上例: :POP DPL; (DPL)=00H (SP)=1AHPOP DPH; (DPH)=10H (SP)=19HPOP A ; (A)=30H (

37、SP)=18HBack 9 9、 交換指令交換指令(4(4條條) )匯編指令格式機器碼格式操作注釋XCH A,Rn;1100 1rrr(A) (Rn)XCH A, direct;1100 0101direct(A) (direct)XCH A, Ri;1100 011i(A) ( (Ri) )Back(1)字節(jié)變換指令 將第二操作數(shù)所指定的工作寄存器 Rn(R0R7),直接尋址和間接尋址的單元內(nèi)容與累加器 A 中內(nèi)容互換。其操作可表示為:A 一字節(jié) 源操作數(shù) 一字節(jié)例例: 初始時:(A)=34H,(30H)=11HXCH A, 30H ; (A)=11H,(30H)=34HMOV R1, #3

38、0H ; (R1)=30HXCH A, R1 ;(A)=34H,(30H)=11H(2) (2) 半字節(jié)交換指令半字節(jié)交換指令匯編指令格式機器碼格式操作注釋XCHD A, Ri; 1101 011i(A03) (Ri)03) 這條指令為低半字節(jié)交換指令。該指令將累加器 A 的低 4 位與 R0 或 R1 所指出的片內(nèi) RAM 單元的低 4 位數(shù)據(jù)相互交換,各自的高 4 位不變,其操作表示為:繼續(xù)上例: XCHD A, R1 ; (A)=31H ; (30H)=14HBack3.3.2 3.3.2 算術(shù)運算指令算術(shù)運算指令2424條條 1 .1 .不帶進位加法指令不帶進位加法指令( (四條四條)

39、 ) 2 . 2 .帶進位加法指令(四條)帶進位加法指令(四條) 3 .3 .帶借位減法指令(四條)帶借位減法指令(四條) 4 . 4 . 乘法指令(乘法指令(1 1條)條)Back 5 5、 除法指令(除法指令(1 1條)條) 6 6、 加加1 1指令(指令(5 5條)條) 7 7、 減減1 1指令指令(4(4條條) ) 8 8、 十進制調(diào)整指令十進制調(diào)整指令(1(1條條) )Back1 1 、 不帶進位加法指令不帶進位加法指令( (四條四條) )Back匯編指令格式機器碼格式操作注釋ADD A, Rn;0010 1rrr(A)+(Rn) A將工作寄存器內(nèi)容和累加器 A 中的數(shù)相加, “和”

40、存放于累加器 A中ADD A,direct;0010 0101direct(A)+(direct) A將內(nèi)部 RAM 單元內(nèi)容和累加器 A中的 數(shù)相 加,“和”存放于累加器A中ADD A,Ri ;0010 011i(A)+(Ri) A將間接尋址(Ri為 R0 或 R1)所得的片內(nèi) RAM 單元中內(nèi)容和累加器 A 中的數(shù)相加, “和”存放于累加器A中ADD A, #data;0010 0100data(A)+#data A將立即數(shù)的 8 位無符號二進制數(shù)和累加器 A 中的數(shù)相加, “和”存放于累加器A中 上述指令的執(zhí)行將影響標志位 AC,Cy,OV,P。當“和”的第 3 位或第 7 位有進位時,

41、分別將 AC,CY 標志位置 1,否則為 0。溢出標志位 OV=C7 C6(異或) ,該標志位只有帶符號數(shù)運算時才有用。注意:如果參加運算的兩個數(shù)是l 1無符號數(shù),則從CY上判斷是不產(chǎn)生了溢出l 2帶符號數(shù),則從OV上判斷運算是否溢出l 其中OVCP CSl CP:最高位進位位CS:次高位進位位例:例:若: (A)=78H , (R0)=64H執(zhí)行 ADD A,R0 后,結(jié)果及 PSW=? (A) :78H= 01111000 B + (R0) :64H= 01100100 B (A) :DCH= 11011100 B 標志位: CY=0, AC=0, OV=1, P=1,即 PSW=05H

42、結(jié)果: (A)=DCH (R0)=64HBack2 2 、帶進位加法指令(四條)、帶進位加法指令(四條)Back匯編指令格式機器碼格式操作注釋ADDC A, Rn ;0011 1rrr(A)+CY+(Rn) A將工作寄存器內(nèi)容、CY 位和累加器 A 中的數(shù)相加, “和”存放于累加器A 中ADDC A,direct; 0011 0101direct(A)+(direct)+CY A將內(nèi)部 RAM 單元內(nèi)容、CY 位和累加器 A 中的 數(shù) 相 加 ,“和”存放于累加器 A 中ADDC A,Ri;0011 011i(A)+(Ri)+CY A將間接尋址 (Ri為 R0 或 R1)所得的片內(nèi)RAM單元中

43、內(nèi)容、 CY位和累加器 A中的數(shù)相加,“和”存放于累加器A中ADDC A, #data;0011 0100data(A)+#data+CY A將立即數(shù)的 8位無符號二進制數(shù)、CY 位和累加器 A 中的數(shù)相加, “和”存放于累加器A中 本組指令的功能是同時把源操作數(shù)所指出的內(nèi)容和進位標志未 CY 都加到累加器 A 中,結(jié)果存放到 A 中,其余的功能和上面的 ADD 指令相同。本組指令常用于多字節(jié)加法。例:設(shè)(A)=0C3H,(R0)=0AAH, (CY)=1。執(zhí)行指令“ADDC A,R0”后的結(jié)果 及標志位如何? 解: (A) : C3H=1100 0011+ (CY) : 1=0000 000

44、1 1100 0100+ (R0) : AAH=1010 1010 (A) : 6EH=0110 1110標志位:CY=1,OV=1,AC=0,結(jié)果: (A)=6EH, (R0)=0AAH。例:編程,將(30H),(31H)單元中的數(shù)與 (40H),(41H)單元中的數(shù)相加,結(jié) 果存于(30H),(31H)單元中。解:MOV A, 30H ADD A, 40H MOV 30H, A MOV A, 31H ADDC A, 41H MOV 31H, ABack3 3 、帶借位減法指令(四條)、帶借位減法指令(四條)匯編指令格式機器碼格式操作注釋SUBB A, Rn;1001 1rrr(A)-CY-

45、(Rn) A將累加器 A 中的數(shù)減去 CY 位及工作寄存器內(nèi)容“差”存放于累加器 A 中SUBB A,direct;1001 0101direct(A)-CY-(direct) A將累加器 A 中的數(shù)減去 CY 位及內(nèi)部RAM單 元 內(nèi) 容“差”存放于累加器 A 中BackSUBB A,Ri ;1001 011i(A)-CY-(Ri) A將累加器 A 中的數(shù)減去 CY 位及間接尋址(Ri 為 R0 或R1) 所得的片內(nèi) RAM單 元 中 內(nèi) 容 ,“差”存放于累加器 A 中SUBB A, #data;1001 0100data(A)-CY-#data A將累加器 A 中的數(shù)減去 CY 位及立即

46、數(shù)的 8 位無符號二進制數(shù), “差”存放于累加器 A 中 這組指令的功能是從累加器這組指令的功能是從累加器A A中減去中減去源操作數(shù)所指出的數(shù)及進位位源操作數(shù)所指出的數(shù)及進位位CYCY的值的值, ,差保留在累加器差保留在累加器A A中。中。由于由于89C5189C51指令系統(tǒng)中沒有不帶借位指令系統(tǒng)中沒有不帶借位的減法指令,如需要的話,可以在的減法指令,如需要的話,可以在“SUBB”SUBB”指令前用指令前用“CLR C”CLR C”指令將指令將CyCy清清0 0,這一點必須注意。,這一點必須注意。例:設(shè)(例:設(shè)(A A)=0C9H,=0C9H,(R2R2)=54H,Cy=1=54H,Cy=1。

47、 執(zhí)行指令執(zhí)行指令“SUBB ASUBB A, R2”R2”的結(jié)果如的結(jié)果如何?何? 解: (A)=0C9H= 11001001 B-) Cy= 1 = 00000001 B 11001000 B -) (R2)=54H = 01010100 B (A)=74H = 01110100 B結(jié)果為: (A)=74H標志位為:Cy=0 AC=0 OV=1 P=0Back 4 4、 乘法指令(乘法指令(1 1條)條)匯編指令格式機器碼格式操作注釋MUL AB ; 1010 0100(A)(B) B15-8 A7-0將累加器 A 和寄存器 B 中兩個無符號數(shù)相乘,所得 16位積的低字節(jié)存放在 A 中,高

48、字節(jié)存放中B 中。該指令若乘積大于該指令若乘積大于0FFH0FFH,則,則OVOV置置1 1,否則,否則OVOV清清0 0。CyCy位總是被清位總是被清0 0。Back例:(A)=4EH,(B)=5DH, 執(zhí)行指令“MUL AB”后結(jié)果如何? 解: 結(jié)結(jié)果果為為: (B B)= =1 1C CH H, , (A A)= =5 56 6H H, 表表示示積積(B BA A)= =1 1C C5 56 6H H,O OV V= =1 1。 Back5 5、 除法指令(除法指令(1 1條)條)匯編指令格式機器碼格式操作注釋DIV AB ;1000 0100(A)/(B)的商 A(A)/(B)的余數(shù)

49、BA 中內(nèi)容除以 B中內(nèi)容,整數(shù)商存于 A 中,余數(shù)存于B中。Back該該指指令令執(zhí)執(zhí)行行后后,C CY Y 和和 O OV V 均均被被清清 0 0。若若 原原(B B)= =0 00 0H H,則則結(jié)結(jié)果果無無法法確確定定,用用 O OV V= =1 1 表表示示,C CY Y 仍仍為為 0 0。 例例: (A A)= =B BF FH H, (B B)= =3 32 2H H。 執(zhí)執(zhí)行行指指令令“D DI IV V A AB B” 結(jié)結(jié)果果為為(A A)= =0 03 3H H, (B B)= =2 29 9H H; 標標志志位位 C CY Y= =0 0,O OV V= =0 0。 B

50、ack 6 6、 加加1 1指令(指令(5 5條)條)匯編指令格式機器碼格式操作注釋INC A ;0000 0100(A)+1 AA 中內(nèi)容加1。INC Rn;0000 1rrr(Rn)+1 RnRn 中內(nèi)容加1。INC direct;0000 0101direct(direct)+1directDirect 單元中內(nèi)容加1。INC Ri;0000 011I(Ri)+1 (Ri)Ri 間接尋址所得的片內(nèi) RAM 單元中內(nèi)容加1。INC DPTR;1010 0011(DPTR)+1 DPTRDPTR中內(nèi)容加1Back該組指令的操作不影響 PSW。若原單元內(nèi)容為 FFH,加 1 后溢出為 00H,

51、也不影響 PSW標志。例:比較指令“INC A”和“ADD A,#01H”的結(jié)果。解: “INC A”指令只將 A 的內(nèi)容加 1,標志位沒有變化。而“ADD A,#01H”指令不僅將 A 的內(nèi)容加 1,還影響標志位變化。例:例: 若:(若:(R1R1)=30H =30H ,(,(30H30H)=11H=11H 求執(zhí)行下面指令后的結(jié)果。求執(zhí)行下面指令后的結(jié)果。INC R1INC R1; (30H)=12H(30H)=12HINC R1 INC R1 ; (R1)=31H(R1)=31H解解:結(jié)結(jié)果果為為: (3 30 0H H)= =1 12 2H H, (R R1 1)= =3 31 1H H

52、。 不不影影響響 P PW WS S Back7 7、 減減1 1指令指令(4(4條條) )匯編指令格式機器碼格式操作注釋DEC A ;0001 0100(A)-1 AA 中內(nèi)容減1。DEC Rn;0001 1rrr(Rn)-1 RnRn 中內(nèi)容減 1。DEC direct;0001 0101direct(direct)-1directDirect 單元中內(nèi)容減 1。DEC Ri;0001 011I(Ri)-1 (Ri)Ri 間接尋址所得的片內(nèi) RAM 單元中內(nèi)容減 1。Back8 8、 十進制調(diào)整指令十進制調(diào)整指令(1(1條條) )匯編指令格式機器碼格式操作注釋DA A;1101 0100若

53、(A0-3)9或AC=1,則(A0-3)+6 A0-3同時,若(A4-7)9 或 CY=1,則(A4-7)+6 A4-7調(diào)整累加器內(nèi)容為BCD碼。Back這條指令跟在 ADD 或 ADDC 指令后,將相加后存放在累加器中的結(jié)果進行十進制調(diào)整,完成十進制加法運算功能。必須注意,本指令中加數(shù)與被加數(shù)都是壓縮的 BCD 碼, 不能簡單地把累加器A 的 16 進制數(shù)變換成 BCD 碼,也不能用于十進制減法的調(diào)整。例例: : 設(shè)累加器設(shè)累加器A A內(nèi)容為:內(nèi)容為:01010110B01010110B(即為(即為5656的的BCDBCD碼),寄存器碼),寄存器R3R3的內(nèi)容為的內(nèi)容為01100111B01

54、100111B(即(即6767的的BCDBCD碼),碼),CYCY內(nèi)容為內(nèi)容為1 1。求執(zhí)行下列指令后的結(jié)果。求執(zhí)行下列指令后的結(jié)果。 ADDC AADDC A,R3R3; DA ADA A;解:先執(zhí)行 ADDC A,R3; (A) :0101 0110 BCD:56 (R3) :0110 0111 BCD:67 (+) (CY) :0000 0001 BCD:01 和:1011 1110即(A)=1011 1110 且影響標志位 CY=0,AC=0; 再執(zhí)行 DA A;因為 A 中的高四位值為 11,大于 9,低四位值為 14,也大于 9,所以內(nèi)部調(diào)整自動進行加 66H的操作: 1011 1

55、110 調(diào)整+) 0110 0110 1 0010 0100 BCD:124即(A)=0010 0100=24BCD,CY=1;AC=1。Back 邏輯操作指令包括:與、或、異或、清除、求反、移位等操作。該指令組全部操作數(shù)都是8位25條指令。3.3.3 3.3.3 邏輯操作指令邏輯操作指令Back 1 .1 .簡單操作指令(簡單操作指令(2 2條)條) 2 .2 .移位指令(移位指令(4 4條)條) 3 .3 .累加器半字節(jié)交換指令累加器半字節(jié)交換指令(1 1條)條) 4. 4. 邏輯邏輯“與與”指令(指令(6 6條)條) 5. 邏輯邏輯“或或”指令(指令(6條)條) 6 .6 .邏輯邏輯“異

56、或異或”指令(指令(6 6條)條)Back1 .1 .簡單操作指令(簡單操作指令(2 2條)條)匯編指令格式機器碼格式操作注釋CLR A ;1110 01000 A清累加器 A 為 0,只影響標志位P。Back(1) (1) 累加器累加器A A清清0 0指令指令(2)(2)累加器累加器A A取反指令取反指令匯編指令格式機器碼格式操作注釋CPL A ;1111 0100(A) A 對累加器A 內(nèi)容逐位取反,不影響標志位Back2 .2 .移位指令(移位指令(4 4條)條)匯 編 指 令 格 式機 器 碼 格 式操 作注 釋RL A ;0010 0011 a7 a0累加器 A 的內(nèi)容循環(huán)左移 一

57、位Back(1)(1)累加器累加器A A循環(huán)左移指令循環(huán)左移指令(2) (2) 累加器累加器A A循環(huán)右移指令循環(huán)右移指令 匯編指令格式機器碼格式操作注釋RR A ;0000 0011 a7 a0將累加器 A的內(nèi)容循環(huán)右移一位(3) (3) 累加器累加器A A連同進位位循環(huán)左移指令連同進位位循環(huán)左移指令 RLCRLCA A ;匯編指令格式機器碼格式操作注釋RLC A ;0011 0011 CY a7 a0將累加器 A 的內(nèi)容連同進位位CY一起循環(huán)左移一位。 我我們們通通常常用用 R RL LC C A A 指指令令將將累累加加器器 A A 的的內(nèi)內(nèi)容容做做乘乘 2 2運運算算。 (4) (4)

58、 累加器累加器A A連同進位位循環(huán)右移指令連同進位位循環(huán)右移指令 RRCRRCA A ;匯編指令格式機器碼格式操作注釋RRC A ;0001 0011 CY a7 a0將累加器 A 的內(nèi)容連同進位位CY一起循環(huán)右移一位。例如:無符號例如:無符號 8 8 位二進制數(shù)位二進制數(shù) (A A)=10111101B=BDH=10111101B=BDH, (, (CYCY)=0=0。 將(將(A A)乘)乘 2 2,執(zhí)行指令,執(zhí)行指令 “RLC ARLC A”后”后 結(jié)果: (結(jié)果: (A A)=0111=0111 1010B=7AH1010B=7AH, (, (CYCY)=1=1, 而而 17AH17A

59、H 正是正是 BDHBDH 的的 2 2 倍。倍。 Back3 . 3 . 累加器半字節(jié)交換指令累加器半字節(jié)交換指令 匯編指令格式機器碼格式操作注釋SWAP A ;1100 0100(A0-3) (A4-7)將累加器 A 的高低兩半字節(jié)交換。如如:A=FAH,執(zhí)執(zhí)行行指指令令 “SW AP A”后后, 結(jié)結(jié)果果為為: (A)=AFH Back4. 4. 邏輯邏輯“與與”指令(指令(6 6條)條)匯編指令格式機器碼格式操作注釋ANL A, Rn;0101 1rrr(A)(Rn) AANL A,direct;0101 0101direct(A)(direct) AANL A, Ri;0101 01

60、1i(A)(Ri) AANL A, #data;0101 0100#data(A)#data AANL direct, A;0101 0010direct(direct)(A) directANL direct,#data;0101 0011direct#data(direct)#data directBack 這組指令中前四條指令是將累加器這組指令中前四條指令是將累加器A A的的內(nèi)容和操作數(shù)所指出的內(nèi)容按位進行邏內(nèi)容和操作數(shù)所指出的內(nèi)容按位進行邏輯輯“與與”,結(jié)果存放在,結(jié)果存放在A A中。中。后兩條指令是將直接地址單元中的內(nèi)容后兩條指令是將直接地址單元中的內(nèi)容和操作數(shù)所指出的單元的內(nèi)容按位

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 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

提交評論