第3章8051指令系統(tǒng)知識分享_第1頁
第3章8051指令系統(tǒng)知識分享_第2頁
第3章8051指令系統(tǒng)知識分享_第3頁
第3章8051指令系統(tǒng)知識分享_第4頁
第3章8051指令系統(tǒng)知識分享_第5頁
已閱讀5頁,還剩101頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第3章8051指令系統(tǒng)

(課時:12學(xué)時)教學(xué)目的

指令和指令系統(tǒng)的概念與分類。掌握指令的格式和尋址方式。掌握數(shù)據(jù)傳送、算術(shù)運算、邏輯運算、控制轉(zhuǎn)移和位操作指令的功能和應(yīng)用。學(xué)習(xí)重點和難點指令的尋址方式。控制轉(zhuǎn)移指令和位操作指令。第3章8051指令系統(tǒng)

3.1匯編語言3.2數(shù)據(jù)傳送指令3.3算術(shù)運算指令3.4邏輯操作指令3.5控制程序轉(zhuǎn)移類指令3.6位操作類指令本章小結(jié)習(xí)題

3.1匯編語言3.1.1指令系統(tǒng)分類3.1.2指令格式3.1.3尋址方式3.1.4尋址空間及符號注釋

指令系統(tǒng)分類(一)按照指令的功能劃分,8051指令可分為以下五類:數(shù)據(jù)傳送類指令(29條)算術(shù)運算類指令(24條)邏輯運算類指令(24條)控制轉(zhuǎn)移類指令(17條)位操作類指令(17條)

指令系統(tǒng)分類(二)按照指令占用的存儲空間可分為:單字節(jié)指令(49條)雙字節(jié)指令(45條)三字節(jié)指令(17條)按照指令的執(zhí)行時間可分為:單周期指令(64條)雙周期指令(45條)四周期指令(2條,乘、除法指令)

3.1.2指令格式

8051匯編語言指令由操作碼段和操作數(shù)字段兩部分組成。

匯編語言指令格式

[標(biāo)號:]操作碼助記符[目的操作數(shù)][,源操作數(shù)][;注釋]

機(jī)器語言指令格式雙字節(jié)指令格式

操作碼代碼操作數(shù)或者地址

三字節(jié)指令格式

操作碼代碼操作數(shù)或地址,操作數(shù)或地址

3.1.3尋址方式

基本概念尋址就是尋找指令中操作數(shù)或操作數(shù)所在地址。

尋址方式就是找到存放操作數(shù)的地址,并把操作數(shù)提取出來的方法,即尋找操作數(shù)或者是操作數(shù)地址的方法。

8051單片機(jī)尋址方式共有7種:寄存器尋址、直接尋址、立即數(shù)尋址、寄存器間接尋址、變址尋址、相對尋址和位尋址。

1.寄存器尋址

寄存器尋址就是操作數(shù)存放在寄存器中,指令中指定的寄存器的內(nèi)容就是操作數(shù)。在寄存器尋址方式中以符號名稱來表示寄存器。寄存器尋址方式的尋址范圍包括:通用工作寄存器——有4組共32個通用工作寄存器。部分專用寄存器——累加器A、B寄存器、DPTR寄存器。2.直接尋址

直接尋址方式就是在指令中直接給出操作數(shù)所在存儲單元的地址。此時,指令中操作數(shù)部分是操作數(shù)所在地址。

直接尋址方式的尋址范圍是內(nèi)部RAM,具體包括:片內(nèi)RAM的128個單元——在指令中以直接地址給出。特殊功能寄存器(SFR)——既可使用它們的地址,也可使用它們的名字。3.立即數(shù)尋址

立即數(shù)尋址就是操作數(shù)在指令中直接給出,或者說指令操作碼后面立即給出一字節(jié)或兩字節(jié)操作數(shù)。指令中給出的操作數(shù)是立即數(shù),立即數(shù)前加“#”號標(biāo)志,以區(qū)別直接尋址中的直接地址。16位立即數(shù)傳送指令“MOVDPTR,#datal6”,其中#data16是一個16位立即數(shù)。4.寄存器間接尋址

寄存器間接尋址是把指定寄存器的內(nèi)容作為操作數(shù)地址,該地址所指定的單元內(nèi)容作為操作數(shù)。

為了區(qū)分寄存器尋址和寄存器間接尋址,在寄存器間接尋址中,所用到的寄存器的前面要加間接尋址符“@”。寄存器R0、R1和數(shù)據(jù)指針DPTR可以作為間接尋址寄存器。

寄存器間接尋址示意圖

例如:寄存器R0內(nèi)容為30H,片內(nèi)RAM30H單元的內(nèi)容為45H。解:指令“MOVA,R0”的功能是將R0的內(nèi)容30H傳送給累加器A,指令執(zhí)行結(jié)果是累加器A中的內(nèi)容為30H。指令“MOVA,@R0”的功能是將R0的內(nèi)容30H作為操作數(shù)的地址,根據(jù)這一地址找到內(nèi)部RAM30H單元,將其內(nèi)容45H傳送至累加器A,指令執(zhí)行結(jié)果是累加器A中內(nèi)容為45H。4.寄存器間接尋址5.變址尋址(基址寄存器+變址寄存器間接尋址)

變址尋址是以DPTR或者PC作為基址寄存器,其內(nèi)容為基地址,以累加器A作為變址寄存器,其內(nèi)容為變址,并將兩個寄存器內(nèi)容也就是基址和變址相加,形成16位操作數(shù)地址。然后在程序存儲器中找到該地址所對應(yīng)的單元,其內(nèi)容即為操作數(shù)。

變址尋址示意圖

例如:指令“MOVCA,@A+DPTR”是變址尋址。解:假設(shè)DPTR的內(nèi)容為2030H,累加器A的內(nèi)容為12H。該指令的功能是將2030H和12H相加,得到2042H作為操作數(shù)地址,在程序存儲器中找到2042H單元,將其內(nèi)容送至累加器A。

5.變址尋址(基址寄存器+變址寄存器間接尋址)

6.相對尋址

相對轉(zhuǎn)移指令執(zhí)行時,是以當(dāng)前的PC值加上指令中規(guī)定的偏移量rel而形成實際的轉(zhuǎn)移地址。這里所說的PC的當(dāng)前值是執(zhí)行完相對轉(zhuǎn)移指令后的PC值。

一般將相對轉(zhuǎn)移指令操作碼所在地址稱為源地址,轉(zhuǎn)移后的地址稱為目的地址。于是有:

目的地址=源地址+相對轉(zhuǎn)移指令本身字節(jié)數(shù)+rel相對尋址只出現(xiàn)在相對轉(zhuǎn)移指令中,以修正PC的方式來控制程序的轉(zhuǎn)移目的。相對轉(zhuǎn)移指令操作示意圖

