單片機原理及應(yīng)用第03章_第1頁
單片機原理及應(yīng)用第03章_第2頁
單片機原理及應(yīng)用第03章_第3頁
單片機原理及應(yīng)用第03章_第4頁
單片機原理及應(yīng)用第03章_第5頁
已閱讀5頁,還剩207頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、單片機原理及應(yīng)用第三章 MCS-51單片機指令系統(tǒng)本章內(nèi)容尋址方式 指令的分類、格式及符號說明 分類指令 掌握MCS-51指令系統(tǒng)的各種尋址方式掌握每條指令的格式、功能及用法掌握指令的操作過程中操作數(shù)的變化情況以及對標志位的影響學(xué)會正確選用指令完成簡單的任務(wù)學(xué)習(xí)目的 MCS-51指令系統(tǒng)共有255種操作代碼,用匯編語言表達時,只需熟記42種助記符就能表示33種指令功能共111條指令。 MCS-51單片機指令系統(tǒng)的特點:指令執(zhí)行時間短。1個機器周期指令有64條,2個機器周期指令有45條,而4個機器周期指令2條。指令字節(jié)數(shù)少。單字節(jié)指令有49條,雙字節(jié)指令有45條,三字節(jié)指令僅有17條。位操作指令

2、豐富。3.1 MCS-51系統(tǒng)單片機指令格式 3.1.1 指令格式 3.1.2 指令的三種表達形式 3.1.3 指令的字節(jié)數(shù)3.1.4 指令的分類及符號說明 指令格式是指令碼的結(jié)構(gòu)形式。表達形式為:3.1.1 指令格式 標號又稱為指令地址符號,一般由1-6個符組成,以字母開頭的字母數(shù)字串。如:START、LOOP、NEXT、MAIN標號: 操作碼 操作數(shù) ;注釋 操作碼用MCS-51單片機所規(guī)定的助記符來表示,它命令CPU作何種操作。如:MOV、ADD、ORL等。標號: 操作碼 操作數(shù) ;注釋 操作數(shù)分為目的操作數(shù)和源操作數(shù),常用符號(如寄存器、標號)、常量(如立即數(shù)、地址值等)來表示。操作碼

3、和操作數(shù)之間用若干空格分隔,而目的操作數(shù)和源操作數(shù)之間用逗號“,”分隔。標號: 操作碼 操作數(shù) ;注釋目的操作數(shù),源操作數(shù)寄存器,如:A、B、DPTR、Rn、P0等。標號,如:START、LOOP、MAIN等。例如主程序?qū)嶋H從2000H開始存放,復(fù)位后,通過跳轉(zhuǎn)指令LJMP轉(zhuǎn)移至2000H開始執(zhí)行。 ORG 0000H LJMP START . . . ORG 2000HSTART:- 注釋是對該指令作用或功能的說明,以便于閱讀,不參與編譯(可有可無,不是必備的)。注釋部分前一定要用分號“;”隔開。 標號: 操作碼 操作數(shù) ;注釋3.1.2 指令的三種表達形式 通常,指令有二進制,十六制和助記

4、符等三種表示形式 1) 指令的二進制形式 具有難讀、難寫、難記憶和難修改等缺點,因此人們通常不用它來編寫程序。2) 指令的十六進制形式 雖然讀寫方便,但仍不易為人們識別和修改,通常也不被用來編寫程序 。3) 指令的助記符形式 又稱為指令的匯編符或匯編語句形式,是一種由英文單詞或縮寫字母形象表征指令功能的形式。 如果累加器A中已有一個加數(shù)20,那么能夠完成206并把結(jié)果送入累加器A的加法指令的:二進制形式為: 0011100000000110B;十六進制形式為: 3806H;助記符形式為: ADDA,06H ;A A+06H例如3.1.3 指令的字節(jié)數(shù) MCS-51單片機通??梢苑譃閱巫止?jié)、雙字

5、節(jié)和三字節(jié)指令三種。(1)單字節(jié)指令(49條) 單字節(jié)指令只有一個字節(jié)。通常又可分為兩類:1)無操作數(shù)單節(jié)指令 這類指令的指令碼光有操作碼字段,操作數(shù)是隱含在操作碼中的。如:INC DPTR 這類指令的指令碼有操作碼字段和專門用來指示操作數(shù)所在寄存器號的字段組成。 例如:八位數(shù)傳送指令 MOVA,Rn其中,n的取值范圍為07。2)含有操作數(shù)寄存器號的單字節(jié)指令 雙字節(jié)指令含有兩個字,操作碼字節(jié)在前,操作數(shù)字節(jié)在后。 例如:八位數(shù)傳送指令 MOV A , data ;Adata 這條指令的含義是指令碼第二字節(jié)data取出來存放到累加器A中2)雙字節(jié)指令(46條) 這類指令的指令碼的第一字節(jié)為操作

6、碼,第 二字節(jié)為操作數(shù)或操作數(shù)地址。 故三字節(jié)指令共可有如下四類:操作碼Data15-8Data7-0例如:指令MOV DPTR,data16操作碼DirectData例如:指令MOVdirect,data3)三字節(jié)指令(16條)操作碼DataDirect(rel)例如:指令CJNE A , #data , rel操作碼addr15-8addr7-0例如:指令LCALL addr163.1.4 指令的分類及符號說明 MCS-51單片機可以分為五類:1.指令分類2)算術(shù)運算指令4)位操作指令3)邏輯運算指令1)數(shù)據(jù)傳送指令5)控制轉(zhuǎn)移指令2、符號的說明(1)Rn:表示當前選中的寄存器區(qū)的8個工作

7、寄存器,(n=0-7)中的一個。(2)Ri:表示寄存器間接尋址,Ri只能 是R0或R1。 (3)#data:8位直接地址,實際使用時 data應(yīng)是00H-FFH中的一個。(4)#data16:表示包含在指令中的16位立 即數(shù)。(5)direct:表示8位內(nèi)部數(shù)據(jù)存儲器單 元的地址。(6)Addr16:表示16位的目的地址。(7)Addr11:表示11位的目的地址。(8)Rel:表示8位帶符號的偏移量。(9)DPTR:為數(shù)據(jù)指針,可用作16位 的地址寄存器。 (10)Bit:表示內(nèi)部RAM或?qū)S眉拇嫫髦?的直接尋址位。(11)A:累加器ACC。(12)B:專用寄存器,用于MUL和DIV指 令中。

