版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第3章8051指令系統(tǒng)
(課時(shí):12學(xué)時(shí))教學(xué)目的
指令和指令系統(tǒng)的概念與分類。掌握指令的格式和尋址方式。掌握數(shù)據(jù)傳送、算術(shù)運(yùn)算、邏輯運(yùn)算、控制轉(zhuǎn)移和位操作指令的功能和應(yīng)用。學(xué)習(xí)重點(diǎn)和難點(diǎn)指令的尋址方式??刂妻D(zhuǎn)移指令和位操作指令。第3章8051指令系統(tǒng)
3.1匯編語言3.2數(shù)據(jù)傳送指令3.3算術(shù)運(yùn)算指令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尋址空間及符號(hào)注釋
指令系統(tǒng)分類(一)按照指令的功能劃分,8051指令可分為以下五類:數(shù)據(jù)傳送類指令(29條)算術(shù)運(yùn)算類指令(24條)邏輯運(yùn)算類指令(24條)控制轉(zhuǎn)移類指令(17條)位操作類指令(17條)
指令系統(tǒng)分類(二)按照指令占用的存儲(chǔ)空間可分為:?jiǎn)巫止?jié)指令(49條)雙字節(jié)指令(45條)三字節(jié)指令(17條)按照指令的執(zhí)行時(shí)間可分為:?jiǎn)沃芷谥噶?64條)雙周期指令(45條)四周期指令(2條,乘、除法指令)
3.1.2指令格式
8051匯編語言指令由操作碼段和操作數(shù)字段兩部分組成。
匯編語言指令格式
[標(biāo)號(hào):]操作碼助記符[目的操作數(shù)][,源操作數(shù)][;注釋]
機(jī)器語言指令格式雙字節(jié)指令格式
操作碼代碼操作數(shù)或者地址
三字節(jié)指令格式
操作碼代碼操作數(shù)或地址,操作數(shù)或地址
3.1.3尋址方式
基本概念尋址就是尋找指令中操作數(shù)或操作數(shù)所在地址。
尋址方式就是找到存放操作數(shù)的地址,并把操作數(shù)提取出來的方法,即尋找操作數(shù)或者是操作數(shù)地址的方法。
8051單片機(jī)尋址方式共有7種:寄存器尋址、直接尋址、立即數(shù)尋址、寄存器間接尋址、變址尋址、相對(duì)尋址和位尋址。
1.寄存器尋址
寄存器尋址就是操作數(shù)存放在寄存器中,指令中指定的寄存器的內(nèi)容就是操作數(shù)。在寄存器尋址方式中以符號(hào)名稱來表示寄存器。寄存器尋址方式的尋址范圍包括:通用工作寄存器——有4組共32個(gè)通用工作寄存器。部分專用寄存器——累加器A、B寄存器、DPTR寄存器。2.直接尋址
直接尋址方式就是在指令中直接給出操作數(shù)所在存儲(chǔ)單元的地址。此時(shí),指令中操作數(shù)部分是操作數(shù)所在地址。
直接尋址方式的尋址范圍是內(nèi)部RAM,具體包括:片內(nèi)RAM的128個(gè)單元——在指令中以直接地址給出。特殊功能寄存器(SFR)——既可使用它們的地址,也可使用它們的名字。3.立即數(shù)尋址
立即數(shù)尋址就是操作數(shù)在指令中直接給出,或者說指令操作碼后面立即給出一字節(jié)或兩字節(jié)操作數(shù)。指令中給出的操作數(shù)是立即數(shù),立即數(shù)前加“#”號(hào)標(biāo)志,以區(qū)別直接尋址中的直接地址。16位立即數(shù)傳送指令“MOVDPTR,#datal6”,其中#data16是一個(gè)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)容為變址,并將兩個(gè)寄存器內(nèi)容也就是基址和變址相加,形成16位操作數(shù)地址。然后在程序存儲(chǔ)器中找到該地址所對(duì)應(yīng)的單元,其內(nèi)容即為操作數(shù)。
變址尋址示意圖
例如:指令“MOVCA,@A+DPTR”是變址尋址。解:假設(shè)DPTR的內(nèi)容為2030H,累加器A的內(nèi)容為12H。該指令的功能是將2030H和12H相加,得到2042H作為操作數(shù)地址,在程序存儲(chǔ)器中找到2042H單元,將其內(nèi)容送至累加器A。
5.變址尋址(基址寄存器+變址寄存器間接尋址)
6.相對(duì)尋址
相對(duì)轉(zhuǎn)移指令執(zhí)行時(shí),是以當(dāng)前的PC值加上指令中規(guī)定的偏移量rel而形成實(shí)際的轉(zhuǎn)移地址。這里所說的PC的當(dāng)前值是執(zhí)行完相對(duì)轉(zhuǎn)移指令后的PC值。
一般將相對(duì)轉(zhuǎn)移指令操作碼所在地址稱為源地址,轉(zhuǎn)移后的地址稱為目的地址。于是有:
目的地址=源地址+相對(duì)轉(zhuǎn)移指令本身字節(jié)數(shù)+rel相對(duì)尋址只出現(xiàn)在相對(duì)轉(zhuǎn)移指令中,以修正PC的方式來控制程序的轉(zhuǎn)移目的。相對(duì)轉(zhuǎn)移指令操作示意圖
例如:在程序存儲(chǔ)器中2000H單元有一條雙字節(jié)的相對(duì)轉(zhuǎn)移指令“SJMP75H”。解:程序存儲(chǔ)器2000H、2001H單元的內(nèi)容80H、75H是“SJMP75H”的機(jī)器語言代碼。6.相對(duì)尋址
7.位尋址
位尋址指令中給出的是位地址,即片內(nèi)RAM某一單元中的一位。位地址在指令中用bit表示。
單片機(jī)片內(nèi)RAM有兩個(gè)區(qū)域可以進(jìn)行位尋址。具體如下:內(nèi)部RAM中的位尋址區(qū)——該區(qū)共有16個(gè)單元,單元地址是20H~2FH,一共有128位,位地址為00~7FH。特殊功能寄存器的可操作位——有11個(gè)單元地址能被8整除的寄存器,它們都可以進(jìn)行位尋址,實(shí)際可尋址位為83個(gè)??蓪ぶ肺辉谥噶钪械谋硎痉绞舰僦苯邮褂梦坏刂贰@篜SW寄存器的第5位可表示為D5H。20H單元的第7位可表示為07H。②用位名稱表示。例:PSW寄存器的第5位可表示為F0。③
單元地址加位號(hào)表示。例:PSW寄存器的第5位可表示為D0H.5。20H單元的第7位可表示為20H.7。
④可以用寄存器名稱加位號(hào)表示。例:PSW寄存器的第5位可表示為PSW.5。3.1.4尋址空間及符號(hào)注釋
尋址方式尋址空間直接尋址片內(nèi)RAM低128字節(jié)和特殊功能寄存器(只能采用直接尋址)寄存器尋址工作寄存器R0~R7、A、B、DPTR寄存器間接尋址片內(nèi)RAM低128字節(jié)(@R0、@R1、SP用于PUSH/POP指令時(shí))片外RAM(@R0、@R1、@DPTR)變址尋址程序存儲(chǔ)器相對(duì)尋址程序存儲(chǔ)器(控制轉(zhuǎn)移用)位尋址片內(nèi)RAM20~2FH單元的128個(gè)可尋址位和特殊功能寄存器中的83個(gè)可尋址位尋址方式中常用符號(hào)注釋
Rn(n=0~7),當(dāng)前選中的工作寄存器組R0~R7。它在片內(nèi)數(shù)據(jù)存儲(chǔ)器中的地址由PSW中的RSl和RS0確定,可以是00H~07H(第0組)、08H~0FH(第1組)、10H~17H(第2組)或18H~1FH(第3組)。Ri(i=0,1),當(dāng)前選中的工作寄存器組中可以用于寄存器間接尋址的的兩個(gè)工作寄存器R0、R1。它在片內(nèi)數(shù)據(jù)存儲(chǔ)器中的地址由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的直接尋址位地址。@,間接尋址方式中,表示間接尋址的符號(hào)。/,位操作指令中,表示對(duì)該位先取反再參與操作,但不影響該位原值。(X),某一個(gè)寄存器或者存儲(chǔ)單元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)用實(shí)例
3.2.1內(nèi)部RAM數(shù)據(jù)傳送指令內(nèi)部RAM數(shù)據(jù)傳送指令共有15條,用于8051單片機(jī)片內(nèi)數(shù)據(jù)存儲(chǔ)器和寄存器之間的數(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ī)器碼時(shí),源地址在前,目的地址在后。如“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í),可以采用這種方式與外部設(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á)整個(gè)程序存儲(chǔ)器的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ù)纳弦粋€(gè)空單元,然后再將直接地址(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)用實(shí)例
【例5】
使用不同的指令將累加器A的內(nèi)容送至內(nèi)部RAM的26H單元。解:在訪問內(nèi)部RAM時(shí),可以有多種尋址方式供選擇,在實(shí)際應(yīng)用中要注意根據(jù)實(shí)際情況選擇合適的尋址方式來進(jìn)行數(shù)據(jù)傳送。可以通過下面指令采用不同尋址方式實(shí)現(xiàn)。①M(fèi)OV 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)用實(shí)例
【例6】
已知(A)=23H,(R0)=30H,內(nèi)部RAM(30H)=45H,(45H)=56H,試分析分別執(zhí)行下列指令后累加器A的內(nèi)容,并寫出源操作數(shù)的尋址方式。解:這四條指令代表了數(shù)據(jù)傳送指令中常用的四種尋址方式,在使用時(shí)要特別注意不同尋址方式的區(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)用實(shí)例
【例7】
將外部RAM2000H單元的內(nèi)容傳送至外部RAM3000H單元。解:8051單片機(jī)指令系統(tǒng)中沒有外部RAM兩個(gè)單元直接傳送數(shù)據(jù)的指令,只有外部RAM和累加器的傳送指令,要想實(shí)現(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)用實(shí)例
【例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)行了互換,正是由“先入后出”的存儲(chǔ)原則造成的。
在子程序調(diào)用時(shí),堆棧經(jīng)常用來保護(hù)現(xiàn)場(chǎng),利用PUSH保護(hù)現(xiàn)場(chǎng),利用POP恢復(fù)現(xiàn)場(chǎng)。恢復(fù)現(xiàn)場(chǎng)時(shí),一定要注意POP指令的順序要和PUSH指令對(duì)稱,后壓入的數(shù)據(jù)先彈出,先壓入的數(shù)據(jù)后彈出,使得現(xiàn)場(chǎng)正確恢復(fù)到原來狀態(tài)。3.2.6數(shù)據(jù)傳送類指令應(yīng)用實(shí)例
【例9】
在程序存儲(chǔ)器中有一平方表,從2000H單元開始存放,如圖所示,試通過查表指令查找出6的平方。解:采用DPTR作為基址寄存器的查表程序比較簡(jiǎn)單,查表范圍大,也容易理解。只要預(yù)先使用一條16位數(shù)據(jù)傳送指令,把表的首地址2000H送入DPTR,然后進(jìn)行查表就可以了。相應(yīng)的程序如下:
MOVA,#6 ;設(shè)定備查的表項(xiàng)
MOVDPTR,#2000H;設(shè)置DPTR為表始址
MOVCA,@A+DPTR
;將A的平方值查表后送A如果需要查找其他數(shù)的平方,只需要將累加器A的內(nèi)容(變址)改一下即可。2000H02001H12002H42003H92004H162005H252006H362007H492008H642009H813.3算術(shù)運(yùn)算指令
3.3.1加法、減法指令3.3.2乘法、除法指令3.3.3加1、減1指令3.3.4十進(jìn)制調(diào)整指令3.3.5算術(shù)運(yùn)算類指令應(yīng)用實(shí)例
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)位時(shí),分別將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í)行不帶借位的運(yùn)算時(shí),可在“SUBB”指令前用“CLRC”指令將CY清0。如果第7位有借位,則CY置1,否則清0。若第3位有借位,則AC置1;否則清0。兩個(gè)帶符號(hào)數(shù)相減,還要考查OV標(biāo)志,若OV為1,表示差數(shù)溢出,即破壞了正確結(jié)果的符號(hào)位。該操作也影響標(biāo)志位P。3.3.2乘法、除法指令
1.乘法指令匯編指令格式機(jī)器指令格式 操作
MULAB A4H BA←(A)×(B)
注意:若乘積大于0FFH,則OV置1,否則清0(此時(shí)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)制加法運(yù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ùn)算類指令應(yīng)用實(shí)例
【例13】
有兩個(gè)BCD碼表示的4位十進(jìn)制數(shù),分別存放在內(nèi)部數(shù)據(jù)存儲(chǔ)器的50H~51H單元和60H~61H單元,試編寫程序求這兩個(gè)數(shù)之和,并將結(jié)果存放在40H~42H單元。解:求兩個(gè)BCD數(shù)之和的運(yùn)算程序如下:
MOVA,50H ;取第一個(gè)數(shù)低2位BCD碼
ADDA,60H ;加第二個(gè)數(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ì)算進(jìn)位
MOV42H,A ;保存進(jìn)位3.3.5算術(shù)運(yùn)算類指令應(yīng)用實(shí)例
【例14】
試編程計(jì)算5678H~1234H的值,結(jié)果保存在R6、R5中。解:減數(shù)和被減數(shù)都是16位二進(jìn)制數(shù),計(jì)算時(shí)要先進(jìn)行低8位的減法,然后再進(jìn)行高8位的減法,在進(jìn)行低8位減法時(shí),不需要考慮借位,所以要在減法指令之前將借位標(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ùn)算類指令應(yīng)用實(shí)例
【例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ùn)算類指令應(yīng)用實(shí)例
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←()對(duì)累加器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ùn)算類指令應(yīng)用實(shí)例
【例16】
將P1口的P1.2、P1.3、P1.7清零,其余位不變。解:相應(yīng)的指令為:
ANLP1,#01110011B【例17】
利用邏輯運(yùn)算指令將P1口的P1.1、P1.3、P1.5置1,其余位保持不變。解:相應(yīng)的指令為:
ORLP1,#00101010B【例18】
利用邏輯運(yùn)算指令,將內(nèi)部RAM中40H單元的1、3、5、7位取反,其他位保持不變。解:相應(yīng)指令為:
XRL40H,#0AAH ;0AAH=10101010B3.4.4邏輯運(yùn)算類指令應(yīng)用實(shí)例
【例19】
利用邏輯運(yùn)算指令將當(dāng)前工作寄存器設(shè)定為第3組工作寄存器。解:相應(yīng)指令為:
ORLPSW,#00011000B【例20】
無符號(hào)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ùn)算類指令應(yīng)用實(shí)例
【例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)用實(shí)例3.5.1無條件轉(zhuǎn)移指令無條件轉(zhuǎn)移指令是指當(dāng)程序執(zhí)行到該指令時(shí),程序無條件轉(zhuǎn)移到指令所提供的地址處執(zhí)行。無條件轉(zhuǎn)移類指令有四類:絕對(duì)轉(zhuǎn)移——LJMP長(zhǎng)轉(zhuǎn)移——AJMP相對(duì)轉(zhuǎn)移(短轉(zhuǎn)移)——SJMP間接轉(zhuǎn)移(散轉(zhuǎn)指令)——JMP3.5.1無條件轉(zhuǎn)移指令1.絕對(duì)轉(zhuǎn)移指令匯編指令格式機(jī)器指令格式 操作
AJMPaddr11a10a9a800001a7~a0PC←(PC)+2,PC10~0←addrll,(PC15~11)不變
注意:本條指令提供11位地址,可在該指令后面一個(gè)存儲(chǔ)單元所在的2KB區(qū)域內(nèi)無條件轉(zhuǎn)移。3.5.1無條件轉(zhuǎn)移指令2.長(zhǎng)轉(zhuǎn)移指令匯編指令格式機(jī)器指令格式 操作
LJMPaddr16 02Haddr16 PC←addrl6
注意:本條指令提供16位目的地址,所以程序可轉(zhuǎn)向64KB程序存儲(chǔ)器地址空間的任何單元。3.5.1無條件轉(zhuǎn)移指令3.相對(duì)轉(zhuǎn)移(短轉(zhuǎn)移)指令匯編指令格式 機(jī)器指令格式 操作
SJMPrel 80Hrel PC←(PC)+2,PC←(PC)+rel
注意:本條指令的操作數(shù)是相對(duì)地址,rel是一個(gè)帶符號(hào)的偏移量(補(bǔ)碼),其范圍為-128~+127共256字節(jié)。負(fù)數(shù)表示反向轉(zhuǎn)移,正數(shù)表示正向轉(zhuǎn)移。如果指令中偏移量rel=FEH,因?yàn)镕EH是-2的補(bǔ)碼,所以轉(zhuǎn)移目的地址=PC+2-2=PC,結(jié)果轉(zhuǎn)向自己,導(dǎo)致無限循環(huán)。這條指令稱為原地踏步指令,即程序執(zhí)行到這條指令時(shí),不再向下執(zhí)行,而在該指令處原地踏步。3.5.1無條件轉(zhuǎn)移指令4.間接轉(zhuǎn)移指令(散轉(zhuǎn)指令)匯編指令格式機(jī)器指令格式 操作
JMP@A+DPTR 73H PC←(A)+(DPTR)注意:該指令采用的是變址尋址方式,指令執(zhí)行過程對(duì)DPTR、A和標(biāo)志位均無影響。這條指令可以根據(jù)累加器A的不同值實(shí)現(xiàn)多個(gè)方向的轉(zhuǎn)移,可代替眾多的判斷跳轉(zhuǎn)指令,具有散轉(zhuǎn)功能,所以又稱散轉(zhuǎn)指令。3.5.2條件轉(zhuǎn)移指令條件轉(zhuǎn)移指令是指根據(jù)給出的條件進(jìn)行判斷,若條件滿足,則程序轉(zhuǎn)向由偏移量確定的目的地址處去執(zhí)行。若條件不滿足,程序?qū)⒉粫?huì)轉(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í)行注意:相對(duì)偏移量為一個(gè)帶符號(hào)的8位數(shù),偏移范圍為-128~+127,共256個(gè)字節(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)用指令,分別是絕對(duì)調(diào)用和長(zhǎng)調(diào)用指令。主程序調(diào)用子程序及從子程序返回主程序的過程如右圖所示。3.5.3調(diào)用、返回指令
1.絕對(duì)調(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)用地址的形成方法和絕對(duì)轉(zhuǎn)移指令類似;被調(diào)用的子程序首地址必須在ACALL指令后一字節(jié)所在的2KB范圍內(nèi)的程序存儲(chǔ)器中。3.5.3調(diào)用、返回指令
2.長(zhǎng)調(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程序存儲(chǔ)器地址空間的任何位置。3.5.3調(diào)用、返回指令
3.返回指令匯編指令格式機(jī)器指令格式 操作
RET
22HPC8~15←((SP)),彈出斷點(diǎn)高8位 SP←((SP)-1 PC0~7←((SP)),彈出斷點(diǎn)低8位 SP←(SP)-1注意:本指令的作用是從子程序返回。當(dāng)程序執(zhí)行到本指令時(shí),表示結(jié)束子程序的執(zhí)行,返回調(diào)用指令(ACALL或LCALL)的下一條指令處(斷點(diǎn))繼續(xù)往下執(zhí)行。因此,它的主要操作是將棧頂?shù)臄帱c(diǎn)地址送PC,于是,子程序返回主程序繼續(xù)執(zhí)行。3.5.3調(diào)用、返回指令
3.返回指令匯編指令格式機(jī)器指令格式 操作
RETI
32HPC8~15←((SP)),彈出斷點(diǎn)高8位 SP←((SP)-1 PC0~7←((SP)),彈出斷點(diǎn)低8位 SP←(SP)-1注意:本指令是中斷返回指令,除具有RET指令的功能外,還具有開放低優(yōu)先級(jí)中斷、恢復(fù)中斷邏輯等功能。在編程時(shí)不能將兩種返回指令混用,中斷返回一定要安排在中斷服務(wù)程序的最后。3.5.4空操作指令匯編指令格式 機(jī)器指令格式 操作
NOP 00H PC←(PC)+1注意:這是一條單字節(jié)指令,除PC加1指向下一條指令以外,它不執(zhí)行其他任何操作,不影響其他寄存器和標(biāo)志位。NOP指令常用來產(chǎn)生一個(gè)機(jī)器周期的延遲,用來編寫軟件延時(shí)程序。3.5.5控制轉(zhuǎn)移類指令應(yīng)用實(shí)例
【例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號(hào)鍵處理程序
AJMPKEYPR1 ;轉(zhuǎn)向1號(hào)鍵處理程序
AJMPKEYPR2 ;轉(zhuǎn)向2號(hào)鍵處理程序
……
從程序中看出,當(dāng)(A)=00H時(shí),散轉(zhuǎn)到KEYPR0;當(dāng)(A)=01H,散轉(zhuǎn)到KEYPRl……。由于AJMP是雙字節(jié)指令,轉(zhuǎn)移表中相鄰的AJMP指令地址相差2個(gè)字節(jié),所以散轉(zhuǎn)前應(yīng)先將A中鍵值乘2。3.5.5控制轉(zhuǎn)移類指令應(yīng)用實(shí)例
【例23】
設(shè)(SP)=30H,符號(hào)地址PROG1指向程序存儲(chǔ)器的5678H單元,當(dāng)前PC值為0123H。從0123H處執(zhí)行指令“LCALLPROG1”,分析執(zhí)行后PC、SP的值和相關(guān)存儲(chǔ)器的內(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)用實(shí)例
【例24】
編程判斷內(nèi)部RAM30H單元中的數(shù)據(jù)是奇數(shù)還是偶數(shù),如果是偶數(shù),程序轉(zhuǎn)向PROG0處,如果是奇數(shù)程序轉(zhuǎn)向PROG1處(0按照偶數(shù)對(duì)待)。解:程序如下:
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)程序,實(shí)現(xiàn)延時(shí)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總的延時(shí)時(shí)間為:1+(1+2×48+1)×10+7=998μs,若再加上調(diào)用本子程序的調(diào)用指令所用的時(shí)間2μs共1000μs,即1ms。3.6位操作類指令
3.6.1位數(shù)據(jù)傳送指令3.6.2位邏輯運(yùn)算指令3.6.3位清0、置1指令3.6.4位條件轉(zhuǎn)移類指令3.6.5位操作類指令應(yīng)用實(shí)例
3.6位操作類指令
8051硬件結(jié)構(gòu)中有個(gè)位處理機(jī)又稱布爾處理機(jī),它具有一套完整的處理位變量的指令集,包括位變量傳送、邏輯運(yùn)算、控制程序轉(zhuǎn)移指令等。在進(jìn)行位尋址時(shí),PSW中的進(jìn)位標(biāo)志CY作為位處理機(jī)的累加器,稱為位累加器。位尋址空間包括以下兩部分:片內(nèi)RAM中位尋址區(qū)——即字節(jié)地址20H~2FH單元中連續(xù)的128個(gè)位,位地址為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)注意:本指令一個(gè)操作數(shù)為位地址(bit),另一個(gè)必定為位累加器C(即進(jìn)位標(biāo)志位CY)。此指令不影響其他寄存器或標(biāo)志位。在位操作指令中,位地址bit表示方法除前面已講過的4種之外,如果事先用偽指令定義,還可以采用偽指令定義過的字符名稱來表示一個(gè)可尋址位。3.6.2位邏輯運(yùn)算指令1.位邏輯“與”指令匯編指令格式 機(jī)器指令格式 操作
ANLC,bit 82Hbit C←(C)∧(bit)
ANLC,/bit B0Hbit C←(C)∧(bit)注意:斜杠“/”表示對(duì)該位取反后再參與運(yùn)算,但不改變?cè)瓉淼臄?shù)值。8051單片機(jī)中沒有位邏輯“異或”指令。2.位邏輯“或”指令匯編指令格式 機(jī)器指令格式 操作
ORLC,bit 72Hbit C←(C)∨(bit)
ORLC,/bit A0Hbit C←(C)∨(bit)注意:斜杠“/”表示對(duì)該位取反后再參與運(yùn)算,但不改變?cè)瓉淼臄?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中的某一位時(shí),具有“讀—改—寫”功能。2.位置1指令匯編指令格式 機(jī)器指令格式 操作
SETBC D3H C←1
SETBbit D2Hbit bit←1注意:本指令執(zhí)行結(jié)果不影響其他標(biāo)志位。當(dāng)直接位地址為端口P0~P3中的某一位時(shí),具有“讀—改—寫”功能。3.6.3位清0、置1指令
3.位取反指令匯編指令格式 機(jī)器指令格式 操作
CPLC B3H C←()
CPLbit B2Hbit bit←()注意:本指令執(zhí)行結(jié)果不影響其他標(biāo)志位。當(dāng)直接位地址為端口P0~P3中的某一位時(shí),具有“讀—改—寫”功能。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)用實(shí)例
【例26】
將P1.4的狀態(tài)取反后傳送給P1.6。解:相應(yīng)的指令為:
MOVC,P1.4CPLCMOVP1.6,C【例27】
編程判斷內(nèi)部RAM30H單元中存放的有符號(hào)數(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)用實(shí)例
【例28】
比較內(nèi)部RAM中40H、41H兩個(gè)單元中的數(shù)據(jù)大小,將大的數(shù)送至42H單元。解:程序如下:
MOVA,40H ;取第一個(gè)數(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)用實(shí)例
【例29】
利用邏輯運(yùn)算指令實(shí)現(xiàn)邏輯關(guān)系:Y=(A∧B)∨(C∧D),A、B、C、D均為位變量。解:將A、B、C、D分別接至P1.0~P1.3,P1.4輸出即為Y信號(hào),相應(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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版生物科技研發(fā)與成果轉(zhuǎn)化合同3篇
- 2025年物流項(xiàng)目投資合作框架合同范本3篇
- 2024石材產(chǎn)品質(zhì)量檢驗(yàn)合同
- 浙教版信息技術(shù)小學(xué)三年級(jí)上冊(cè)《認(rèn)識(shí)在線社會(huì)》說課稿
- Unit 4 Topic 2 Section D 說課稿 2024-2025學(xué)年仁愛科普版九年級(jí)英語上冊(cè)
- 二零二四年住宅小區(qū)物業(yè)客戶滿意度調(diào)查合同模板3篇
- 探索學(xué)生早餐與認(rèn)知能力的關(guān)聯(lián)
- 三年級(jí)數(shù)學(xué)計(jì)算題專項(xiàng)練習(xí)匯編及答案
- 2025年度電子元器件用高純鋁材料采購(gòu)合同4篇
- 四年級(jí)數(shù)學(xué)(四則混合運(yùn)算)計(jì)算題專項(xiàng)練習(xí)與答案匯編
- 第二章 運(yùn)營(yíng)管理戰(zhàn)略
- 《三本白皮書》全文內(nèi)容及應(yīng)知應(yīng)會(huì)知識(shí)點(diǎn)
- 專題14 思想方法專題:線段與角計(jì)算中的思想方法壓軸題四種模型全攻略(解析版)
- 醫(yī)院外來器械及植入物管理制度(4篇)
- 圖像識(shí)別領(lǐng)域自適應(yīng)技術(shù)-洞察分析
- 港口與港口工程概論
- 《念珠菌感染的治療》課件
- 新概念英語第二冊(cè)考評(píng)試卷含答案(第49-56課)
- 商業(yè)倫理與企業(yè)社會(huì)責(zé)任(山東財(cái)經(jīng)大學(xué))智慧樹知到期末考試答案章節(jié)答案2024年山東財(cái)經(jīng)大學(xué)
- 【奧運(yùn)會(huì)獎(jiǎng)牌榜預(yù)測(cè)建模實(shí)證探析12000字(論文)】
- (完整版)譯林版英語詞匯表(四年級(jí)下)
評(píng)論
0/150
提交評(píng)論