例如:在程序存儲器中2000H單元有一條雙字節(jié)的相對轉(zhuǎn)移指令“SJMP75H”。解:程序存儲器2000H、2001H單元的內(nèi)容80H、75H是“SJMP75H”的機(jī)器語言代碼。6.相對尋址

7.位尋址

位尋址指令中給出的是位地址,即片內(nèi)RAM某一單元中的一位。位地址在指令中用bit表示。

單片機(jī)片內(nèi)RAM有兩個區(qū)域可以進(jìn)行位尋址。具體如下:內(nèi)部RAM中的位尋址區(qū)——該區(qū)共有16個單元,單元地址是20H~2FH,一共有128位,位地址為00~7FH。特殊功能寄存器的可操作位——有11個單元地址能被8整除的寄存器,它們都可以進(jìn)行位尋址,實際可尋址位為83個??蓪ぶ肺辉谥噶钪械谋硎痉绞舰僦苯邮褂梦坏刂贰@篜SW寄存器的第5位可表示為D5H。20H單元的第7位可表示為07H。②用位名稱表示。例:PSW寄存器的第5位可表示為F0。③

單元地址加位號表示。例:PSW寄存器的第5位可表示為D0H.5。20H單元的第7位可表示為20H.7。

④可以用寄存器名稱加位號表示。例:PSW寄存器的第5位可表示為PSW.5。3.1.4尋址空間及符號注釋

尋址方式尋址空間直接尋址片內(nèi)RAM低128字節(jié)和特殊功能寄存器(只能采用直接尋址)寄存器尋址工作寄存器R0~R7、A、B、DPTR寄存器間接尋址片內(nèi)RAM低128字節(jié)(@R0、@R1、SP用于PUSH/POP指令時)片外RAM(@R0、@R1、@DPTR)變址尋址程序存儲器相對尋址程序存儲器(控制轉(zhuǎn)移用)位尋址片內(nèi)RAM20~2FH單元的128個可尋址位和特殊功能寄存器中的83個可尋址位尋址方式中常用符號注釋

Rn(n=0~7),當(dāng)前選中的工作寄存器組R0~R7。它在片內(nèi)數(shù)據(jù)存儲器中的地址由PSW中的RSl和RS0確定,可以是00H~07H(第0組)、08H~0FH(第1組)、10H~17H(第2組)或18H~1FH(第3組)。Ri(i=0,1),當(dāng)前選中的工作寄存器組中可以用于寄存器間接尋址的的兩個工作寄存器R0、R1。它在片內(nèi)數(shù)據(jù)存儲器中的地址由RSl、RS0確定,分別有01H,02H;08H,09H;10H,11H和18H,19H。#data,8位立即數(shù),即包含在指令中的8位操作數(shù)。#data16,16位立即數(shù),即包含在指令中的16位操作數(shù)。direct,8位片內(nèi)RAM單元(包括SFR)的直接地址。addr11,11位目的地址,用于ACALL和AJMP指令中。addr16,16位目的地址,用于LCALL和LJMP指令中。rel,補(bǔ)碼形式的8位地址偏移量,以下條指令第一字節(jié)地址為基值。地址偏移量在-128~+127范圍內(nèi)。bit,片內(nèi)RAM或SFR的直接尋址位地址。@,間接尋址方式中,表示間接尋址的符號。/,位操作指令中,表示對該位先取反再參與操作,但不影響該位原值。(X),某一個寄存器或者存儲單元X中的內(nèi)容。((X)),由X間接尋址的單元的內(nèi)容,即X指向的地址單元中的內(nèi)容?!?,指令中數(shù)據(jù)的傳送方向,將箭頭右邊的內(nèi)容送入箭頭左邊的單元。

3.2數(shù)據(jù)傳送指令

3.2.1內(nèi)部RAM數(shù)據(jù)傳送指令3.2.2外部RAM傳送指令3.2.3查表指令3.2.4交換指令3.2.5堆棧操作指令3.2.6數(shù)據(jù)傳送類指令應(yīng)用實例

3.2.1內(nèi)部RAM數(shù)據(jù)傳送指令內(nèi)部RAM數(shù)據(jù)傳送指令共有15條,用于8051單片機(jī)片內(nèi)數(shù)據(jù)存儲器和寄存器之間的數(shù)據(jù)傳送。采用的尋址方式有:

立即數(shù)尋址直接尋址寄存器尋址寄存器間接尋址數(shù)據(jù)傳輸形式如右圖所示。

3.2.1內(nèi)部RAM數(shù)據(jù)傳送指令1.以累加器A為目的操作數(shù)的指令匯編指令格式機(jī)器指令格式操作

MOVA,Rn E8H~EFHA←(Rn)

MOVA,directE5HdirectA←(direct)

MOVA,@RiE6H~E7HA←((Ri))

MOVA,#data 74HdataA←#data注意:上述操作不影響源字節(jié)和任何別的寄存器內(nèi)容,只影響PSW的P標(biāo)志位。

3.2.1內(nèi)部RAM數(shù)據(jù)傳送指令2.以寄存器Rn為目的操作數(shù)的指令匯編指令格式機(jī)器指令格式操作

MOVRn,AF8H~FFHRn←(A)

MOVRn,directA8H~AFHdirectRn←(direct)

MOVRn,#data78H~7FHdataRn←#data注意:8051指令系統(tǒng)中沒有“MOVRn,@Ri”和“MOVRn,Rn”傳送指令,也沒有“MOV@Ri,@Ri”指令。3.2.1內(nèi)部RAM數(shù)據(jù)傳送指令3.以直接地址為目的操作數(shù)的指令匯編指令格式機(jī)器指令格式 操作

MOVdirect,A F5Hdirect direct←(A)

MOVdirect,Rn88H~8FHdirectdirect←(Rn)

MOVdirect2,direct185Hdirect1direct2direct2←(direct1)

MOVdirect,@Ri86H~87Hdirectdirect←((Ri))

MOVdirect,#data75Hdirectdatadirect←#data注意:“MOVdirect2,direct1”指令在譯成機(jī)器碼時,源地址在前,目的地址在后。如“MOV50H,90H”的機(jī)器碼為“859050”。3.2.1內(nèi)部RAM數(shù)據(jù)傳送指令4.間接地址為目的操作數(shù)的指令

匯編指令格式機(jī)器指令格式 操作

MOV@Ri,AF6H~F7H (Ri)←(A)

MOV@Ri,directA6H~A7Hdirect(Ri)←(direct)

MOV@Ri,#data76H~77Hdata(Ri)←data注意:(Ri)表示以Ri中的內(nèi)容為地址所指定的RAM單元。