8、(13):為間址寄存器或基址寄存器的前 綴。如Ri, A+PC,A+DPTR。(14)/:位操數(shù)的前綴,表示對該位操作 數(shù)取反。如/bit.(15)$:當前指令的地址。3.2 尋址方式 3.2.1 寄存器尋址 3.2.2 立即尋址3.2.3 直接尋址3.2.4 寄存器間接尋址3.2.5 相對尋址3.2.6 變址尋址3.2.7 位尋址3.2 尋址方式 MCS-51的指令系統(tǒng)共用了七種尋址方式。3.2.1 寄存器尋址 以寄存器的內(nèi)容為操作數(shù)的尋址方式。 可進行寄存器尋址的寄存器有:工作寄存器R0R7、A、B、DPTR和進位CY。MOV A , R0 ;A R0例如:R0(35H)A結(jié)果A=35H3

9、5HFFE080用戶RAM區(qū)位尋址區(qū)通用寄存器區(qū)7F30200035H3.2.1 寄存器尋址 說明: 源操作數(shù)或目的操作數(shù)為寄存器 指令中寄存器操作數(shù)用寄存器名表示 寄存器操作數(shù)為寄存器名中的值 尋址范圍:訪問選定的工作寄存器 指令碼中直接含有所需的操作數(shù),操作數(shù)字前加“#”符號為前綴。以區(qū)別直接地址。使用時一定要注意! 3.2.2 立即尋址 特點功能:(1)將片內(nèi)RAM中44H單元 的內(nèi)容送累加器A,屬于直 接尋址; (2)則是把44H這個數(shù)本 身送到累加器A,屬于立即尋址。 (1)MOV A,44H ;A (44H) (2)MOV A, #44H ;A 44H例源操作數(shù)為立即數(shù)(即操作數(shù)本

10、身)注:51系列單片機有 8 位立即數(shù)和 16 位地址 立即數(shù),立即數(shù)不能作目的操作數(shù)。尋址范圍:程序寄存器注:操作碼下一單元。例: MOV A,#20H MOV DPTR,#2000H3.2.2 立即尋址 說明 直接尋址指令的指令碼中含有操作數(shù)地址。 3.2.3 直接尋址功能:將片內(nèi)RAM 56H單元中的內(nèi)容34H送到累加器A中。如左圖3.1例:MOV A,56H ;A (56H) 機器碼:E5 5634H片內(nèi)RAM 34H累加器A56H 圖3.1 指令傳遞 直接尋址可訪問128B的RAM單元和特殊功能寄存器SFR。對于特殊功能寄存器既可以使用它們的地址,也可使用它們的代碼。如:MOV A,

11、P2;P2AMOV A,0A0H;P2的地址為0A0H3.2.3 直接尋址說明 3.2.4 寄存器間接尋址 指令指定寄存器中的內(nèi)容為操作數(shù)的地址。 工作寄存器R0、R1和專用寄存器DPTR可用于間接尋址,在寄存器前加“”符號作前綴。MOV A,R0 ;A R0MOV A,R0;A (R0)例如:R065H,65H26H如圖3.2所示,執(zhí)行結(jié)果A65H,執(zhí)行結(jié)果A26H。注意:是它區(qū)別寄存器尋址的標志。26H片內(nèi)RAMA65H 圖3.2 R065H 3.2.4 寄存器間接尋址(1)R0, R1可尋址內(nèi)部RAM 00 7FH 共128B單元內(nèi)容,不能尋址特殊功能寄存器。MOV A, R0MOV A

12、, R1說明 3.2.4 寄存器間接尋址(2)R0, R1可尋址外部RAM 00 FFH 共256B單元內(nèi)容。MOVX A, R0MOVX A, R1 說明 3.2.4 寄存器間接尋址(3)DPTR尋址外部數(shù)據(jù)存儲器的64KB空間 MOVX A, DPTR ;A(DPTR) MOVX DPTR, A ;(DPTR)A 說明3.2.5 相對尋址 相對尋址是將程序計數(shù)器PC中的當前內(nèi)容與指令第二字節(jié)所給出的數(shù)相加,其和為跳指令的轉(zhuǎn)移地址。 20008026HSJMPrel;PC PC+2+rel程序存儲器A圖3-3 指令過程 PC 26H0000H2000H2001H 80H 26H 2028H0

13、2H 20H A L U2002H例3.2.5 相對尋址尋址空間:程序存儲器偏移量rel的范圍是:128 +127轉(zhuǎn)移公式:PC目的地址 = PC當前地址 + rel說明3.2.6 變址尋址 以DPTR和PC基址寄存器和累加器A變址寄存器的內(nèi)容和為地址,尋址該地址單元,讀取數(shù)據(jù)。 (1)MOVCA,APC;A(APC)(2)MOVCA,ADPTR ;A(ADPTR) 執(zhí)行第一條時先取指,將該指令取完后的PC值和累加器A中的偏移量相加,作為操作數(shù)地址,從該地址中取出操作數(shù)送入A中。第二條過程與第一條指令類似,例如: 已知:片外ROM的2006H單元中有一數(shù)34H,編寫程序用變址尋址方法把這個數(shù)送

14、入A中,試進行分析。 解:根據(jù)題目要求,基址可定為2000H,地址偏移量則為06H,程序如下:MOVDPTR,2000H ;DPTR2000HMOVA,06H ;A06HMOVCA,ADPTR ;A34H例程序存儲器A 圖3.4 DPTR20 06H0000H34H 2006H 00H A L U 如圖3.4所示,這里A具有雙重作用,在指令執(zhí)行前用來存放地址偏移量,指令執(zhí)行后為目的操作數(shù)。 3.2.6 變址尋址 說明尋址范圍:64KB程序存儲器變址 + 基址形成的ROM地址中的值為操作數(shù)基址寄存器 DPTR 16 位數(shù)據(jù)指針 PC 16 位程序指針變址寄存器 A 8 位累加器 3.2.7 位尋

