單片機原理及應(yīng)用教程(C語言版)-第3章 MCS-51指令系統(tǒng)及匯編程序設(shè)計_第1頁
單片機原理及應(yīng)用教程(C語言版)-第3章 MCS-51指令系統(tǒng)及匯編程序設(shè)計_第2頁
單片機原理及應(yīng)用教程(C語言版)-第3章 MCS-51指令系統(tǒng)及匯編程序設(shè)計_第3頁
單片機原理及應(yīng)用教程(C語言版)-第3章 MCS-51指令系統(tǒng)及匯編程序設(shè)計_第4頁
單片機原理及應(yīng)用教程(C語言版)-第3章 MCS-51指令系統(tǒng)及匯編程序設(shè)計_第5頁
已閱讀5頁,還剩139頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、單片機原理及應(yīng)用教程 (C語言版)第3章 MCS-51指令系統(tǒng)(zh ln x tn)及匯編程序設(shè)計主 編:周國運(u yn)中國水利水電出版社共一百四十四頁第3章 MCS-51指令系統(tǒng)(zh ln x tn)及匯編程序設(shè)計目 錄3.1 匯編語言概述 3.2 MCS-51單片機尋址方式(fngsh)3.3 MCS-51單片機指令系統(tǒng)3.4 MCS-51單片機偽指令3.5 匯編語言程序設(shè)計共一百四十四頁 本章討論MCS-51單片機的指令系統(tǒng)及匯編語言程序設(shè)計。內(nèi)容主要包括:匯編語言基本概念、尋址方式、指令系統(tǒng)、偽指令、匯編語言程序舉例。本章是單片機程序設(shè)計的基礎(chǔ)(jch),即便是主要用C語言做設(shè)

2、計程序,但對某些要求較高的部分,還是需要用匯編語言來寫程序。 共一百四十四頁3.1 匯編語言(hu bin y yn)概述 主要(zhyo)內(nèi)容3.1.1 指令和機器語言3.1.2 匯編語言3.1.3 匯編語言指令格式共一百四十四頁3.1.1 指令(zhlng)和機器語言一、指令和指令系統(tǒng)指令:是計算機中CPU根據(jù)人的意圖來執(zhí)行某種操作的命令(mng lng)。指令系統(tǒng):是一臺計算機(CPU)所能執(zhí)行的全部指令的集合。指令系統(tǒng)的強弱,決定了計算機智能的高低。共一百四十四頁3.1.1 指令(zhlng)和機器語言二、程序和程序設(shè)計語言程序:人們編寫的、使計算機完成(wn chng)某項工作的指令

3、序列,稱為程序。程序設(shè)計:編寫程序的過程叫程序設(shè)計程序設(shè)計語言:編寫程序的一整套規(guī)則、方法程序設(shè)計語言分類:分為機器語言、匯編語言和高級語言等。共一百四十四頁3.1.1 指令(zhlng)和機器語言三、機器語言機器語言:用二進制編碼表示每條指令,是計算機能夠直接識別和執(zhí)行的語言。目標(biāo)程序:用機器語言編寫(binxi)的程序。例如“13+25” ,在MCS-51中的機器碼為0 1 1 1 0 1 0 0 0 0 0 0 1 1 0 10 0 1 0 0 1 0 0 0 0 0 1 1 0 0 1用十六進制表示指令碼為:74H 0DH把13放到累加器A中24H 19H A加25,結(jié)果仍放回A中共一

4、百四十四頁3.1.2 匯編語言(hu bin y yn)匯編語言:用助記符、符號、數(shù)字等表示指令的程序語言。例如,上面的“13+25”的例子可寫成:匯編語言程序機器語言代碼MOV A,#0DH74H 0DHADD A,#19H24H 19H相對于機器語言來說,匯編語言容易理解(lji)和記憶。 匯編語言和機器語言都屬于低級語言。 共一百四十四頁3.1.3 匯編語言(hu bin y yn)指令格式一、MCS-51匯編語言指令格式由四部分組成,其一般格式如下:標(biāo)號(bioho): 操作碼 操作數(shù) ;注釋方括號中的內(nèi)容可以沒有,即可以沒有標(biāo)號、操作數(shù)和注釋,至少要有操作碼。其操作數(shù)部分最多可以是三

5、項:第1個操作數(shù) , 第2個操作數(shù) , 第3個操作數(shù)對MOV指令,有兩項,第1操作數(shù)常稱為目的操作數(shù),第2操作數(shù)稱為源操作數(shù)。共一百四十四頁3.1.3 匯編語言(hu bin y yn)指令格式例如(lr):START:MOV A,#23H ;23H A“START”為標(biāo)號“MOV”為操作碼“ A,#23H”為操作數(shù)“23H A”為注釋 共一百四十四頁3.1.3 匯編語言(hu bin y yn)指令格式二、MCS-51匯編指令構(gòu)成1、單字節(jié)指令指令中或者(huzh)沒有操作碼,或者(huzh)既包含有操作碼,也包含有操作數(shù),有兩種情況。1)指令中沒有操作碼:如 RET、RETI2)指令碼中包

6、含著對某個寄存器的操作如:“INC A”、“MUL AB”、“RL A”、“CLR C”、“INC DPTR”等指令。3)由指令碼中的r r r或i指定操作數(shù) 共一百四十四頁3.1.3 匯編語言指令(zhlng)格式這種情況是指令中使用(shyng)了Rn或Ri如“MOVRn,A”編碼格式為:1 1 1 1 1 r r rrrr的取值為:07,表示R0R7又如“MOV A,Ri”編碼格式為:1 1 1 0 0 1 1 ii取值為:0、1,表示R0、R12、雙字節(jié)指令一個字節(jié)表示操作碼,另一個字節(jié)表示操作數(shù)或操作數(shù)的地址。3、三字節(jié)指令一個字節(jié)表示操作碼,另兩個字節(jié)表示操作數(shù)或操作數(shù)的地址。共一

7、百四十四頁3.2 MCS-51單片機尋址方式(fngsh) 主要內(nèi)容(nirng)3.2.1 立即尋址3.2.2 寄存器尋址3.2.3 直接尋址3.2.4 寄存器間接尋址3.2.5 變址尋址3.2.6 位尋址3.2.7 指令尋址3.2.8 尋址空間及指令中的符號共一百四十四頁 尋址方式:就是指CPU尋找參與運算的操作數(shù)的方式,或者尋找數(shù)據(jù)保存位置的方式。7種尋址方式:立即數(shù)尋址、寄存器尋址、直接尋址、寄存器間接尋址、變址尋址、位尋址和指令尋址。尋址方式分兩類:操作數(shù)尋址和指令尋址,在7種尋址方式中,除了指令尋址之外,其余6種都屬于操作數(shù)尋址。 尋址方式是匯編語言(hu bin y yn)程序設(shè)