5.十六位數(shù)據(jù)傳送指令匯編指令格式 機(jī)器指令格式操作

MOVDPTR,#data1690HdataHdataLDPH←dataH,DPL←dataL注意:這是唯一的16位立即數(shù)傳送指令。3.2.2外部RAM傳送指令匯編指令格式 機(jī)器指令格式 操作

MOVX@DPTR,A F0H外((DPTR))←(A)

MOVXA,@DPTR E0HA←外((DPTR))

MOVX@Ri,A F2H~F3H外((Ri))←(A)

MOVXA,@Ri E2H~E3HA←外((Ri))

注意:8051沒有專門的輸入/輸出指令,在訪問外部的設(shè)備時,可以采用這種方式與外部設(shè)備的端口打交道。3.2.3查表指令

匯編指令格式機(jī)器指令格式操作

MOVCA,@A+DPTR 93HPC←(PC)+1,A←((A)+(DPTR))

MOVCA,@A+PC 83HPC←(PC)+1,A←((A)+(PC))注意:前一條指令只能查找指令所在位置以后256B范圍內(nèi)的代碼或常數(shù),后一條指令查表范圍可達(dá)整個程序存儲器的64KB空間。3.2.4交換指令

1.字節(jié)交換指令匯編指令格式 機(jī)器指令格式 操作

XCHA,Rn C8~CFH (A)

(Rn)

XCHA,direct C5H (A)

(direct)

XCHA,@Ri C6H~C7H (A)

((Ri))注意:該操作只影響標(biāo)志位P。

2.半字節(jié)交換指令匯編指令格式 機(jī)器指令格式 操作

XCHDA,@RiD6H~D7H (A)0~3

((Ri))0~3

注意:該操作只影響標(biāo)志位P。

3.2.4交換指令

3.累加器半字節(jié)交換指令匯編指令格式 機(jī)器碼格式 操作

SWAPA C4H (A)0~3

(A)4~7

注意:該操作不影響標(biāo)志位P。

3.2.5堆棧操作指令

1.入棧指令匯編指令格式 機(jī)器指令格式 操作

PUSHdirect C0Hdirect SP←(SP)+1,(SP)←(direct)注意:堆棧指針SP先加1,并指向棧頂?shù)纳弦粋€空單元,然后再將直接地址(direct)尋址的單元內(nèi)容壓入當(dāng)前SP所指示的堆棧單元中。該操作不影響標(biāo)志位P。2.出棧指令匯編指令格式 機(jī)器指令格式 操作

POPdirect D0Hdirect direct←((SP)),SP←(SP)-1注意:先將堆棧指針(SP)所指示的內(nèi)部RAM(棧頂)單元中內(nèi)容送入由直接地址尋址的單元中,然后再將棧指針(SP)減1并回送SP。該操作不影響標(biāo)志位P。

3.2.6數(shù)據(jù)傳送類指令應(yīng)用實例

【例5】

使用不同的指令將累加器A的內(nèi)容送至內(nèi)部RAM的26H單元。解:在訪問內(nèi)部RAM時,可以有多種尋址方式供選擇,在實際應(yīng)用中要注意根據(jù)實際情況選擇合適的尋址方式來進(jìn)行數(shù)據(jù)傳送。可以通過下面指令采用不同尋址方式實現(xiàn)。①MOV 26H,A ;目的操作數(shù)采用直接尋址,源操作數(shù)采用寄存器尋址② MOV R0,#26HMOV @R0,A ;目的操作數(shù)采用寄存器間接尋址,源操作數(shù)采用寄存器尋址③ MOV 26H,ACC ;采用直接尋址④ MOV 26H,0E0H ;采用直接尋址⑤ PUSHACC ;利用棧操作,直接尋址

POP26H3.2.6數(shù)據(jù)傳送類指令應(yīng)用實例

【例6】

已知(A)=23H,(R0)=30H,內(nèi)部RAM(30H)=45H,(45H)=56H,試分析分別執(zhí)行下列指令后累加器A的內(nèi)容,并寫出源操作數(shù)的尋址方式。解:這四條指令代表了數(shù)據(jù)傳送指令中常用的四種尋址方式,在使用時要特別注意不同尋址方式的區(qū)別,搞清楚誰是最終的操作數(shù)。要注意題中第一條指令與第二條指令、第三條與第四條指令的區(qū)別。

指令 結(jié)果 尋址方式

MOVA,R0 (A)=30H 寄存器尋址

MOVA,@R0(A)=45H 寄存器間接尋址

MOVA,45H (A)=56H 直接尋址

MOVA,#45H (A)=45H 立即數(shù)尋址3.2.6數(shù)據(jù)傳送類指令應(yīng)用實例

【例7】

將外部RAM2000H單元的內(nèi)容傳送至外部RAM3000H單元。解:8051單片機(jī)指令系統(tǒng)中沒有外部RAM兩個單元直接傳送數(shù)據(jù)的指令,只有外部RAM和累加器的傳送指令,要想實現(xiàn)題目中要求的功能,必須通過累加器A進(jìn)行。具體程序如下:

MOV DPTR,#2000H ;送源數(shù)據(jù)地址

MOVX A,@DPTR ;源數(shù)據(jù)送累加器

MOV DPTR,#3000H ;送數(shù)據(jù)目的地址

MOVX @DPTR,A ;累加器內(nèi)容送目的單元3.2.6數(shù)據(jù)傳送類指令應(yīng)用實例

【例8】

(A)=20H,(B)=30H,分析執(zhí)行下面指令以后的結(jié)果。

PUSHACCPUSHBPOP ACCPOP B解:根據(jù)堆棧的“先入后出、后入先出”操作原則進(jìn)行分析,執(zhí)行上面指令以后結(jié)果為:(A)=30H,(B)=20H。程序執(zhí)行結(jié)果和初始狀態(tài)比較,兩寄存器內(nèi)容進(jìn)行了互換,正是由“先入后出”的存儲原則造成的。

在子程序調(diào)用時,堆棧經(jīng)常用來保護(hù)現(xiàn)場,利用PUSH保護(hù)現(xiàn)場,利用POP恢復(fù)現(xiàn)場。恢復(fù)現(xiàn)場時,一定要注意POP指令的順序要和PUSH指令對稱,后壓入的數(shù)據(jù)先彈出,先壓入的數(shù)據(jù)后彈出,使得現(xiàn)場正確恢復(fù)到原來狀態(tài)。3.2.6數(shù)據(jù)傳送類指令應(yīng)用實例

【例9】

在程序存儲器中有一平方表,從2000H單元開始存放,如圖所示,試通過查表指令查找出6的平方。解:采用DPTR作為基址寄存器的查表程序比較簡單,查表范圍大,也容易理解。只要預(yù)先使用一條16位數(shù)據(jù)傳送指令,把表的首地址2000H送入DPTR,然后進(jìn)行查表就可以了。相應(yīng)的程序如下:

MOVA,#6 ;設(shè)定備查的表項

MOVDPTR,#2000H;設(shè)置DPTR為表始址

MOVCA,@A+DPTR

;將A的平方值查表后送A如果需要查找其他數(shù)的平方,只需要將累加器A的內(nèi)容(變址)改一下即可。2000H02001H12002H42003H92004H162005H252006H362007H492008H642009H813.3算術(shù)運算指令

3.3.1加法、減法指令3.3.2乘法、除法指令3.3.3加1、減1指令3.3.4十進(jìn)制調(diào)整指令3.3.5算術(shù)運算類指令應(yīng)用實例

3.3.1加法、減法指令

1.加法類指令匯編指令格式 機(jī)器指令格式 操作

ADDA,Rn 28H~2FH A←(A)+(Rn)

ADDA,direct 25Hdirect A←(A)+(direct)

ADDA,@Ri 26H~27H A←(A)+((Ri))

ADDA,#data 24Hdata A←(A)+#data

注意:當(dāng)和的第3位或第7位有進(jìn)位時,分別將AC、CY標(biāo)志位置1;否則為0。如果第6位向第7位有進(jìn)位而第7位沒有向前進(jìn)位,或者如果第7位向前有進(jìn)位而第6位沒有向第7位進(jìn)位,OV=1,否則OV=0。該操作也影響標(biāo)志位P。3.3.1加法、減法指令

2.帶進(jìn)位加法指令匯編指令格式 機(jī)器指令格式操作

ADDCA,Rn 38H~3FHA←(A)+(Rn)+CY

ADDCA,direct 35HdirectA←(A)+(direct)+CY

ADDCA,@Ri 36H~37HA←(A)+((Ri))+CY

ADDCA,#data34HdataA←(A)+#data+CY注意:本指令的執(zhí)行將影響標(biāo)志位AC、CY、OV、P,與ADD指令相同。3.3.1加法、減法指令

3.帶借位減法指令匯編指令格式 機(jī)器指令格式 操作

SUBBA,Rn 98H~9FH A←(A)-CY-(Rn)

SUBBA,direct 95Hdirect A←(A)-CY-(direct)

SUBBA,@Ri 96H~97H A←(A)-CY-((Ri))

SUBBA,#data94Hdata A←(A)-CY-#data注意:在執(zhí)行不帶借位的運算時,可在“SUBB”指令前用“CLRC”指令將CY清0。如果第7位有借位,則CY置1,否則清0。若第3位有借位,則AC置1;否則清0。兩個帶符號數(shù)相減,還要考查OV標(biāo)志,若OV為1,表示差數(shù)溢出,即破壞了正確結(jié)果的符號位。該操作也影響標(biāo)志位P。3.3.2乘法、除法指令

1.乘法指令匯編指令格式機(jī)器指令格式 操作

MULAB A4H BA←(A)×(B)

注意:若乘積大于0FFH,則OV置1,否則清0(此時B的內(nèi)容為0)。CY總是被清0。該操作也影響標(biāo)志位P。2.除法指令匯編指令格式機(jī)器指令格式操作

DIVAB 84HA←(A)÷(B)的商,B←(A)÷(B)的余數(shù)注意:若除數(shù)(B)=00H,則結(jié)果無法確定,則OV置1。CY總是被清0。該操作也影響標(biāo)志位P。3.3.3加1、減1指令

1.加1指令

匯編指令格式 機(jī)器指令格式 操作

INCA 04H A←(A)+1

INCRn 08H~0FH Rn←(Rn)+1

INCdirect 05Hdirect direct←(direct)+1

INC@Ri 06H~07H (Ri)←((Ri))+l

INCDPTR A3H DPTR←(DPTR)+1注意:該操作不影響PSW標(biāo)志位。3.3.3加1、減1指令

2.減1指令匯編指令格式 機(jī)器指令格式 操作

DECA 14H A←(A)-1

DECRn 18H~1FH Rn←(Rn)-l

DECdirect 15Hdirect direct←(direct)-1

DEC@Ri 16H~17H (Ri)←((Ri))-1注意:該操作不影響PSW標(biāo)志位。3.3.4十進(jìn)制調(diào)整指令

匯編指令格式 機(jī)器碼格式操作

DAA D4H 調(diào)整累加器A內(nèi)容為BCD碼注意:這條指令一般跟在ADD或ADDC指令后,將相加后存放在累加器中的結(jié)果進(jìn)行十進(jìn)制調(diào)整,完成十進(jìn)制加法運算功能(不能用于十進(jìn)制減法的調(diào)整)。調(diào)整方法如下:若(A0-3)>9或AC=1,則(A0-3)+6→A0-3若(A4-7)>9或CY=1,則(A4-7)+6→A4-7該操作影響標(biāo)志位P。3.3.5算術(shù)運算類指令應(yīng)用實例

【例13】

有兩個BCD碼表示的4位十進(jìn)制數(shù),分別存放在內(nèi)部數(shù)據(jù)存儲器的50H~51H單元和60H~61H單元,試編寫程序求這兩個數(shù)之和,并將結(jié)果存放在40H~42H單元。解:求兩個BCD數(shù)之和的運算程序如下:

MOVA,50H ;取第一個數(shù)低2位BCD碼

ADDA,60H ;加第二個數(shù)低2位BCD碼

DA A ;十進(jìn)制調(diào)整

MOV40H,A ;保存結(jié)果的低2位

MOVA,51H ;取高位BCD碼

ADDCA,61H ;高位相加

DA A ;十進(jìn)制調(diào)整

MOV41H,A

;保存結(jié)果的高2位

MOVA,#00H

ADDCA,#00H ;計算進(jìn)位

MOV42H,A ;保存進(jìn)位3.3.5算術(shù)運算類指令應(yīng)用實例

【例14】

試編程計算5678H~1234H的值,結(jié)果保存在R6、R5中。解:減數(shù)和被減數(shù)都是16位二進(jìn)制數(shù),計算時要先進(jìn)行低8位的減法,然后再進(jìn)行高8位的減法,在進(jìn)行低8位減法時,不需要考慮借位,所以要在減法指令之前將借位標(biāo)志清0。程序如下:

MOVA,#78H ;被減數(shù)低8位送累加器

CLR C ;清進(jìn)位標(biāo)志位CY

SUBBA,#34H ;減去減數(shù)

MOVR5,A ;保存低8位

MOVA,#56H ;被減數(shù)高8位送累加器

SUBBA,#12H ;減去減數(shù)