15、址 當我們把八位二進制數(shù)中某一位作為操作數(shù)看待時,這個操作數(shù)的地址就稱為位地址,對位地址尋址簡稱位尋址。 MOV 30H,C ; 30H是位尋址位地址 MOV A,30h ; 30H是直接尋址的字節(jié)地址 MOVC,ACC.7 ;CyACC.7 由上面指令可知,位尋址的位地址與直接尋址的字節(jié)地址形式完全一樣,主要由操作碼來區(qū)分,使用時需應(yīng)該特別注意。例如3.2.7 位尋址說明位尋址僅對片內(nèi)RAM的部分區(qū)域有效 片內(nèi)通用RAM區(qū) 字節(jié)地址為20H 2FH,16 Byte單元共有128 bit 位 片內(nèi)專用RAM區(qū) 能被 8 整除的特殊功能寄存器單元的字節(jié)地址3.2.7 位尋址說明位地址表示:直接使

16、用位地址。對于20H2FH的16個單元共128位的位地址分布是00H7FH。單元地址.位地址 20H.1。對于特殊功能寄存器,可以直接用寄存器名字加位數(shù)或位名表示,如PSW.3 , 位名:CY, AC。 序號尋址方式尋址空間1寄存器尋址寄存器R0R7、A、B、DPTR、C2直接尋址內(nèi)部RAM低128B、SFR3寄存器間接尋址內(nèi)部RAM低128B、外部RAM4立即尋址程序存儲ROM5變址尋址程序存儲器(A+DPTR,A+PC)6相對尋址程序存儲器ROM(PC+127-128)7位尋址內(nèi)部RAM的20H2F單元和部分SFR課堂小結(jié):MOV 30H,R7 MOV A,55H MOV A,55HJMP

17、 A+DPTR MOV 30H,CMOV A,R0MOVX A,R0練習(xí)一答案:寄存器尋址方式 直接尋址方式 立即尋址方式 變址尋址方式 位尋址方式 間接尋址方式 間接尋址方式 說明下列指令中源操作數(shù)采用的尋址方式。MOV R0,R3 MOVC A, R0+DPTR ADD R0,R1MUL AR0 練習(xí)二改錯題。1.MOV R0,R3 間址寄存器不能使用R2R7。練習(xí)二4.MUL AR0乘法指令中的乘數(shù)應(yīng)在B寄存器中,即乘法指令只可 使用AB寄存器組合3.ADD R0,R1運算指令中目的操作數(shù)必須為累加器A,不可為R0。2.MOVC A, R0+DPTR變址尋址方式中的間址寄存器不可使用R0

18、,只可使用A。答案3.3 指令系統(tǒng) 3.3.1 數(shù)據(jù)傳送指令 3.3.2 算邏運算和移位指令 3.3.3 控制轉(zhuǎn)移和位操作指令3.3.4 偽指令數(shù)據(jù)傳送指令是計算機中最基本、應(yīng)用最廣泛的指令類型。MCS-51單片機有四類 29 條數(shù)據(jù)傳送指令。 內(nèi)部數(shù)據(jù)傳送指令(15條) 外部數(shù)據(jù)傳送指令(7條) 數(shù)據(jù)交換指令(5條) 堆棧操作指令(2條) 3.3.5 數(shù)據(jù)傳送指令指令格式: MOV , 注: 為源字節(jié), 為目的字節(jié)指令功能:將源字節(jié)送到目的字節(jié)單元,且源字節(jié)單元中的源字節(jié)不變。內(nèi)部數(shù)據(jù)傳送指令 MOV A,#data ;A data 8 位立即數(shù)送累加器 A MOV Rn,#data ;Rn

19、 data 8 位立即數(shù)送工作寄存器 R0 R7 MOV Ri,#data ;( Ri ) data 8 位立即數(shù)送 R0、R1 表示的間接地址中 MOV direct,#data ;( direct ) data 8 位立即數(shù)送 direct 的直接地址中立即尋址型內(nèi)部數(shù)據(jù)傳送指令 已知:R030H,試問執(zhí)行如下指令后累加器A、R3、30H、31H單元中內(nèi)容各是什么?MOV A, #20HMOV R3, #45HMOV R0, #46HMOV 31H, #47H例執(zhí)行后,結(jié)果為: A=20H, R3=45H, (30H)=46H, (31H)=47H內(nèi)部數(shù)據(jù)傳送指令立即尋址型 已知:R030

20、H,試問執(zhí)行如下指令后累加器A、R3、30H、31H單元中內(nèi)容各是什么?MOVA, #50H;MOV R3, #65H;MOV R0, #68H;MOV 31H, #70H; 練習(xí)A50HR3 65H(R0) 68H(31H) 70H執(zhí)行后,結(jié)果為: A50H,R365H,(30H)68H,(31H)70H立即尋址型內(nèi)部數(shù)據(jù)傳送指令.目的操作數(shù)為寄存器尋址方式 二字節(jié)機器碼:一字節(jié)操作碼 一字節(jié)源操作數(shù) 例: MOV A,#20H ;機器碼: 74H、20H 例: MOV R0,#20H ;機器碼: 01111000B、20H 例: MOV R7,#30H ;機器碼: 01111111B、30

21、H說明立即尋址型內(nèi)部數(shù)據(jù)傳送指令目的操作數(shù)為直接尋址方式 三字節(jié)機器碼:一字節(jié)操作碼 一字節(jié)目的地址操作數(shù) 一字節(jié)源操作數(shù) 例: MOV P1,#20H ;機器碼: 75H、90H、20H MOV A0H,#30H ;機器碼: 75H、A0H、30H說明立即尋址型內(nèi)部數(shù)據(jù)傳送指令目的操作數(shù)為寄存器間址尋址方式 二字節(jié)機器碼:一字節(jié)操作碼 一字節(jié)源操作數(shù) 例: MOV R0,#20H ;機器碼: 01110110B、20H MOV R1,#30H ;機器碼: 01110111B、30H說明立即尋址型內(nèi)部數(shù)據(jù)傳送指令MOV A,direct ;A (direct) MOV direct,A ;(d