8、計中最基本的內(nèi)容之一,必須要十分熟悉。3.2 MCS-51單片機尋址方式(fngsh) 共一百四十四頁3.2.1 立即(lj)數(shù)尋址立即數(shù)尋址也叫立即尋址、常數(shù)尋址。其操作數(shù)就在指令中,是指令的一部分,緊跟在操作碼后面,用“#”符號(fho)作前綴,以區(qū)別地址。例如:MOV A,#2CH;2CH A MOV A,2CH;(2CH) A前者表示把2CH這個數(shù)送給累加器A,后者表示把片內(nèi)RAM中地址為2CH單元的內(nèi)容送給累加器A。 共一百四十四頁3.2.1 立即(lj)數(shù)尋址立即數(shù)也可以是16位的,如:MOVDPTR,#1234HMOVTL2,#2345HMOVRCAP2L,#3456H對于第2條

9、指令(zhlng),立即數(shù)的低8位送給了TL2,高8位送給了TH2;對于第3條指令,立即數(shù)的低8位送給了RCAP2L,高8位送給了RCAP2H。 共一百四十四頁3.2.2 寄存器尋址寄存器尋址:操作數(shù)在指令的寄存器中。指令中的寄存器包括:R0R7、A、B、DPTR。例如:MOVA,R7;(R7) AMOV36H,A;(A) 36HADDA,R0;(A)+(R0) A對于工作寄存器組的操作,必須要考慮PSW中RS1、RS0的值,確定當(dāng)前使用(shyng)的是哪一組寄存器以及它們的實際地址。下面指令中的目的操作數(shù)不是寄存器尋址:MOVPCON, #05H 共一百四十四頁3.2.2 寄存器尋址圖3-

10、1 寄存器尋址方式(fngsh)(INC R3)程序存儲器片內(nèi)RAM:+1PC00011011操作碼工作寄存器地址13H(R3)24H:00010r r r:PSWRS1RS0共一百四十四頁3.2.3 直接(zhji)尋址直接尋址:是指操作(cozu)存放在片內(nèi)RAM中,指令中給出操作數(shù)的地址。例如:MOVA,38H;(38H) A說明: (1)直接尋址方式可以訪問片內(nèi)RAM的低128字節(jié)和所有的特殊功能寄存器。(2)直接尋址不能夠訪問片內(nèi)RAM的高128字節(jié),高128字節(jié)只能夠間接訪問。對于特殊功能寄存器,既可以使用地址,也可以使用SFR名。例如:MOVA,P1 或 MOVA,90H 共一百

11、四十四頁3.2.4 寄存器間接(jin ji)尋址寄存器間接(jin ji)尋址:是指操作數(shù)存放在RAM中,指令中給出存放操作數(shù)地址的寄存器,通過寄存器內(nèi)的地址,CPU間接地訪問操作數(shù)。存放地址的寄存器稱為間址寄存器,在指令中,在寄存器前面加前綴“”表示。使用的間址寄存器:Ri(i=0、1,即指R0、R1)、SP、DPTR。寄存器間接尋址有以下幾種情況。 共一百四十四頁3.2.4 寄存器間接(jin ji)尋址一、使用Ri間接訪問片內(nèi)RAM間接訪問的范圍:256字節(jié)(包括(boku)低128字節(jié)和高128字節(jié)),但不包括特殊功能寄存器。例如:MOVA,Ri;(Ri) AMOVR0,A;(A)(

12、Ri)(Ri):表示Ri指向的單元,即單元的地址 (Ri):表示Ri指向單元中的數(shù)據(jù)操作過程如下頁圖3-3所示。共一百四十四頁3.2.4 寄存器間接(jin ji)尋址對使用SP間接訪問片內(nèi)RAM (在C語言中也可以訪問片外RAM) ,僅用在堆棧操作(cozu)中,見后面指令系統(tǒng)。 間接尋址(MOV A,R0)示意圖 62HA:62H98H 98HR0:片內(nèi)RAM共一百四十四頁3.2.4 寄存器間接(jin ji)尋址二、使用Ri間接訪問片外RAM間接訪問的范圍:片外RAM的64KB全空間。其指令只有兩條:MOVXA,Ri ;(P2) (Ri) AMOVXRi,A ;(A)(P2 Ri)注意:

13、 (1)P2中的值作為高8位地址,Ri中的值作為低8位地址; (2)如果P2不改變(gibin),則范圍為256B;(3)這兩條指令均為總線操作,相應(yīng)總線信號有效(高低8位地址、ALE、RD或WR)。共一百四十四頁3.2.4 寄存器間接(jin ji)尋址三、使用DPTR間接(jin ji)訪問片外RAM間接訪問的范圍:片外RAM的64KB全空間。其指令也是只有兩條:MOVXA,DPTR;(DPTR) AMOVXDPTR,A;(A)(DPTR)DPTR為16位地址。 共一百四十四頁3.2.5 變址尋址變址尋址:實為基址加偏移的間接尋址。指令中給出存放基址和偏移的寄存器?;刂芳拇嫫鳎篋PTR或

14、PC;偏移寄存器:累加器A。也在地址寄存器前面(qin mian)加上前綴“”。僅兩條指令:MOVC A,A+DPTR ;(A)+(DPTR) AMOVC A,A+PC ;(A)+(PC) A該指令是在程序存儲空間讀取數(shù)據(jù)。該指令的操作過程如圖3-4所示。 共一百四十四頁3.2.5 變址尋址圖3-4 變址尋址(MOVC A,A+DPTR)示意圖ROM:DPTR03E2H+ 0414H 38HA32H:A38H共一百四十四頁3.2.5 變址尋址變址尋址的空間:為程序(chngx)存儲器尋址范圍:若使用DPTR為基地址寄存器,尋址范圍為64KB;若使用PC為基地址寄存器,尋址空間在PC之后256字

15、節(jié)范圍內(nèi)。變址尋址主要用于查表操作 共一百四十四頁3.2.6 位尋址位尋址:是指操作數(shù)是二進制位數(shù)據(jù)、位地址(dzh)位操作數(shù)地址范圍:片內(nèi)RAM中20H2FH,SFR中可以按位尋址的位。位地址在指令中用bit表示。例如:SETBbitMOVC,bit 共一百四十四頁3.2.6 位尋址位地址的4種表示方式:1)直接位地址(00HFFH)。如32H2)字節(jié)地址帶位號。如20H.1,表示20H單元(dnyun)的第1位。3)特殊功能寄存器名帶位號。如P1.7,表示P1口的第7位。4)位符號地址。具體的:特殊功能寄存器SFR位名,如TR0等用偽指令 “BIT”定義的位符號,如: flag BIT 0