MOVR6,A ;保存高8位3.3.5算術(shù)運算類指令應(yīng)用實例

【例15】

試分析執(zhí)行下列指令以后,寄存器和內(nèi)部RAM的狀態(tài)。

MOVR0,#30H ;數(shù)30H送入R0

MOV30H,#40H

;數(shù)40H送入片內(nèi)RAM30H單元

MOV31H,#50H

;數(shù)50H送入片內(nèi)RAM31H單元

INC @R0 ;將片內(nèi)RAM30H單元中的內(nèi)容加1

INC R0 ;將R0中的內(nèi)容加1

INC @R0 ;將片內(nèi)RAM31H單元中的內(nèi)容加1解:分析結(jié)果:(R0)=31H(30H)=41H(31H)=51H

3.4邏輯操作指令

3.4.1邏輯“與”、“或”、“異或”指令3.4.2清零、取反指令3.4.3循環(huán)移位指令3.4.4邏輯運算類指令應(yīng)用實例

3.4.1邏輯“與”、“或”、“異或”指令1.邏輯“與”指令匯編指令格式 機(jī)器指令格式 操作

ANLA,Rn 58H~5FH A←(A)∧(Rn)

ANLA,direce 55Hdirect A←(A)∧(direct)

ANLA,@Ri 56H~57H A←(A)∧((Ri))

ANLA,#data 54Hdata A←(A)∧#data

ANLdirect,A 52Hdirectdirect←(direct)∧(A)

ANLdirect,#data53Hdirectdatadirect←(direct)∧#data注意:后2條指令若直接地址正好是I/O端口P0~P3,則為端口的“讀—改—寫”操作。前4條指令的操作影響標(biāo)志位P。3.4.1邏輯“與”、“或”、“異或”指令2.邏輯“或”指令匯編指令格式 機(jī)器指令格式 操作

ORLA,Rn 48H~4FH A←(A)∨(Rn)

ORLA,direct 45Hdirect A←(A)∨(direct)

ORLA,@Ri 46H~47H A←(A)∨((Ri))

ORLA,#data 44Hdata A←(A)∨#data

ORLdirect,A 42Hdirect direct←(direct)∨(A)

ORLdirect,#data

43Hdirectdatadirect←(direct)∨#data注意:后2條指令若直接地址正好是I/O端口P0~P3,則為端口的“讀—改—寫”操作。前4條指令的操作影響標(biāo)志位P。3.4.1邏輯“與”、“或”、“異或”指令3.邏輯“異或”指令匯編指令格式 機(jī)器指令格式 操作

XRLA,Rn 68H~6FH A←(A)⊕(Rn)

XRLA,direct 65Hdirect A←(direct)⊕(A)

XRLA,@Ri 66H~67H A←(A)⊕((Ri))

XRLA,#data

64Hdata A←(A)⊕#data

XRLdirect,A 62Hdirect direct←(direct)⊕(A)

XRLdirect,#data63Hdirectdatadirect←(direct)⊕#data注意:后2條指令若直接地址正好是I/O端口P0~P3,則為端口的“讀—改—寫”操作。前4條指令的操作影響標(biāo)志位P。3.4.2清零、取反指令

1.累加器A清0指令匯編指令格式 機(jī)器指令格式 操作

CLRA E4H A←0注意:該操作影響標(biāo)志位P。2.累加器A取反指令匯編指令格式 機(jī)器指令格式 操作

CPLA F4H A←()對累加器A的內(nèi)容逐位取反,不影響標(biāo)志位。

注意:該操作不影響標(biāo)志位P。3.4.3循環(huán)移位指令

1.累加器A循環(huán)左移指令匯編指令格式 機(jī)器指令格式 操作

RL A 23H

注意:該操作不影響PSW標(biāo)志位。2.累加器A循環(huán)右移指令匯編指令格式 機(jī)器指令格式 操作

RRA 03H

注意:該操作不影響PSW標(biāo)志位。3.4.3循環(huán)移位指令

3.累加器A帶進(jìn)位循環(huán)左移指令匯編指令格式機(jī)器指令格式 操作

RLCA 33H

注意:該操作影響標(biāo)志位P和CY。4.累加器A帶進(jìn)位循環(huán)右移指令匯編指令格式機(jī)器指令格式 操作

RRCA 23H

注意:該操作影響標(biāo)志位P和CY。3.4.4邏輯運算類指令應(yīng)用實例

【例16】

將P1口的P1.2、P1.3、P1.7清零,其余位不變。解:相應(yīng)的指令為:

ANLP1,#01110011B【例17】

利用邏輯運算指令將P1口的P1.1、P1.3、P1.5置1,其余位保持不變。解:相應(yīng)的指令為:

ORLP1,#00101010B【例18】

利用邏輯運算指令,將內(nèi)部RAM中40H單元的1、3、5、7位取反,其他位保持不變。解:相應(yīng)指令為:

XRL40H,#0AAH ;0AAH=10101010B3.4.4邏輯運算類指令應(yīng)用實例

【例19】

利用邏輯運算指令將當(dāng)前工作寄存器設(shè)定為第3組工作寄存器。解:相應(yīng)指令為:

ORLPSW,#00011000B【例20】

無符號8位二進(jìn)制數(shù)(A)=00111101B=3DH,CY=0。試分析執(zhí)行“RLCA”指令后累加器A的內(nèi)容。解:執(zhí)行指令“RLCA”的結(jié)果為

(A)=01111010B=7AHCY=07AH正是3DH的2倍,該指令執(zhí)行的是乘2操作。3.4.4邏輯運算類指令應(yīng)用實例

【例21】

拆字程序:在內(nèi)部RAM40H單元保存有以壓縮BCD碼表示的2位十進(jìn)制數(shù),編程將它們拆開,分別保存在內(nèi)部RAM的41H、42H單元。解:程序如下:

MOVA,40H ;壓縮BCD碼送累加器

ANLA,#0FH ;高4位清0,保留低4位

MOV41H,A ;保存低4位BCD碼

MOVA,40H ;取數(shù)據(jù)

MOVA,#0F0H ;低4位清0,保留高4位

SWAPA ;高低位交換

MOV42H,A ;保存高4位BCD碼3.5控制程序轉(zhuǎn)移類指令

3.5.1無條件轉(zhuǎn)移指令3.5.2條件轉(zhuǎn)移指令3.5.3調(diào)用、返回指令3.5.4空操作指令3.5.5控制轉(zhuǎn)移類指令應(yīng)用實例3.5.1無條件轉(zhuǎn)移指令無條件轉(zhuǎn)移指令是指當(dāng)程序執(zhí)行到該指令時,程序無條件轉(zhuǎn)移到指令所提供的地址處執(zhí)行。無條件轉(zhuǎn)移類指令有四類:絕對轉(zhuǎn)移——LJMP長轉(zhuǎn)移——AJMP相對轉(zhuǎn)移(短轉(zhuǎn)移)——SJMP間接轉(zhuǎn)移(散轉(zhuǎn)指令)——JMP3.5.1無條件轉(zhuǎn)移指令1.絕對轉(zhuǎn)移指令匯編指令格式機(jī)器指令格式 操作