22、irect) A MOV Rn,direct ;Rn (direct)MOV Ri,direct ;(Ri) (direct)MOV direct1,direct2 ;(direct1) (direct2) 直接尋址型內(nèi)部數(shù)據(jù)傳送指令 已知:R1=20H、(21H)=54H、(22H)=55H、(30H)=56H,試問執(zhí)行如下指令后,結(jié)果A、40H、R2、20H、和P2口中的內(nèi)容各是什么? MOV A , 21H; MOV 40H ,A; MOV R2 , 22H; MOV R1 , 21H; MOV P2, 30H;例A(21H) =54H(40H) AR2 (22H)=55H(R1) (2

23、1H)=54HP2 (30H) =56H結(jié)果為:A=54H,(40H)=54H ,R2=55H ,(20H)=54H ,P2=56H直接尋址型內(nèi)部數(shù)據(jù)傳送指令 已知:R2=20H、(21H)=23H、(22H)=45H、(30H)=78H,試問執(zhí)行如下指令后,結(jié)果A、40H、R1、20H、和P2口中的內(nèi)容各是什么? MOV A , 21H; MOV 40H ,A; MOV R1 , 22H; MOV R2 , 21H; MOV P2, 30H;練習(xí)A(21H) =23H(40H) AR1 (22H)=45H(R2) (21H)=23HP2 (30H) =56H結(jié)果為:A=23H,(40H)=2

24、3H ,R1=45H ,(20H)=23H ,P2=78H直接尋址型內(nèi)部數(shù)據(jù)傳送指令 另一操作數(shù)為寄存器尋址方式 二字節(jié)機器碼:一字節(jié)操作碼 一字節(jié)地址操作數(shù) 例: MOV A,20H ;機器碼: E5H、20H MOV 20H,A ;機器碼: F5H、20H MOV R0,20H ;機器碼: 10101000 B、20H MOV R7,30H ;機器碼: 10101111 B、30H MOV 20H,R0 ;機器碼: 10001000 B、20H MOV 30H,R7 ;機器碼: 10001111 B、30H說明直接尋址型內(nèi)部數(shù)據(jù)傳送指令 另一操作數(shù)為直接尋址方式 三字節(jié)機器碼:一字節(jié)操作碼

25、 一字節(jié)源地址操作數(shù) 一字節(jié)目的地址操作數(shù) 例: MOV ACC,20H ;機器碼: 85H、E0H、20H MOV E0H,30H ;機器碼: 85H、E0H、30H MOV 60H,30H ;機器碼: 85H、60H、30H說明直接尋址型內(nèi)部數(shù)據(jù)傳送指令 另一操作數(shù)為寄存器間接尋址方式 二字節(jié)機器碼:一字節(jié)操作碼 一字節(jié)地址操作數(shù) 例: MOV R0,20H ;機器碼: 10100110 B、20H MOV R1,30H ;機器碼: 10100111 B、30H MOV 20H,R0 ;機器碼: 10000100 B、20H MOV 30H,R1 ;機器碼: 10000101 B、30H說

26、明直接尋址型內(nèi)部數(shù)據(jù)傳送指令MOV A,Rn ;A RnMOV Rn,A ;Rn AMOV direct,Rn ;( direct ) Rn 寄存器尋址型內(nèi)部數(shù)據(jù)傳送指令 已知:R1=30H、R2=31H、(56H)=23H,試問執(zhí)行以下指令后,結(jié)果各是什么?MOV A , R1 MOV R2 , A MOV 56H , R1結(jié)果為:A=30H ,R2=30H ,(56H)=30H例 已知:R1=1EH、R2=2FH、(56H)=3DH,試問執(zhí)行以下指令后,結(jié)果各是什么? MOV A ,R2 ; MOV R1 ,A ; MOV 56H ,R1;練習(xí)AR2 =2FHR1 A=2FH(56H) R

27、1=2FH結(jié)果為:A=2FH ,R2=2FH ,(56H)=2FH 寄存器尋址型內(nèi)部數(shù)據(jù)傳送指令 另一操作數(shù)為寄存器尋址方式 一字節(jié)機器碼:僅有操作碼 操作數(shù)隱含在操作碼中 例: MOV A,R0 ;機器碼: 11101000 B MOV R1 ,A ;機器碼: 11111001B說明寄存器尋址型內(nèi)部數(shù)據(jù)傳送指令 另一操作數(shù)為直接尋址方式 二字節(jié)機器碼:一字節(jié)操作碼 一字節(jié)地址操作數(shù) 例: MOV 30H,R0 ;機器碼: 10001000 B、30H MOV R1,30H ;機器碼: 10101001 B、30H說明寄存器尋址型內(nèi)部數(shù)據(jù)傳送指令MOV A,Ri ;A (Ri)MOV Ri,A

28、 ;( Ri ) A MOV direct,Ri ;( direct ) ( Ri ) 注: 源、目的操作數(shù)中僅有一個為間址寄存器間接尋址型內(nèi)部數(shù)據(jù)傳送指令 已知:(30H)=12H、(31H)=13H、R0=30H、R1=31H,試問執(zhí)行以下指令后A、30H、31H和32H各是什么? MOV A ,R0; MOV R1,A; MOV R0,#34H; MOV 32H ,R1;例A(R0) =12H(R1) A=12H(R0) 34H(32H) (R1)結(jié)果為:A=12H ,(30H)=34H , (31H)=12H ,(32H)=12H寄存器間接尋址型內(nèi)部數(shù)據(jù)傳送指令 已知:(40H)=56