16、1H ;flag表示01H位共一百四十四頁3.2.7 指令(zhlng)尋址指令尋址:指令中的操作數(shù)給出轉(zhuǎn)移的目標(biāo)地址或目標(biāo)地址的一部分。指令尋址分為(fn wi)絕對尋址和相對尋址兩種方式。指令尋址用于控制轉(zhuǎn)移指令中。共一百四十四頁3.2.7 指令(zhlng)尋址一、絕對尋址絕對尋址:指令中的操作數(shù)給出轉(zhuǎn)移的16位目標(biāo)(mbio)地址。尋址范圍:64KB全空間。絕對尋址用在長轉(zhuǎn)移和長調(diào)用指令中,例如:LJMPSER_INT_T1;無條件轉(zhuǎn)移到T1中斷服務(wù)程序LCALLSUB_SORT;SUB_SORT調(diào)用排序子程序SUB_SORT為16位目標(biāo)地址標(biāo)號共一百四十四頁3.2.7 指令(zhln

17、g)尋址二、相對尋址相對尋址:是以當(dāng)前程序計數(shù)器PC值為基地址,加上指令中給出的偏移量rel,得到目標(biāo)位置的地址。即:目標(biāo)地址PCrelrel目標(biāo)地址PC偏移量rel為8位補碼,其值為-128+127。rel0表明(biomng)目標(biāo)地址小、源地址大,程序向回跳轉(zhuǎn);rel0,程序向前跳轉(zhuǎn)。共一百四十四頁3.2.7 指令(zhlng)尋址例如:JZFIRST;(A)0,跳轉(zhuǎn)到FIRSTDJNZR7,LOOP;(R7)-10,跳轉(zhuǎn)到LOOP說明:(1)在實際編程中,不需要計算(j sun)rel,rel由編譯器自動計算;(2)當(dāng)跳轉(zhuǎn)范圍超出了rel范圍,編譯器會提示,對程序做適當(dāng)調(diào)整即可。 共一百

18、四十四頁3.2.8 尋址空間(kngjin)及指令中的符號注釋一、尋址方式、尋址空間及范圍尋址方式操作數(shù)及尋址空間范圍立即數(shù)尋址在ROM中,隨指令讀入直接尋址片內(nèi)RAM中,低128字節(jié)和SFR寄存器尋址使用的寄存器:R0R7、A、B、C、DPTR 寄存器間接尋址片內(nèi)RAM:用Ri、SP;范圍256B,不含SFR片外RAM:用Ri、DPTR;范圍為64KB變址尋址用A+PC、A+DPTR;在ROM中;范圍分別為PC之后256B之內(nèi)和64KB全空間位尋址在位尋址區(qū)域;RAM的202FH和SFR中的位指令絕對尋址操作數(shù)是目標(biāo)地址;在ROM中; 64KB全空間指令相對尋址操作數(shù)是相對地址;在ROM中;

19、范圍-128127共一百四十四頁3.2.8 尋址空間及指令(zhlng)中的符號注釋二、指令中常用符號Rn:n=07。當(dāng)前選中的工作寄存器R0R7。Ri: i=0、1。當(dāng)前選中的工作寄存器組中可作為地址指針的R0和R1。#data:8位立即數(shù)。#data16:16位立即數(shù)。direct:8位片內(nèi)RAM單元地址,包括低128B和SFR,但不包括高128B。addr16:程序存儲空間的16位地址rel:補碼形式(xngsh)的8位地址偏移量。以下面指令的第一個字節(jié)為基地址,地址偏移量在 -128+127。 共一百四十四頁3.2.8 尋址空間(kngjin)及指令中的符號注釋bit:片內(nèi)RAM或SF

20、R中的直接位地址:間址寄存器的前綴符號,表示間接尋址。():表示中的內(nèi)容 (): 中的內(nèi)容是地址, ()表示由中指向的地址單元(dnyun)中的內(nèi)容如 (SP) : (SP)是寄存器中的內(nèi)容,是地址; (SP)是SP內(nèi)容所指向單元的數(shù)據(jù)。:邏輯與:邏輯或:邏輯異或、:指令操作流程,將內(nèi)容送到箭頭指向的地方 共一百四十四頁3.3 MCS-51單片機指令系統(tǒng)(zh ln x tn) 主要內(nèi)容3.3.1 數(shù)據(jù)傳送指令3.3.2 算術(shù)運算(yn sun)指令3.3.3 邏輯運算指令3.3.4 控制程序轉(zhuǎn)移指令3.3.5 位操作指令共一百四十四頁3.3 MCS-51單片機指令系統(tǒng)(zh ln x tn)

21、 指令概述MCS-51單片機指令系統(tǒng)有111條指令,分類如下。1、按字節(jié)分類單字節(jié)指令:49條;雙字節(jié)指令:45條三字節(jié)指令:17條2、按執(zhí)行(zhxng)時間分類單周期指令:64條;雙周期指令:45條四周期指令:2條(乘、除指令)共一百四十四頁3.3 MCS-51單片機指令系統(tǒng)(zh ln x tn) 3、按功能(gngnng)分類(分為5大類)數(shù)據(jù)傳送指令:29條算術(shù)運算指令:24條邏輯運算指令:24條控制程序轉(zhuǎn)移指令:17條位操作指令:17條MCS-51指令沒有復(fù)雜的尋址方式,并且助記符只有42種,所以單片機指令容易理解、容易記憶、容易掌握。 共一百四十四頁3.3.1 數(shù)據(jù)(shj)傳送

22、指令數(shù)據(jù)(shj)傳送是使用最頻繁的一類指令。所謂傳送,就是把源地址單元的內(nèi)容傳送到目的地址單元中去,而源地址單元中的內(nèi)容不變。數(shù)據(jù)傳送指令可以分為三組:普通傳送指令數(shù)據(jù)交換指令堆棧操作指令對程序狀態(tài)字的影響:這類指令一般不影響程序狀態(tài)字,只有目的操作數(shù)是累加器A時,影響標(biāo)志位P。共一百四十四頁3.3.1 數(shù)據(jù)(shj)傳送指令一、普通傳送指令普通傳送指令以助記符MOV為基礎(chǔ),分為:片內(nèi)數(shù)據(jù)(shj)存儲器傳送指令,用MOV片外數(shù)據(jù)傳送指令,用MOVX程序存儲器傳送指令,用MOVC共一百四十四頁3.3.1 數(shù)據(jù)傳送(chun sn)指令1、片內(nèi)數(shù)據(jù)存儲器傳送指令MOV 格式: MOV 目的操作