AJMPaddr11a10a9a800001a7~a0PC←(PC)+2,PC10~0←addrll,(PC15~11)不變

注意:本條指令提供11位地址,可在該指令后面一個存儲單元所在的2KB區(qū)域內(nèi)無條件轉(zhuǎn)移。3.5.1無條件轉(zhuǎn)移指令2.長轉(zhuǎn)移指令匯編指令格式機(jī)器指令格式 操作

LJMPaddr16 02Haddr16 PC←addrl6

注意:本條指令提供16位目的地址,所以程序可轉(zhuǎn)向64KB程序存儲器地址空間的任何單元。3.5.1無條件轉(zhuǎn)移指令3.相對轉(zhuǎn)移(短轉(zhuǎn)移)指令匯編指令格式 機(jī)器指令格式 操作

SJMPrel 80Hrel PC←(PC)+2,PC←(PC)+rel

注意:本條指令的操作數(shù)是相對地址,rel是一個帶符號的偏移量(補(bǔ)碼),其范圍為-128~+127共256字節(jié)。負(fù)數(shù)表示反向轉(zhuǎn)移,正數(shù)表示正向轉(zhuǎn)移。如果指令中偏移量rel=FEH,因為FEH是-2的補(bǔ)碼,所以轉(zhuǎn)移目的地址=PC+2-2=PC,結(jié)果轉(zhuǎn)向自己,導(dǎo)致無限循環(huán)。這條指令稱為原地踏步指令,即程序執(zhí)行到這條指令時,不再向下執(zhí)行,而在該指令處原地踏步。3.5.1無條件轉(zhuǎn)移指令4.間接轉(zhuǎn)移指令(散轉(zhuǎn)指令)匯編指令格式機(jī)器指令格式 操作

JMP@A+DPTR 73H PC←(A)+(DPTR)注意:該指令采用的是變址尋址方式,指令執(zhí)行過程對DPTR、A和標(biāo)志位均無影響。這條指令可以根據(jù)累加器A的不同值實現(xiàn)多個方向的轉(zhuǎn)移,可代替眾多的判斷跳轉(zhuǎn)指令,具有散轉(zhuǎn)功能,所以又稱散轉(zhuǎn)指令。3.5.2條件轉(zhuǎn)移指令條件轉(zhuǎn)移指令是指根據(jù)給出的條件進(jìn)行判斷,若條件滿足,則程序轉(zhuǎn)向由偏移量確定的目的地址處去執(zhí)行。若條件不滿足,程序?qū)⒉粫D(zhuǎn)移,而是按原順序執(zhí)行。8051有豐富的條件轉(zhuǎn)移指令。

3.5.2條件轉(zhuǎn)移指令1.累加器判零轉(zhuǎn)移指令匯編指令格式機(jī)器指令格式 操作

JZrel60HrelPC←(PC)+2 若A=0,則程序轉(zhuǎn)移PC←(PC)+rel 若A≠0,則程序往下順序執(zhí)行

JNZrel 50HrelPC←(PC)+2 若A≠0,則程序轉(zhuǎn)移PC←(PC)+rel 若A=0,則程序往下順序執(zhí)行注意:相對偏移量為一個帶符號的8位數(shù),偏移范圍為-128~+127,共256個字節(jié)。本指令不改變累加器A的內(nèi)容,也不影響任何標(biāo)志位。3.5.2條件轉(zhuǎn)移指令2.比較轉(zhuǎn)移指令

匯編指令格式機(jī)器指令格式操作CJNEA,direct,relB5Hdirectrel累加器內(nèi)容和直接尋址單元比較CJNEA,#data,relB4Hdatarel累加器和立即數(shù)比較CJNERn,#data,relB6H~B7Hdatarel 寄存器內(nèi)容和立即數(shù)比較CJNE@Ri,#data,relB8H~BFHdatarel間接尋址單元內(nèi)容和立即數(shù)比較

注意:若目的操作數(shù)=源操作數(shù),程序順序執(zhí)行,CY=0;若目的操作數(shù)>源操作數(shù),程序轉(zhuǎn)移,PC←(PC)+rel,并且CY=0;若目的操作數(shù)<源操作數(shù),程序轉(zhuǎn)移,PC←(PC)+rel,并且CY=1。本指令執(zhí)行后不影響任何操作數(shù)。

3.5.2條件轉(zhuǎn)移指令3.減1非0轉(zhuǎn)移指令(循環(huán)轉(zhuǎn)移指令)匯編指令格式機(jī)器指令格式 操作

DJNZRn,relD8H~DFHrelPC←(PC)+2,Rn←(Rn)-1; 若(Rn)≠0,則程序轉(zhuǎn)移PC←(PC)+rel; 若(Rn)=0,則程序往下順序執(zhí)行

DJNZdirect,relD5Hdirectrel PC←(PC)+3,direct←(direct)-1 若(direct)≠0,則程序轉(zhuǎn)移PC←(PC)+rel; 若(direct)=0,則程序往下順序執(zhí)行3.5.2條件轉(zhuǎn)移指令3.減1非0轉(zhuǎn)移指令(循環(huán)轉(zhuǎn)移指令)注意:在一般的應(yīng)用中,經(jīng)常把rel設(shè)為負(fù)值,使得程序負(fù)向跳轉(zhuǎn)。通過改變指令中Rn或者direct單元的內(nèi)容,就可以控制程序負(fù)向跳轉(zhuǎn)的次數(shù),也就控制了程序循環(huán)的次數(shù),所以該指令又稱為循環(huán)轉(zhuǎn)移指令。3.5.3調(diào)用、返回指令

通常把具有一定功能的公用程序段作為子程序,在主程序中采用調(diào)用指令調(diào)用子程序,子程序的最后一條指令為返回主程序指令(RET)。8051指令系統(tǒng)中有兩條調(diào)用指令,分別是絕對調(diào)用和長調(diào)用指令。主程序調(diào)用子程序及從子程序返回主程序的過程如右圖所示。3.5.3調(diào)用、返回指令

1.絕對調(diào)用指令匯編指令格式機(jī)器指令格式 操作