29、H、(41H)=78H、R0=40H、R1=41H,試問執(zhí)行以下指令后A、40H、41H和32H各是什么? MOV A ,R0; MOV R1,A; MOV R0,#34H; MOV 32H ,R1;練習(xí)A(R0) =56H(R1) A=56H(R0) 34H(32H) (R1)結(jié)果為:A=56H ,(40H)=34H , (41H)=56H ,(32H)=56H寄存器間接尋址型內(nèi)部數(shù)據(jù)傳送指令另一操作數(shù)為累加器A 一字節(jié)機器碼:僅有操作碼 操作數(shù)隱含在操作碼中 例: MOV A,R0 ;機器碼: 11100110 B MOV R1 ,A ;機器碼: 11110111B討論寄存器間接尋址型內(nèi)部

30、數(shù)據(jù)傳送指令另一操作數(shù)為直接尋址方式 二字節(jié)機器碼:一字節(jié)操作碼 一字節(jié)地址操作數(shù) 例: MOV 30H,R0 ;機器碼: 10000100 B、30H MOV 30H,R1 ;機器碼: 10000101 B、30H討論寄存器間接尋址型內(nèi)部數(shù)據(jù)傳送指令 MOV A,#dataMOV A, directMOV direct,AMOV A,RnMOV Rn,AMOV A,RiMOV Ri,AMOV Rn,#dataMOV direct ,#dataMOV Ri, #dataMOV Rn, directMOV direct, RnMOV Ri, directMOV direct, Ri MOV di

31、rect,direct小結(jié)內(nèi)部數(shù)據(jù)傳送指令 累加器 A 尋址Ri 間接尋址direct 直接尋址Rn 工作寄存器尋址#data 立即數(shù)尋址內(nèi)部數(shù)據(jù)傳送指令 MOV R0,R1 MOV R1,R7 MOV R0, R1MOV A,R1MOV R0,AMOV A,R7MOV R1,A MOV R6 ,R0MOV A, R0MOV R6 ,AMOV A, R1MOV R0 ,A錯誤正確練習(xí)判斷下列指令的正誤,將錯誤的更正. 外部數(shù)據(jù)傳送指令16位數(shù)據(jù)傳送指令MOV DPTR,#data16 ;DPTR 外部 RAM、ROM的 16 位地址值 16位數(shù)據(jù)傳送指令( 1 條)60H 9061H 2062

32、H 30程序存儲器302000H7FH80H81H82H83H片內(nèi)數(shù)據(jù) 存儲器例:MOV DPTR,#2030H 訪問外部 ROM 存儲器的指令( 2 條)MOVC A,A + DPTR ;A (A+DPTR) 數(shù)據(jù)指針MOVC A,A + PC ;PC PC + 1、A (A+PC)程序指針注:PC 不能隨便改變,稱為近程查表 DPTR 可隨時賦值,稱遠程查表 故 A+DPTR 比 A+PC 更常用外部數(shù)據(jù)傳送指令訪問外部ROM指令60H 9061H 2062H 3063H 93程序存儲器3020訪問外部ROM指令例:CLR A MOV DPTR,#2030H MOVC A,A + DPTR

33、 2030H AA00H7FH80H81H82H83H片內(nèi)數(shù)據(jù) 存儲器E0HAA2000H 742001H 052002H 832003H 程序存儲器訪問外部ROM指令2008H AA00H7FH80H81H82H83H片內(nèi)數(shù)據(jù) 存儲器E0HAA例:MOV A,#05H MOVC A,A + PC 05 AA 已知:1000H:MOV A,#10H ;A = 10H 1002H:MOVC A,A+PC 表項1010H:02H1011H:04H1012H:06H1013H:08H A (A+PC)、A = 08H 結(jié)果; 取指后PC = 1003H、A + PC = 1013H注: 表項地址范圍

34、為 1003H 1003H + FFH外部數(shù)據(jù)傳送指令訪問外部ROM指令例 已知:片外ROM的2008H單元中有一數(shù)34H,試用兩條外部ROM數(shù)據(jù)傳送指令各編寫一個程序,把數(shù)送到片7FH單元。解:采用DPTR作為基址寄存器,基址可定為2000H,地址偏移量則為08H,程序如下:MOVDPTR,2000H ;DPTR2000HMOVA,08H ;A08HMOVCA,ADPTR ;A34HMOV7FH,A ;(7FH)A例程序存儲器A DPTR20 08H0000H34H 2008H 00H A L U 如圖所示,這里A具有雙重作用,在指令執(zhí)行前用來存放地址偏移量,指令執(zhí)行后為目的操作數(shù)。 34H

35、 34H 采用PC作為基址寄存器,程序如下: ORG 0000H SJMP START ORG 2000HSTART:MOVA,05H ;A05H MOVCA,APC ;A34H MOV7FH,A ;(7FH)A例 外部 RAM 存儲器的指令( 4 條)MOVX A,Ri ;外部RAM的00H FFH單元讀MOVX Ri,A ;外部RAM的00H FFH單元寫MOVX A,DPTR ;外部RAM的64K單元讀MOVX DPTR,A ;外部RAM的64K單元寫注:MOVC 指令僅讀操作 , MOVX 指令可讀寫操作訪問外部存儲器僅用間址,不用直接地址外部數(shù)據(jù)傳送指令訪問外部RAM指令 已知外部R

36、AM的60H單元中有一個數(shù)為30H,試編程把30H送到片外RAM的2000H單元中。例外部數(shù)據(jù)傳送指令訪問外部RAM指令解: MOV R1,#60H ;R1=60H MOVX A,R1 ;A=30H MOV DPTR ,#2000H ;DPTR=2000H MOVX DPTR,A ;2000H30H SJMP $ ;停止分析:上面雖都是片外RAM的地址單元,但不能直接傳送,必須經(jīng)過累加器A的轉(zhuǎn)送,才能實現(xiàn)。 MOVX A,2000H MOVX A,20H錯誤MOV DPTR,#2000H MOVX A,DPTR錯誤MOV R0,#20H MOVX A,R0練習(xí)判斷下列指令的正誤,將錯誤的更正.