23、數(shù),源操作數(shù)源操作數(shù):可以是A、Rn、Ri、 direct、#data目的操作數(shù):可以是A、Rn、Ri、direct、DPTR以目的操作數(shù)的不同可以分為(fn wi)五個小組,共16條指令。 共一百四十四頁3.3.1 數(shù)據(jù)(shj)傳送指令(1)以A為目的操作數(shù)機器碼MOVA,Rn ;(Rn)A E8EFMOVA,direct ;(direct)A E5 directMOVA,Ri ;(Ri)A E6 E7 MOVA,#data ;data A 74 data工作寄存器Rn:R0R7Ri間接尋址寄存器:R0或R1本組4條指令都影響(yngxing)PSW中的P標(biāo)志位指令字節(jié)數(shù):1、2、1、2

24、共一百四十四頁3.3.1 數(shù)據(jù)傳送(chun sn)指令(2)以Rn為目的操作數(shù)MOVRn,A;(A) Rn MOVRn,direct;(direct) RnMOVRn,#data;data Rn本組指令(zhlng)都不影響PSW中的標(biāo)志位。指令字節(jié)數(shù):1、2、2 共一百四十四頁3.3.1 數(shù)據(jù)傳送(chun sn)指令(3)以直接地址(dzh)direct為目的操作數(shù)MOVdirect,A;(A) directMOVdirect,Rn;(Rn) directMOVdirect2,direct1;(direct1)direct2MOVdirect,Ri;(Ri) directMOVdirec

25、t,#data;data direct本組指令都不影響PSW中的標(biāo)志位指令字節(jié)數(shù):2、2、3、2、3 共一百四十四頁3.3.1 數(shù)據(jù)傳送(chun sn)指令(4)以間接地址Ri為目的(md)操作數(shù)MOVRi,A;(A) Rn MOVRi,direct;(direct) RnMOVRi,#data;data Rn本組指令都不影響PSW中的標(biāo)志位。 (5)以DPTR為目的操作數(shù)MOVDPTR,#data16;dataHDPH,dataLDPL該指令不影響PSW中的標(biāo)志位。共一百四十四頁3.3.1 數(shù)據(jù)傳送(chun sn)指令例3-1 設(shè)片內(nèi)RAM中(30H)=40H,(40H)=10H,分析以

26、下程序執(zhí)行后各單元及寄存器中的內(nèi)容。MOVR0,#30H;30H R0MOVA,R0;(R0) AMOVR1,A;(A) R1MOVB,R1;(R1) BMOV10H,#20H;20H 10H執(zhí)行上述指令(zhlng)后的結(jié)果為:(R0)=30H,(R1)=(A)=40H,(B)=10H,(10H)=20H共一百四十四頁3.3.1 數(shù)據(jù)(shj)傳送指令2、片外數(shù)據(jù)存儲器傳送指令MOVXMOVXA,Ri;(P2),(Ri) AMOVXRi,A;A (P2, Ri)MOVXA,DPTR;(DPTR) AMOVXDPTR,A;A (DPTR)第1和第3條指令是執(zhí)行總線讀操作(cozu),讀控制信號

27、RD有效;第2和第4條指令是執(zhí)行總線寫操作,寫控制信號WR有效。這組指令中第1、3兩條指令影響P標(biāo)志位,其它2條指令不影響任何標(biāo)志位。 共一百四十四頁3.3.1 數(shù)據(jù)(shj)傳送指令例3-2 設(shè)片外RAM空間(0203H)=6FH,分析(fnx)執(zhí)行下面指令后的結(jié)果。MOVDPTR,#0203H;0203H DPTRMOVXA,DPTR;(DPTR) AMOV30H,A;(A) 30HMOVA,#0FH;0FH AMOVXDPTR,A;(A) (DPTR)執(zhí)行結(jié)果為:(DPTR)=0203H,(30H)=6FH,(0203H)=(A)=0FH共一百四十四頁3.3.1 數(shù)據(jù)傳送(chun sn

28、)指令3、程序(chngx)存儲器傳送指令MOVC該類指令又稱為查表指令,經(jīng)常用于查表。這類指令只有以下2條單字節(jié)指令。MOVCA,A+DPTR ;(A)+(DPTR) AMOVCA,A+PC ;(A)+(PC) A前者叫遠程查表指令(64KB全空間),后者叫近程查表指令(PC處256B)。這兩條指令都影響P標(biāo)志位。共一百四十四頁3.3.1 數(shù)據(jù)(shj)傳送指令地址偏移量的計算方法使用第2條指令的關(guān)鍵,是準(zhǔn)確計算從本指令到數(shù)據(jù)所在處的地址偏移量。將分為(fn wi)兩段:表首偏移和表內(nèi)偏移地址偏移量表首偏移量表內(nèi)偏移量表首偏移量為:表首偏移量表首地址PC共一百四十四頁3.3.1 數(shù)據(jù)(shj

29、)傳送指令例3-3 從程序存儲器2000H單元開始存放09的平方值,編寫程序,以DPTR或PC作為基址寄存器,執(zhí)行查表指令得到(d do)6的平方值,并且送到片內(nèi)RAM中的30H單元。用以DPTR為基址寄存器的查表指令,其程序如下:MOVDPTR,#2000HMOVA,#6;表內(nèi)偏移MOVCA,A+DPTR MOV30H,A通過本例對兩條查表指令比較可以看出,以DPTR為基址寄存器的查表指令使用簡單、方便。共一百四十四頁3.3.1 數(shù)據(jù)(shj)傳送指令下面用以PC為基址寄存器,實現(xiàn)查表功能(gngnng)。設(shè)MOVC指令所在的地址為1FA0H,則表首偏移量2000HPC 2000H(1FA0

30、H1)5FH表內(nèi)偏移量為6,總偏移量為5FH6。其程序為:MOVA,#5FH;表首偏移送AADDA,#06H;計算總偏移MOVCA,A+PC;讀表中數(shù)據(jù)MOV30H,A 共一百四十四頁3.3.1 數(shù)據(jù)(shj)傳送指令二、數(shù)據(jù)交換指令數(shù)據(jù)交換指令則數(shù)據(jù)作雙向傳送,傳送后,前一個操作數(shù)傳送到了后一個操作數(shù)所保存的地方,后一個操作數(shù)傳送到了前一個操作數(shù)所保存的地方。數(shù)據(jù)交換指令要求第一個操作數(shù)必須為累加器A。共5條指令,分為(fn wi)字節(jié)交換和半字節(jié)交換兩個類型。 共一百四十四頁3.3.1 數(shù)據(jù)傳送(chun sn)指令1、字節(jié)交換指令(zhlng)XCHA,Rn;ARnXCHA,direct