ACALLaddr11a10a9a810001a7~a0PC←(PC)+2 SP←(SP)+1,(SP)←(PC0~PC7) SP←(SP)+1,(SP)←(PC8~PC15) PC0~PC10←addr0~10,PC11~PC15不變注意:本指令提供11位子程序目的地址,調(diào)用地址的形成方法和絕對轉(zhuǎn)移指令類似;被調(diào)用的子程序首地址必須在ACALL指令后一字節(jié)所在的2KB范圍內(nèi)的程序存儲器中。3.5.3調(diào)用、返回指令

2.長調(diào)用指令匯編指令格式機(jī)器指令格式 操作

LCALLaddr16 12Haddr16 PC←(PC)+3 SP←(SP)+1,(SP)←(PC0~PC7) SP←(SP)+1,(SP)←(PC8~PC15) PC←addr16注意:本指令提供16位子程序目的地址,被調(diào)用的子程序首地址可設(shè)置在64KB程序存儲器地址空間的任何位置。3.5.3調(diào)用、返回指令

3.返回指令匯編指令格式機(jī)器指令格式 操作

RET

22HPC8~15←((SP)),彈出斷點高8位 SP←((SP)-1 PC0~7←((SP)),彈出斷點低8位 SP←(SP)-1注意:本指令的作用是從子程序返回。當(dāng)程序執(zhí)行到本指令時,表示結(jié)束子程序的執(zhí)行,返回調(diào)用指令(ACALL或LCALL)的下一條指令處(斷點)繼續(xù)往下執(zhí)行。因此,它的主要操作是將棧頂?shù)臄帱c地址送PC,于是,子程序返回主程序繼續(xù)執(zhí)行。3.5.3調(diào)用、返回指令

3.返回指令匯編指令格式機(jī)器指令格式 操作

RETI