37、訪問外部RAM指令 字節(jié)數(shù)據(jù)交換指令 XCHXCH A,Rn ;A Rn XCH A,direct ;A (direct)XCH A,Ri ;A (Ri)數(shù)據(jù)交換指令00HFFE080用戶RAM區(qū)位尋址區(qū)通用寄存器區(qū)7F302000已知:A=AAH,R0=00H,執(zhí)行如下指令后,結(jié)果如何? XCH A,R0結(jié)果:A=00H,R0=AAHAAH例 低 4 位數(shù)據(jù)交換指令 XCHD 累加器 A 中高低 4 位交換指令 SWAPXCHD A,Ri ;A03 (Ri)03SWAP A ;A03 A47注:交換指令均與累加器 A 有關(guān)數(shù)據(jù)交換指令已知:片內(nèi)20H單元有一個數(shù)為30H,片外20H單元有一個

38、數(shù)為03H,編程把二個數(shù)相互交換。例解:MOV R0 , #20H ;R020H MOVX A ,R0 ; A03H XCH A , R0 ;A30H ,20H03H MOVX R0 ,A ;30H20H(外部RAM) SJMP $ ;停止分析:片內(nèi)、片外沒有直接的交換指令,必須經(jīng)過累加器A的中轉(zhuǎn),才能實現(xiàn)。數(shù)據(jù)交換指令 堆棧操作的規(guī)則:先進后出,后進先出。PUSH direct ;SP SP + 1、(SP)(direct)POP direct ;( direct )(SP)、 SP SP 1堆棧操作指令61HPUSH A已知:A=AAH, SP=60H,執(zhí)行如下指令后,結(jié)果如何? 結(jié)果:

39、SP=61H ,(61H)=AAH例FFHE0H81H80HAAH位尋址區(qū)通用寄存器區(qū)2FH20H00H7FH62H61H60H60HSPAAHPUSH A61H61HPOP A已知:A=00H, SP=61H,(61H)=AAH,執(zhí)行如下指令后,結(jié)果如何? 結(jié)果: SP=60H , A=AAH例00HFFHE0H81H80H位尋址區(qū)通用寄存器區(qū)2FH20H00H7FH62H61H60H60HSP 61HAAH例已知:(20H)=M1、(50H)=M2、編寫程序用堆棧指令把20H和50H單元中的內(nèi)容相交換。解:由堆棧所具備的原則,程序為:MOV SP,#60H ;設(shè)置棧底首址為60HPUSH

40、20H ;SPSP+1,61 M1PUSH 50H ;SPSP+1,62 M2POP 20H ;(20H)M2, SP SP-1= 61HPOP 50H ;(50H)M1, SP SP-1= 60H在MCS-51指令系統(tǒng)中,該類指令為其核心,共48條可分為三大類:算術(shù)運算指令(24條)邏輯運算指令(20條)移位指令(4條)3.3.6 算邏運算和移位指令 加法指令(13條): 減法指令(8條): 十進制調(diào)整指令(1條): 乘法和除法指令(2條):ADD 、ADDC 、INC 、DASUBB 、DECDAMUL、DIV算術(shù)運算指令 不帶Cy加法指令(4條):ADD A,Rn ;A A + RnAD

41、D A,direct ;A A + (direct)ADD A,Ri ;A A + (Ri)ADD A,#data ;A A + data算術(shù)運算指令注:指令的目的操作數(shù)為累加器 A 執(zhí)行指令后將影響標志位Cy。加法指令 試分析執(zhí)行如下指令后,累加器A和PSW中各標志的變化情況如何?MOVA ,#5AHADD A , #6BH 解:第一條指令先向累加器A傳送一個數(shù)5AH,第二條為加法指令,機器執(zhí)行加法指令時按帶符號數(shù)運算。例 豎式表示如下圖:A= 0 1 0 1 1 0 1 0 Bdata= 0 1 1 0 1 0 1 1 B1071 1 1 0 0 0 1 0 1 B 1CS 90+ ) 1

42、97 1AC00CP執(zhí)行結(jié)果:A=5A+6B=C5H,PSW=44H 0 1 0 0 0 1 0 0 Cy AC F0 RS1 RS0 OV - P5A+6B=?C7C6 試分析執(zhí)行如下指令后,累加器A和PSW中各標志的變化情況如何?MOVA ,#78HADD A , #9AH 解:第一條指令先向累加器A傳送一個數(shù)5AH,第二條為加法指令,機器執(zhí)行加法指令時按帶符號數(shù)運算。練習(xí) 豎式表示如下圖: 120 A=0 1 1 1 1 0 0 0 B +) 154 data=1 0 0 1 1 0 1 0 B 274 1 0 0 0 1 0 0 1 0 B -) 256 18 1C6 1AC1C7執(zhí)行

43、結(jié)果:A=78+9A=12H,PSW=C0H 1 1 0 0 0 0 0 0 Cy AC F0 RS1 RS0 OV - P78+9A=?帶Cy加法指令(4條):ADDC A,Rn ;A A + Rn + CyADDC A,#data ;A A + data + CyADDC A,direct ;A A +(direct) + CyADDC A,Ri ;A A +(Ri) + Cy算術(shù)運算指令注:若 Cy = 0,則 ADD 等于 ADDC加法指令 已知:A8FH、R120H、(20H)12H、(21H)0FEH和Cy1,試問CPU依次執(zhí)行以下指令后累加器A和Cy中的值是多少。a.ADDC A

44、 ,R1 b.ADDC A ,21Hc.ADDC A,R1 d.ADDC A ,#7FH 解:操作結(jié)果應(yīng)為:a. A=8F+20+1=0B0H ,Cy=0 b.A=8F+FE+1=8EH ,Cy=1c.A=8F+12+1=0A2H ,Cy=0 d.A=8F+7F+1=0FH ,Cy=1例 已知:A7DH、R030H、(30H)35H、(31H)0DCH和Cy1,試問CPU依次執(zhí)行以下指令后累加器A和Cy中的值是多少。a.ADDC A ,R0 b.ADDC A ,31Hc.ADDC A,R0 d.ADDC A ,#7FH 練習(xí)解:操作結(jié)果應(yīng)為:a. A=7D+30+1=0AEH ,Cy=0 b.