31、;A(direct)XCHA,Ri;A(Ri)這3條指令都影響P標(biāo)志位2、低半字節(jié)交換指令XCHDA,Ri ;A03(Ri) 0 3這條指令影響P標(biāo)志位3、A自身半字節(jié)交換指令SWAPA ;A 03A47這條指令不影響任何標(biāo)志位共一百四十四頁3.3.1 數(shù)據(jù)傳送(chun sn)指令例3-4 設(shè)R0=30H,(30H)=4AH,A=28H,分別(fnbi)執(zhí)行“XCH A,R0”、 “XCH A,R0” “XCHD A,R0”、“SWAP A”后各單元的內(nèi)容。執(zhí)行:XCH A,R0 ;后(A)=30H,(R0)=28H執(zhí)行:XCH A,R0 ;后(A)=4AH,(30H)=28H執(zhí)行:XCHD

32、 A,R0 ;后(A)=2AH,(30H)=48H執(zhí)行:SWAP A;后(A)=82H,(30H)=4AH共一百四十四頁3.3.1 數(shù)據(jù)(shj)傳送指令三、堆棧操作指令堆棧操作有進棧和出棧兩條指令,常用于保存(bocn)和恢復(fù)現(xiàn)場。PUSHdirect;先(SP) +1 SP, ;后(direct)(SP)POPdirect;先(SP) direct, ;后(SP) -1 SPPUSH為進棧操作, POP為出棧操作。當(dāng)操作數(shù)是累加器A時,影響P標(biāo)志位。 共一百四十四頁3.3.1 數(shù)據(jù)(shj)傳送指令例3-5 若在程序存儲器中2000H單元開始的區(qū)域依次存放著09的平方值,編寫程序,用查表指

33、令讀取3的平方值,并存于片內(nèi)RAM中30H單元,要求操作(cozu)后保持DPTR中原來的內(nèi)容不變。為了使用DPTR,并且保持原來的內(nèi)容不變,應(yīng)該在使用DPTR前使其進棧,使用后再出?;謴?fù)其原來內(nèi)容。程序如下: 共一百四十四頁3.3.1 數(shù)據(jù)傳送(chun sn)指令注意:(1)進棧與出棧必須成對使用(shyng);(2)先進棧的必須后出棧,后進棧的必須先出棧,否則會出現(xiàn)DPL與DPH內(nèi)容互換。 PUSHDPHPUSHDPLMOVDPTR,#2000HMOVA,#3MOVCA,A+DPTRMOV30H,APOPDPLPOPDPH共一百四十四頁3.3.2 算術(shù)運算(yn sun)指令指令內(nèi)容:包

34、括(boku)加、減、乘、除、BCD碼調(diào)整等指令,共有24條。CPU的運算能力:只能執(zhí)行無符號二進制整數(shù)運算。但借助于溢出標(biāo)志位,實現(xiàn)有符號數(shù)的補碼運算;借助于進位標(biāo)志,可以實現(xiàn)多精度加、減運算。對標(biāo)志位的影響:結(jié)果會影響進位標(biāo)志CY、半進位標(biāo)志AC、溢出標(biāo)志OV、奇偶標(biāo)志位P,但加1和減1指令不影響這些標(biāo)志位。共一百四十四頁3.3.2 算術(shù)(sunsh)運算指令指令中的操作數(shù):第一個操作數(shù):多數(shù)為累加器A,第二個操作數(shù):可以是工作寄存器Rn、直接地址數(shù)據(jù)、間接地址數(shù)據(jù)和立即數(shù)。即:第一個操作數(shù):多為A第二個操作數(shù):Rn、direct、Ri、#data為了便于(biny)討論,將其分為5組。

35、共一百四十四頁3.3.2 算術(shù)(sunsh)運算指令一、加法指令分為不帶進位加法、帶進位加法和加1指令1、不帶進位加法指令A(yù)DDADD A,Rn;(A)+(Rn)AADD A,direct;(A)+(direct)AADD A,Ri;(A)+(Ri)AADD A,#data;(A)+ dataA 這組指令影響標(biāo)志位CY、AC、OV和P,溢出標(biāo)志OV只對有符號運算(yn sun)有意義。 共一百四十四頁3.3.2 算術(shù)(sunsh)運算指令2、帶進位加法指令A(yù)DDCADDCA,Rn;(A)+(Rn)+ CYAADDCA,direct ;(A)+(direct)+CYAADDCA,Ri;(A)+(

36、Ri)+CYAADDCA,#data;(A)+data+CYA 這組指令影響標(biāo)志位CY、AC、OV和P,溢出(y ch)標(biāo)志OV只對有符號運算有意義。 共一百四十四頁3.3.2 算術(shù)運算(yn sun)指令例3-7 試編寫程序,把R1R2和R3R4中的兩個(lin )16位數(shù)相加,結(jié)果存放在R5R6中。思路:先對兩個低字節(jié)相加,再對兩個高字節(jié)相加。 (1)低字節(jié)R2和R4相加:使用ADD,其和存放于R6中; (2)高字節(jié)R1和R3相加:使用ADDC,其和存放于R5中。程序段如下頁。 共一百四十四頁3.3.2 算術(shù)運算(yn sun)指令程序段如下(rxi):MOVA,R2;(R2) AADDA

37、,R4;(A)+(R4) AMOVR6,A;(A) R6MOVA,R1;(R1) AADDCA,R3;(A)+(R3)+CYAMOVR5,A;(A) R5 共一百四十四頁3.3.2 算術(shù)運算(yn sun)指令3、加1指令I(lǐng)NCINCA;(A)+ 1 AINCRn;(Rn)+ 1 RnINCdirect;(direct)+ 1 directINCRi;(Ri)+ 1 (Ri)INCDPTR;(DPTR)+ 1 DPTR這組指令除了第一條影響(yngxing)標(biāo)志位P之外,其它指令不影響標(biāo)志位。 共一百四十四頁3.3.2 算術(shù)(sunsh)運算指令二、減法指令減法指令分為(fn wi)帶借位減法