32HPC8~15←((SP)),彈出斷點高8位 SP←((SP)-1 PC0~7←((SP)),彈出斷點低8位 SP←(SP)-1注意:本指令是中斷返回指令,除具有RET指令的功能外,還具有開放低優(yōu)先級中斷、恢復(fù)中斷邏輯等功能。在編程時不能將兩種返回指令混用,中斷返回一定要安排在中斷服務(wù)程序的最后。3.5.4空操作指令匯編指令格式 機(jī)器指令格式 操作

NOP 00H PC←(PC)+1注意:這是一條單字節(jié)指令,除PC加1指向下一條指令以外,它不執(zhí)行其他任何操作,不影響其他寄存器和標(biāo)志位。NOP指令常用來產(chǎn)生一個機(jī)器周期的延遲,用來編寫軟件延時程序。3.5.5控制轉(zhuǎn)移類指令應(yīng)用實例

【例22】

在累加器A中保存有命令鍵鍵值,編寫程序使程序根據(jù)鍵值不同而轉(zhuǎn)向不同的子程序入口。解:本題可以采用散轉(zhuǎn)指令,程序如下:

KEY:CLRC ;清進(jìn)位

RLCA ;鍵值乘2

MOVDPTR,#KEYTAB;DPTR指向命令鍵跳轉(zhuǎn)表首址

JMP@A+DPTR ;散轉(zhuǎn)到命令鍵入口KEYTAB:AJMPKEYPR0 ;轉(zhuǎn)向0號鍵處理程序

AJMPKEYPR1 ;轉(zhuǎn)向1號鍵處理程序

AJMPKEYPR2 ;轉(zhuǎn)向2號鍵處理程序

……

從程序中看出,當(dāng)(A)=00H時,散轉(zhuǎn)到KEYPR0;當(dāng)(A)=01H,散轉(zhuǎn)到KEYPRl……。由于AJMP是雙字節(jié)指令,轉(zhuǎn)移表中相鄰的AJMP指令地址相差2個字節(jié),所以散轉(zhuǎn)前應(yīng)先將A中鍵值乘2。3.5.5控制轉(zhuǎn)移類指令應(yīng)用實例

【例23】

設(shè)(SP)=30H,符號地址PROG1指向程序存儲器的5678H單元,當(dāng)前PC值為0123H。從0123H處執(zhí)行指令“LCALLPROG1”,分析執(zhí)行后PC、SP的值和相關(guān)存儲器的內(nèi)容。解:執(zhí)行過程為:(PC)+3=0123H+3=0126H。將PC內(nèi)容壓入堆棧:向(SP)+1=31H中壓入26H,向(SP)+1=32H中壓入01H,(SP)=33H。將PROG1=5678H送入PC,即(PC)=5678H。程序轉(zhuǎn)向以5678H為首地址的子程序執(zhí)行。最終執(zhí)行結(jié)果是:(PC)=5678H、(SP)=33H、(31H)=26H、(32H)=01H。3.5.5控制轉(zhuǎn)移類指令應(yīng)用實例

【例24】

編程判斷內(nèi)部RAM30H單元中的數(shù)據(jù)是奇數(shù)還是偶數(shù),如果是偶數(shù),程序轉(zhuǎn)向PROG0處,如果是奇數(shù)程序轉(zhuǎn)向PROG1處(0按照偶數(shù)對待)。解:程序如下:

MOVA,30H ;數(shù)據(jù)送累加器

ANLA,#01H ;高7位清0,保留最低位

JZ PROG0 ;如果全為0說明是偶數(shù),轉(zhuǎn)向PROG0

SJMPPROG1 ;數(shù)據(jù)為奇數(shù),轉(zhuǎn)向PROG1【例25】

利用DJNZ指令和NOP指令編寫一循環(huán)程序,實現(xiàn)延時1ms(晶振頻率為12MHz)。解:程序如下:

DELAY: MOV A,#0AH ;1μs

LOOP: MOV R2,#30H

;1μs

DJNZ R2,$

;2×48μs

DJNZ R1,LOOP

;1μs×(1+2×48+1)×10

NOP ;1μs

NOP ;1μs

NOP ;1μs

NOP

;1μs

NOP ;1μs

RET ;2μs總的延時時間為:1+(1+2×48+1)×10+7=998μs,若再加上調(diào)用本子程序的調(diào)用指令所用的時間2μs共1000μs,即1ms。3.6位操作類指令

3.6.1位數(shù)據(jù)傳送指令3.6.2位邏輯運算指令3.6.3位清0、置1指令3.6.4位條件轉(zhuǎn)移類指令3.6.5位操作類指令應(yīng)用實例

3.6位操作類指令

8051硬件結(jié)構(gòu)中有個位處理機(jī)又稱布爾處理機(jī),它具有一套完整的處理位變量的指令集,包括位變量傳送、邏輯運算、控制程序轉(zhuǎn)移指令等。在進(jìn)行位尋址時,PSW中的進(jìn)位標(biāo)志CY作為位處理機(jī)的累加器,稱為位累加器。位尋址空間包括以下兩部分:片內(nèi)RAM中位尋址區(qū)——即字節(jié)地址20H~2FH單元中連續(xù)的128個位,位地址為00H~7FH。部分特殊功能寄存器中的可尋址位——凡SFR中字節(jié)地址能被8整除的特殊功能寄存器都可以進(jìn)行位尋址。位地址為80~F7H,一共83位。

3.6.1位數(shù)據(jù)傳送指令

匯編指令格式 機(jī)器指令格式 操作

MOVC,bitA2Hbit C←(bit)

MOVbit,C 92Hbit bit←(C)注意:本指令一個操作數(shù)為位地址(bit),另一個必定為位累加器C(即進(jìn)位標(biāo)志位CY)。此指令不影響其他寄存器或標(biāo)志位。在位操作指令中,位地址bit表示方法除前面已講過的4種之外,如果事先用偽指令定義,還可以采用偽指令定義過的字符名稱來表示一個可尋址位。3.6.2位邏輯運算指令1.位邏輯“與”指令匯編指令格式 機(jī)器指令格式 操作

ANLC,bit 82Hbit C←(C)∧(bit)

ANLC,/bit B0Hbit C←(C)∧(bit)注意:斜杠“/”表示對該位取反后再參與運算,但不改變原來的數(shù)值。8051單片機(jī)中沒有位邏輯“異或”指令。2.位邏輯“或”指令匯編指令格式 機(jī)器指令格式 操作

ORLC,bit 72Hbit C←(C)∨(bit)

ORLC,/bit A0Hbit C←(C)∨(bit)注意:斜杠“/”表示對該位取反后再參與運算,但不改變原來的數(shù)值。8051單片機(jī)中沒有位邏輯“異或”指令。

3.6.3位清0、置1指令

1.位清0指令匯編指令格式 機(jī)器指令格式 操作

CLRC C3H C←0

CLRbit C2Hbit bit←0注意:本指令執(zhí)行結(jié)果不影響其他標(biāo)志位。當(dāng)直接位地址為端口P0~P3中的某一位時,具有“讀—改—寫”功能。2.位置1指令匯編指令格式 機(jī)器指令格式 操作

SETBC D3H C←1

SETBbit D2Hbit bit←1注意:本指令執(zhí)行結(jié)果不影響其他標(biāo)志位。當(dāng)直接位地址為端口P0~P3中的某一位時,具有“讀—改—寫”功能。3.6.3位清0、置1指令

3.位取反指令匯編指令格式 機(jī)器指令格式 操作

CPLC B3H C←()

CPLbit B2Hbit bit←()注意:本指令執(zhí)行結(jié)果不影響其他標(biāo)志位。當(dāng)直接位地址為端口P0~P3中的某一位時,具有“讀—改—寫”功能。3.6.4位條件轉(zhuǎn)移類指令

1.判位累加器C轉(zhuǎn)移指令匯編指令格式機(jī)器指令格式 操作

JCrel 40Hrel PC←(PC)+2 若(C)=1,則程序轉(zhuǎn)移PC←(PC)+rel 若(C)=0,則程序往下順序執(zhí)行

JNCrel 50Hrel PC←(PC)+2 若(C)=0,則程序轉(zhuǎn)移PC←(PC)+rel 若(C)=1,則程序往下順序執(zhí)行注意:本指令執(zhí)行結(jié)果不影響PSW標(biāo)志位。3.6.4位條件轉(zhuǎn)移類指令

2.判位變量轉(zhuǎn)移指令匯編指令格式 機(jī)器指令格式 操作

JBbit,rel 30Hbitrel PC←(PC)+3 若(bit)=1,則程序轉(zhuǎn)移←(PC)+rel 若(bit)=0,則程序往下順序執(zhí)行

JNBbit,rel20Hbitrel PC←(PC)+3; 若(bit)=0,則程序轉(zhuǎn)移PC←(PC)+rel 若(bit)=1,則程序往下順序執(zhí)行注意:本指令執(zhí)行結(jié)果不影響PSW標(biāo)志位。3.6.4位條件轉(zhuǎn)移類指令

3.判位變量清0轉(zhuǎn)移指令匯編指令格式機(jī)器指令格式 操作

JBCbit,rel10HbitrelPC←(PC)+3若(bit)=1,則程序轉(zhuǎn)移PC←(PC)+rel,且bit←0 若(bit)=0,則程序往下順序執(zhí)行注意:本指令執(zhí)行結(jié)果不影響PSW標(biāo)志位。3.6.5位操作類指令應(yīng)用實例

【例26】

將P1.4的狀態(tài)取反后傳送給P1.6。解:相應(yīng)的指令為:

MOVC,P1.4CPLCMOVP1.6,C【例27】

編程判斷內(nèi)部RAM30H單元中存放的有符號數(shù)是正數(shù)還是負(fù)數(shù),如果是正數(shù),程序轉(zhuǎn)移到PROP處;如果是負(fù)數(shù),程序轉(zhuǎn)移到PRON處;如果是0,程序轉(zhuǎn)移到ZERO處。解:程序如下:

MOVA,30H ;取數(shù)據(jù)

JZ ZERO ;如果為0,轉(zhuǎn)移至ZERO處

JB ACC.7,PRON ;ACC.7=1,說明是負(fù)數(shù),轉(zhuǎn)移至PRON

SJMPPROP ;否則,是正數(shù),轉(zhuǎn)移至PROP3.6.5位操作類指令應(yīng)用實例

【例28】

比較內(nèi)部RAM中40H、41H兩個單元中的數(shù)據(jù)大小,將大的數(shù)送至42H單元。解:程序如下:

MOVA,40H ;取第一個數(shù)

CJNEA,41H,NEQU ;比較,不相等轉(zhuǎn)移至NEQU處

MOV42H,40H;相等,(40H)→42H

SJMPTOOFF ;完成,轉(zhuǎn)移至結(jié)尾退出

NEQU:JCLESS ;若CY=1,說明(40H)<(41H)轉(zhuǎn)移

MOV42H,40H ;(40H)>(41H),(40H)→40H

SJMPTOOFF ;完成,轉(zhuǎn)移至結(jié)尾退出

LESS:MOV42H,41H ;(40H)<(41H),(41H)→40HTOOFF:RET3.6.5位操作類指令應(yīng)用實例

【例29】

利用邏輯運算指令實現(xiàn)邏輯關(guān)系:Y=(A∧B)∨(C∧D),A、B、C、D均為位變量。解:將A、B、C、D分別接至P1.0~P1.3,P1.4輸出即為Y信號,相應(yīng)程序如下:

MOVC,P1.0

ANLC,P1.1 ;A∧B

MOV00H,C ;暫存在00H位

MOVC,P1.2

ANLC,P1.3 ;C∧D

ORLC,00H

;(A∧B)∨(C∧D)

MOV

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論