45、A=7D+DC+1=5AH ,Cy=1c.A=7D+35+1=0B3H ,Cy=0 d.A=7D+7F+1=0FDH ,Cy=0 INCA;AA1INCRn;RnRn1INCdirect;(direct)(direct)1INCRi;(Ri)(Ri)1INCDPTR;DPTRDPTR1加1指令(5條):算術(shù)運算指令加法指令 已知:A34H、R042H、(43H)23H、DPTR3020H,試問CPU執(zhí)行如下程序后A、R4、43H、R0、DPTR中的內(nèi)容各是什么?INC AINC R0INC 43HINC R0INC DPTR解:由加1指令的規(guī)則,上述指令執(zhí)行后的結(jié)果為:A35H、R043H、4

46、3H25H、DPTR3021H。由于,加1指令在程序中頻繁地出現(xiàn),常用來修改地 址和數(shù)據(jù)指針加1處理。 例加1指令中,只有INC A這一條影響奇偶標志位,其余均不影響任何標志位。INC DPTR 對DPTR中內(nèi)容加1,是唯一的一條16位算術(shù)運算指令。說明思考已知:A34H、R042H、(43H)23H、DPTR3020H,運行前PSW=00,試問CPU執(zhí)行如下程序后PSW ?INC AINC R0INC 43HINC R0INC DPTR帶Cy減法指令(4條):SUBB A,Rn ;A A Rn- CySUBB A,#data ;A A - data - CySUBB A,direct ;A

47、A -(direct) - CySUBB A,Ri ;A A - (Ri) - Cy算術(shù)運算指令減法指令注: MCS-51僅有帶借位的減法指令,若要使用不帶借位的減法指令,則令 Cy = 0。000 0011CyACF0Rs1Rs0OV1P例 0111 1111 試分析執(zhí)行下列指令后,累加器A和PSW中各標志位狀態(tài)? CLR C MOV A ,#35H SUBB A ,#0B6H 解: A = 0011 0101 -) 1011 0110 結(jié)果為:A=35-B6=7FH, Cy =1,PSW為:DEC A ;AA-1DEC Rn ;RnRn-1DEC direct ;direct(direct

48、)-1DEC Ri ;(Ri)(Ri)-1減法指令減1指令(4條):注減1指令與加1指令相似,只有以A為操作數(shù)的指令才影響PSW。 已知:A10H、R13BH、R734H、(60H)00H、(3BH)0FFH,試分析,執(zhí)行如下程序后累加器A和PSW中各標志位狀態(tài)? DEC A DEC R1 DEC 60H DEC R7 例解:根據(jù)減1指令功能,結(jié)果為:A0FH, P=0 3B0FEH,PSW不變(60H)0FFH,PSW不變 R7=33H,PSW不變特點十進制調(diào)整指令(1條)1. BCD加法DA A對A中兩個壓縮BCD數(shù)相加之和調(diào)整為2位BCD碼數(shù)。1)只能用在對BCD碼數(shù)進行ADD或ADDC

49、操作后使用。2)影響標志位:C、AC、P。; A A + 06H60H66H 試編程實現(xiàn)44H86H的BCD加法程序,并對其工作原理分析。 解:相應(yīng)BCD加法程序為:MOV A,44H;A44HADD A,86H;A44860CAHDA A ;A30H,Cy1,AC1SJMP $ ;結(jié)束例A= 0 1 0 0 0 1 0 0 Bdata=1 0 0 0 0 1 1 0 B 4486+ )0 1 1 0 1 0 0 0 0 B 1 1 0 1 0 0 1 1 0 0 0 0 B 0 1 1 0 0 1 0 1 0 B 130 1 1 0 B 低4位9, 加6調(diào)整高4位9,加6調(diào)整 BCD加法過程

50、2.BCD減法 MCS51單片機中沒有十進制減法調(diào)整指令,因此,這里的BCD減法運算必須采用BCD補碼運算法則。 例 已知:M1和M2中分別存有被減數(shù)80和減數(shù)25,試編程求差,并把結(jié)果存入M3單元中。 解:根據(jù)BCD減法的實施步驟,程序如下:思路:因為沒有BCD碼的減法調(diào)整指令,將減法運算轉(zhuǎn)化為加法運算。 80-25=55 80+(100-25)=80+75=155執(zhí)行加法運算 80H+75H=F5H運行BCD碼調(diào)整指令 F5+60=155 其中1進至C,A=55ORG0100HCLRC ;清CyMOVA,9AH ;ABCD模100SUBB A, M2;ABCD減數(shù)的補數(shù)ADD A, M1;

51、A被減數(shù)減數(shù)的補數(shù)DA A;對A進行加法調(diào)整MOV M3,A;存入M3 M3BCD差CLR C ;清CySJMP $ ;停止80-25=?兩位BCD數(shù)的模100BCD減數(shù)加60調(diào)整BCD差BCD減數(shù)減數(shù)的補數(shù) 1 0 0 1 1 0 1 0 B0 0 1 0 0 1 0 1 B 1 1 1 1 0 1 0 1 B 1 1 0 1 0 1 0 1 0 1 0 1 B 0 1 1 1 0 1 0 1 B 1 0 0 0 0 0 0 0 B + BCD減法過程指令格式: MUL AB ; AB =B高8A低8指令功能:寄存器A、B中兩個 8 位數(shù)相乘,結(jié)果為 16 位數(shù)據(jù),其中高 8 位放在寄存器B

52、中,低 8 位放寄存器A中。專用寄存器:寄存器 B 和累加器 A算術(shù)運算指令乘法指令標志位 Cy、OV、P 討論: 執(zhí)行乘法指令后 Cy = 0 若積為 8 位(即 B = 0), 則 OV = 0 若積為 16 位(即 B 0),則 OV = 1 根據(jù)累加器 A 確定奇偶標志 P算術(shù)運算指令乘法指令 已知:有兩個8位無符號數(shù)乘數(shù)分別放在20H和21H單元中,試編寫程序把相乘積的低8位放入22H單元中,積的高8位放入23H單元中。例分析:這是一個乘法問題,可用MUL AB指令。 其操作數(shù)分布在相鄰四個單元,采用間址尋 址方式較為方便。ORG 1000HMOV R1 ,#20H ;R1第一個乘數(shù)