38、指令和減1指令。1、帶借位減法指令SUBBSUBBA,Rn;(A)-(Rn)-CYASUBBA,direct;(A)-(direct)- CYASUBBA,Ri;(A)-(Ri)-CYASUBBA,#data;(A)-data-CYA這組指令影響標(biāo)志位CY、AC、OV和P,溢出標(biāo)志OV只對有符號數(shù)運算有意義。 共一百四十四頁3.3.2 算術(shù)運算(yn sun)指令由于(yuy)MCS-51單片機沒有不帶借位的減法指令,對于不帶借位的減法運算,可以先對CY清0,然后再用SUBB命令操作。例3-8 試編寫實現(xiàn)“R2R1 R3”功能的程序。程序段如下:MOVA,R2CLRC;對CY清0SUBBA,R

39、1MOVR3,A 共一百四十四頁3.3.2 算術(shù)運算(yn sun)指令1、減1指令(zhlng)DECDECA;(A) - 1 ADECRn;(Rn) - 1 RnDECdirect;(direct) - 1 directDECRi;(Ri) - 1 (Ri)這組指令除了第一條影響標(biāo)志位P之外,其它指令不影響標(biāo)志位。 共一百四十四頁3.3.2 算術(shù)運算(yn sun)指令三、乘法指令(zhlng)MUL multiplication在MCS-51單片機中,乘法指令只有一條。MUL AB ;(A)(B) B(高字節(jié))、A(低字節(jié))操作:把累加器A和寄存器B中兩個8位無符號數(shù)相乘,所得的16位積

40、的高字節(jié)存放在B中,低字節(jié)存放在A中。對標(biāo)志位的影響:影響P、OV若乘積大于0FFH,OV置1,說明高字節(jié)B中不為0,否則OV清0;影響P標(biāo)志位;對CY總是清0;不影響AC。 共一百四十四頁3.3.2 算術(shù)(sunsh)運算指令例 設(shè)(A)50H,(B)0A0H,分析執(zhí)行(zhxng)指令“MULAB”后的結(jié)果。 指令執(zhí)行后的結(jié)果為:(B)32H,(A)00H即乘積為3200H標(biāo)志位: Cy0、OV1、P=0、AC不變。共一百四十四頁3.3.2 算術(shù)運算(yn sun)指令四、除法指令DIV division在MCS-51單片機中,除法指令只有一條。DIV AB;(A)/(B),商A、余B操作

41、:A的內(nèi)容除以B的內(nèi)容(均為無符號整數(shù)),所得(su d)結(jié)果的整數(shù)商存放在A中,余數(shù)存放在B中。對標(biāo)志位的影響:如果除數(shù)(B)=0,則標(biāo)志位OV置1,否則清0;影響P標(biāo)志位;CY總是被清0;不影響AC。共一百四十四頁3.3.2 算術(shù)運算(yn sun)指令五、十進制調(diào)整指令DA十進制調(diào)整指令只有一條。DAA;調(diào)整A內(nèi)容為BCD碼調(diào)整方法:若1)A的低(高)4位為十六進制(sh li jn zh)的AF2)或者標(biāo)志位AC(CY)為1則A的內(nèi)容加06H(60H)調(diào)整。 適用場合:用于ADD或ADDC指令后,且只能用于壓縮的BCD碼相加結(jié)果的調(diào)整。對標(biāo)志位的影響:影響CY、AC和P,但不影響OV。

42、共一百四十四頁3.3.2 算術(shù)(sunsh)運算指令例3-9 試編寫程序,對兩個十進制數(shù)76、58相加,并且保持其結(jié)果為十進制數(shù),把結(jié)果存于R3中。程序段如下:MOVA,#76H;76=4CHADDA,#58H;58=3AHDAA;調(diào)整(tiozhng)前為CEHMOVR3,A;調(diào)整后為134H程序執(zhí)行后,R3中的內(nèi)容為34H,進位標(biāo)志CY為1,則最后結(jié)果為134。編程時,注意對BCD碼的寫法:要按十進制數(shù)格式寫,然后在其后面加上H。 共一百四十四頁3.3.3 邏輯操作(cozu)指令邏輯操作指令包括與、或、異或、清0、求反、移位等操作指令,共有24條。指令中的操作數(shù):A、Rn、direct、

43、Ri、#data對標(biāo)志位的影響:一般(ybn)不影響標(biāo)志位。但是:(1)若累加器A為目的操作數(shù),會影響P;(2)如果帶進位位作移位操作,會影響奇偶標(biāo)志位P、進位標(biāo)志CY。下面將其分為:與、或、異或、清0與求反、移位,5組進行討論。共一百四十四頁3.3.3 邏輯操作(cozu)指令一、邏輯與指令A(yù)NLANLA,Rn ;(A)(Rn) AANLA,direct ;(A)(direct) AANLA,Ri ;(A)(Ri) AANLA,#data ;(A) data AANLdirect,A ;(direct)(A) directANLdirect,#data ;(direct)datadirect

44、邏輯與操作往往用于使某些位清0。這組指令的僅前4條只影響(yngxing)奇偶標(biāo)志位P。 共一百四十四頁3.3.3 邏輯操作(cozu)指令二、邏輯或指令ORLORLA,Rn ;(A)(Rn) AORLA,direct ;(A)(direct) AORLA,Ri ;(A)(Ri) AORLA,#data ;(A)data AORLdirect,A ;(direct)(A) directORLdirect,#data ;(direct)datadirect邏輯或操作往往用于使某些(mu xi)位置1。這組指令的僅前4條只影響奇偶標(biāo)志位P。 共一百四十四頁3.3.3 邏輯操作(cozu)指令三、邏

45、輯異或指令XRL exclusive or XRLA,Rn ;(A) (Rn) AXRLA,direct ;(A) (direct) AXRLA,Ri ;(A) (Ri) AXRLA,#data ;(A) data AXRLdirect,A ;(direct) (A) directXRLdirect,#data ;(direct) datadirect邏輯異或操作往往用于使某些(mu xi)位取反。用1異或使對應(yīng)位取反這組指令的僅前4條只影響奇偶標(biāo)志位P。 共一百四十四頁3.3.3 邏輯操作(cozu)指令例3-10 寫出實現(xiàn)以下(yxi)各功能的指令:1)只對累加器A中的1、3、5位清0;2

46、)只對A中的2、4、6位置1;3)只對A中的0、1、6、7位取反。對應(yīng)指令如下:ANLA,#11010101BORLA,#01010100B XRLA,#11000011B 共一百四十四頁3.3.3 邏輯(lu j)操作指令四、累加器A清0和求反指令CLRA;0 ACPLA;(A) A前一條指令是對A清0,該指令影響奇偶(q u)標(biāo)志位P。后一條指令是對A求反,不影響任何標(biāo)志位。CPL(Converse Position Logical) 共一百四十四頁3.3.3 邏輯操作(cozu)指令四、循環(huán)移位指令 repetition A循環(huán)左移: RL A ;A循環(huán)右移: RR A ;A帶進位(jn

47、wi)循環(huán)左移 :RLC A ;A帶進位循環(huán)右移 :RRC A ;說明:(1)這4條指令,每執(zhí)行一次只 移動1位;(2)左移一次相當(dāng)于乘以2,右移一次相當(dāng)于除以2。對標(biāo)志位影響:僅后兩條指令影響CY和Pa7 a0a7 a0a7 a0CYa7 a0CY共一百四十四頁3.3.4 控制程序轉(zhuǎn)移(zhuny)指令計算機功能(gngnng)的強弱,主要取決于轉(zhuǎn)移類指令的多少與功能(gngnng),特別是條件轉(zhuǎn)移指令。MCS-51單片機有17條轉(zhuǎn)移類指令,包括:無條件轉(zhuǎn)移指令條件轉(zhuǎn)移指令子程序調(diào)用返回指令等對標(biāo)志位影響:只有比較轉(zhuǎn)移指令影響進位標(biāo)志CY,其它指令不影響標(biāo)志位。下面將其分為4組進行討論。 共

48、一百四十四頁3.3.4 控制程序轉(zhuǎn)移(zhuny)指令一、無條件轉(zhuǎn)移指令無條件轉(zhuǎn)移指令:當(dāng)程序執(zhí)行該指令后,程序無條件地轉(zhuǎn)移到指定的地址(dzh)去執(zhí)行。為指令尋址包括短轉(zhuǎn)移、長轉(zhuǎn)移和間接轉(zhuǎn)移3條指令1、短轉(zhuǎn)移指令SJMP(相對轉(zhuǎn)移指令)SJMPrel;(PC)+ relPCrel:相對轉(zhuǎn)移偏移量,有符號數(shù),128127,負數(shù)表示向回跳轉(zhuǎn),正數(shù)表示向前跳轉(zhuǎn)。指令實際寫為:“SJMP 目標(biāo)地址標(biāo)號”共一百四十四頁3.3.4 控制程序轉(zhuǎn)移(zhuny)指令2、長轉(zhuǎn)移指令LJMPLJMPaddr16 ;addr16 PC由于程序的目標(biāo)地址是16位,因此程序可以跳轉(zhuǎn)到64KB程序存儲器空間的任何地方。

49、為指令絕對尋址指令的實際(shj)編寫形式為:LJMP 目標(biāo)地址標(biāo)號共一百四十四頁3.3.4 控制程序轉(zhuǎn)移(zhuny)指令3、間接轉(zhuǎn)移指令JMP也叫散轉(zhuǎn)指令、多分支轉(zhuǎn)移指令。JMP A+DPTR ;(A)+(DPTR)PCDPTR為基址,A為相對偏移(pin y),在64KB范圍內(nèi)無條件轉(zhuǎn)移。說明:(1)DPTR一般為確定的值,累加器A為變值,根據(jù)A的值轉(zhuǎn)移到不同的地方,因此該指令也叫散轉(zhuǎn)指令。(2)在使用中,往往與一個轉(zhuǎn)移指令表一起實現(xiàn)多分支轉(zhuǎn)移。 共一百四十四頁3.3.4 控制程序轉(zhuǎn)移(zhuny)指令例3-13 分析下面多分支轉(zhuǎn)移程序段。MOVB,#3MULAB;開始時(A)=0、1、

50、2MOVDPTR,#TABLE;表首地址(dzh)送DPTRJMPA+DPTR;根據(jù)A值轉(zhuǎn)移TABLE:LJMPTAB0;(A)=0時轉(zhuǎn)到TAB0執(zhí)行LJMPTAB1;(A)=3時轉(zhuǎn)到TAB1執(zhí)行LJMPTAB2;(A)=6時轉(zhuǎn)到TAB2執(zhí)行.程序中,根據(jù)累加器A的開始值(0、1、2)轉(zhuǎn)移到相應(yīng)的TAB0TAB2分支去執(zhí)行。共一百四十四頁3.3.4 控制程序轉(zhuǎn)移(zhuny)指令一、條件轉(zhuǎn)移指令當(dāng)指令中條件滿足時,程序轉(zhuǎn)到指定位置執(zhí)行,條件不滿足時,程序順序(shnx)執(zhí)行。條件轉(zhuǎn)移指令有三種:判斷累加器A轉(zhuǎn)移指令2條比較轉(zhuǎn)移指令4條循環(huán)轉(zhuǎn)移指令2條這類指令都屬于相對轉(zhuǎn)移,轉(zhuǎn)移范圍均為1281

51、27。需要注意的是:注釋中的PC值,均為下一條指令的地址值。 共一百四十四頁3.3.4 控制程序轉(zhuǎn)移(zhuny)指令1、判斷轉(zhuǎn)移指令判斷A為0轉(zhuǎn)移:JZ rel;(A)0, (PC)+ relPC;(A)0, 順序執(zhí)行判斷A非0轉(zhuǎn)移:JNZ rel;(A)0, (PC)+ relPC;(A)0, 順序執(zhí)行指令的實際編寫形式分別為:JZ 目標(biāo)(mbio)地址標(biāo)號和JNZ 目標(biāo)地址標(biāo)號 共一百四十四頁3.3.4 控制程序轉(zhuǎn)移(zhuny)指令例3-14 試編寫程序,把片外RAM地址從2000H開始的數(shù)據(jù),傳送到片內(nèi)RAM地址從30H開始的單元,直到出現(xiàn)(chxin)0為止。程序段如下:MOVDP

52、TR,#2000HMOVR0,#30HLOOP:MOVXA,DPTR;讀取數(shù)據(jù)MOVR0,A;保存INCR0INCDPTRJNZLOOP;(A)0跳轉(zhuǎn)SJMP$;程序停留到此 共一百四十四頁3.3.4 控制程序轉(zhuǎn)移(zhuny)指令2、比較轉(zhuǎn)移指令CJNE比較轉(zhuǎn)移指令功能較強,共有4條指令 ,一般格式為:CJNE操作數(shù)1,操作數(shù)2,rel (目標(biāo)標(biāo)號)指令功能:兩個操作數(shù)做比較,若不等則轉(zhuǎn)移,否則順序執(zhí)行(zhxng)。具體形式如下,第一條:CJNEA,direct,rel;若(A)(direct),則(PC) +relPC, 即轉(zhuǎn)移;否則順序執(zhí)行且(A)(direct),0CY;(A)(di