53、地址MOV A ,R1 ;A第一個乘數(shù)INC R1 ;修改乘數(shù)地址MOV B ,R1 ;B第二個乘數(shù)地址MUL AB ;A*B=BAINC R1 ;修改目標單元地址MOV R1 ,A ;22H積的低8位INC R1 ;修改目標單元地址MOV R1,B ;23H積的高8位SJMP $ ;停止指令格式: DIV AB ; AB =AB指令功能:累加器 A 除以寄存器B, 整商存A中,余存 B 中。專用寄存器:寄存器 B 和累加器 A算術(shù)運算指令除法指令標志位 Cy、OV、P 討論: 執(zhí)行除法指令后 Cy = 0 若除數(shù) B = 0,則 OV = 1 若除數(shù) B 0,則 OV = 0 根據(jù)累加器 A

54、 確定奇偶標志 P算術(shù)運算指令除法指令 邏輯與運算指令(6條): 邏輯或運算指令(6條): 邏輯異或指令(6條): 累加器清零和取反指令(2條):ANLORLXRLCLR、CPL邏輯運算指令與運算:有0出0,全1為1。 已知:A=78H,B=A5H 求:Y=AB 解:A= 0 1 1 1 1 0 0 0 ) B= 1 0 1 0 1 0 1 0 邏輯運算指令與指令0 0 1 0 1 0 0 0特點:與1相與數(shù)不變,與0相與數(shù)為0。請思考已知:M1、M2皆為8位的二進制數(shù),若M1M2=M1,則M2=?答:M2=FFHANL A,RnANL A,RiANL A,directANL A,#dataA

55、NL direct, AANL direct, #data; A A Rn; A A (Ri); A A direct; A A #data; direct direct A; direct direct #data邏輯運算指令與指令 已知:R0=20H、(20H)=0FEH,試問分別執(zhí)行如下指令后,累加器A和20H單元中內(nèi)容各是什么?MOV A,#20H MOV A,#0FH ANL A,R0 ANL A,20HMOV A ,#0F0H MOV A,#80H ANL A,R0 ANL 20H , A例例 A=0EH, (20H)=0FEH A = 0000 1111) (20H)= 1111

56、 1110 0000 1110 已知:R0=20H、(20H)=0FEH,試問分別執(zhí)行如下指令后,累加器A和20H單元中內(nèi)容各是什么?MOV A,#20H MOV A,#0FH ANL A,R0 ANL A,20H解:根據(jù)邏輯乘指令功能,上述指令執(zhí)行后的結(jié)果為: A=20H, (20H)=0FEH A = 0010 0000 ) R0 = 0010 0000 0010 0000 AA例 已知:R0=20H、(20H)=0FEH,試問分別執(zhí)行如下指令后,累加器A和20H單元中內(nèi)容各是什么?MOV A ,#0F0H MOV A,#80H ANL A,R0 ANL 20H , A解:根據(jù)邏輯乘指令功

57、能,上述指令執(zhí)行后的結(jié)果為: A=0F0H,(20H)=0FEH A = 1111 0000 ) R0 = 1111 1110 1111 0000 A A=80H,(20H)=80H A = 1000 0000 )(20H) = 1111 1110 1000 0000 (20H)已知:R1=60H、(60H)=0FAH,試問分別執(zhí)行如下指令后,累加器A和60H單元中內(nèi)容各是什么?MOV A,#60H MOV A,#0FH ANL A,R1 ANL A,60H解:根據(jù)邏輯乘指令功能,上述指令執(zhí)行后的操作結(jié)果為: A=60H,(60H)=0FAH A=00H,(60H)=0FAH 練習(xí)已知:R1=

58、60H、(60H)=0FAH,試問分別執(zhí)行如下指令后,累加器A和60H單元中內(nèi)容各是什么?MOV A ,#0F0H MOV A,#80H ANL A,R1 ANL 60H , A解:根據(jù)邏輯乘指令功能,上述指令執(zhí)行后的操作結(jié)果為: A=0F0H,(60H)=0FAH A=80H,(60H)=80H練習(xí)或運算:有1出1,全0為0。 已知:A=78H,B=A5H 求:Y=A+B 解:A= 0 1 1 1 1 0 0 0 ) B= 1 0 1 0 1 0 1 0 邏輯運算指令或指令1 1 1 1 1 0 1 0特點:與1或數(shù)為1,與0或數(shù)不變。請思考已知:M1、M2皆為8位的二進制數(shù),若M1+M2=

59、M1,則M2=?答:M2=00HORL A ,Rn;AARnORL A ,direct;AAdirectORL A ,Ri;AA(Ri)ORL A ,#data;AAdataORL direct ,A;direct(direct)AORL direct ,#data;direct(direct)data邏輯運算指令或指令例 A=0EH, (20H)=0FEH A = 0000 1111) (20H)= 1111 1110 1111 1111 已知:R0=20H、(20H)=0FEH,試問分別執(zhí)行如下指令后,累加器A和20H單元中內(nèi)容各是什么?MOV A,#20H MOV A,#0FH ORL

60、A,R0 ORL A,20H解:根據(jù)或邏輯指令功能,上述指令執(zhí)行后的結(jié)果為: A=20H, (20H)=0FEH A = 0010 0000 ) R0 = 0010 0000 0010 0000 AA 已知:AAAH和P2FFH,編程把累加器A中低4位送入P2口低4位,P2口高位不變。 解:程序思路為:根據(jù)邏輯與、邏輯或兩類指令的特性來實現(xiàn)ORG0030HANL A,0FH ;屏蔽A中的高4位,低4位不變ANLP2,F(xiàn)0H ;屏蔽P2中的低4位,高4位不變ORLP2,A ;裝配數(shù)據(jù),結(jié)果送P2SJMP$;結(jié)束例異或運算:相同為0,相異為1。 已知:A=58H,B=CAH 求:Y=AB 解:A=

溫馨提示

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

評論

0/150

提交評論