53、rect),1CY共一百四十四頁3.3.4 控制程序轉(zhuǎn)移(zhuny)指令CJNEA,#data,rel ;若(A) data,則(PC) +relPC, 即轉(zhuǎn)移;否則(fuz)順序執(zhí)行且(A)data, 0CY;(A) data, 1CYCJNERn,#data,rel ;若(Rn) data,則(PC) +relPC, 即轉(zhuǎn)移;否則順序執(zhí)行且(Rn)data, 0CY;(Rn)data, 1CYCJNERi,#data,rel ;若(Ri) data則(PC) +relPC, 即轉(zhuǎn)移;否則順序執(zhí)行且(Ri)data,0CY;(Ri)data, 1CY可見這4條指令會影響進位標(biāo)志CY共一百四

54、十四頁3.3.4 控制程序轉(zhuǎn)移(zhuny)指令3、循環(huán)轉(zhuǎn)移指令DJNZ循環(huán)轉(zhuǎn)移指令共有兩條指:DJNZRn,rel ;(Rn) -1Rn;若(Rn)0,則(PC)+ relPC ,否則(fuz)順序執(zhí)行DJNZ direct,rel;(Rn) -1direct;若(direct)0,則(PC)+relPC ,否則順序執(zhí)行指令的實際編寫形式為:DJNZRn,標(biāo)地址標(biāo)號DJNZdirect,目標(biāo)地址標(biāo)號控制循環(huán)變量控制循環(huán)變量共一百四十四頁3.3.4 控制程序轉(zhuǎn)移(zhuny)指令例3-15 試編寫程序,統(tǒng)計片內(nèi)RAM中從40H單元開始的20個單元中0的個數(shù),結(jié)果存于R2中。用R0作間址寄存器讀

55、取數(shù)據(jù)用JNZ或CJNE,判斷數(shù)據(jù)是否(sh fu)為0用R2記錄0的個數(shù)用DJNZ、R7控制循環(huán)共一百四十四頁3.3.4 控制程序轉(zhuǎn)移(zhuny)指令程序段一(用JNZ判斷數(shù)據(jù)是否為0):MOVR0,#40H;R0指向40HMOVR7,#20;R7控制循環(huán)MOVR2,#0;R2存放結(jié)果(ji gu)LOOP:MOVA,R0JNZNEXT;(A)0轉(zhuǎn)INCR2NEXT:INCR0;修改指針R0DJNZR7,LOOP共一百四十四頁3.3.4 控制程序轉(zhuǎn)移(zhuny)指令程序段二 (用CJNE判斷數(shù)據(jù)是否為0):MOVR0,#40H;R0指向40HMOVR7,#20;R7控制循環(huán)MOVR2,#

56、0;R2存放(cnfng)結(jié)果LOOP:CJNER0,#0,NEXTINCR2NEXT:INCR0DJNZR7,LOOP共一百四十四頁3.3.4 控制程序轉(zhuǎn)移(zhuny)指令三、子程序調(diào)用和返回(fnhu)指令這類指令有3條,一條調(diào)用,兩條返回。1、子程序調(diào)用指令(也叫長調(diào)用指令)LCALLaddr16;(SP)+1SP、(PC70)(SP),;(SP)+1SP、(PC158)(SP),;addr16PC2、子程序返回指令RET ;(SP)PC158 、(SP)-1SP, (SP)PC70、(SP)-1SP 共一百四十四頁3.3.4 控制程序轉(zhuǎn)移(zhuny)指令3、中斷(zhngdun)服

57、務(wù)程序返回指令RETI;(SP)PC158 、(SP)-1SP, ;(SP)PC70、(SP)-1SP “RETI”除了具有“RET”的功能外,還將開放中斷邏輯。四、空操作指令NOP;延時一個機器周期常用于延時共一百四十四頁3.3.4 控制程序轉(zhuǎn)移(zhuny)指令還有兩條指令:以上只有15條指令,剩余的兩條指令是:AJMPACALL稱為絕對轉(zhuǎn)移(短轉(zhuǎn)移)指令和絕對子程序調(diào)用(短調(diào)用)指令。初識這兩條指令:這兩條指令的轉(zhuǎn)移范圍是絕對劃定的2KB,用不好會出現(xiàn)錯誤,并且其編碼也不好理解(見附錄B)。唯一的優(yōu)點只是比“LJMP”和“LCALL” 少一個字節(jié),在存儲器容量大、價格低的今天,其唯一的優(yōu)

58、點也沒有意義,所以沒有必要(byo)使用這兩條指令。 共一百四十四頁3.3.5 位操作指令(zhlng)在進行位操作時,位累加器C即為進位標(biāo)志CY。位地址區(qū)域:(1)片內(nèi)RAM字節(jié)地址20H2FH單元中連續(xù)的128個位(位地址為00H7FH);(2)部分SFR中的位,特別是累加器A和寄存器B中的位,與00H7FH位一樣,都可以作軟件(run jin)標(biāo)志或位變量。共一百四十四頁3.3.5 位操作指令(zhlng)位地址的4種表示方式(fngsh):1)直接位地址(00HFFH),如18H。2)字節(jié)地址帶位號,如20H.0,表示20H單元的第0位。3)特殊功能寄存器名帶位號,如P2.3,表示P2

59、口的第3位。4)位符號地址,具體的:特殊功能寄存器SFR位名,如TR0等用偽指令 “BIT”定義的位符號,如: flag BIT 05H ;flag表示05H位共一百四十四頁3.3.5 位操作指令(zhlng)例如,用上述4種方式表示PSW(D0H)中的第2位,分別為:D2H、D0H.2、PSW.2、OV。 位操作指令共有17條,可以將其分成(fn chn)三組:位數(shù)據(jù)傳送指令2條位邏輯操作指令10條位控制轉(zhuǎn)移指令5條位操作的操作數(shù): C、bit共一百四十四頁3.3.5 位操作指令(zhlng)一、位傳送指令(zhlng)MOVC,bit;(bit) CMOVbit,C;(C) bit例3-1

60、6 編寫程序,把片內(nèi)RAM中07H位的數(shù)值,傳送到ACC.0位。程序段如下:MOVC,07HMOVACC.0,C注意:位之間不能夠直接傳送,必須借助于C共一百四十四頁3.3.5 位操作指令(zhlng)二、位邏輯操作指令位邏輯操作指令包括(boku)位清0、位置1、位取反、位與、位或,共10條指令。1、位清0指令CLRC;0 CCLRbit;0 bit2、位置1指令SETBC;1 CSETBbit;1 bit 共一百四十四頁3.3.5 位操作指令(zhlng)3、位取反指令(zhlng)(Converse Position Logical)CPLC;(C) CCPLbit;(bit) bit4

溫馨提示

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

評論

0/150

提交評論