第三章MCS系列單片機(jī)指令系統(tǒng)2優(yōu)秀文檔_第1頁
第三章MCS系列單片機(jī)指令系統(tǒng)2優(yōu)秀文檔_第2頁
第三章MCS系列單片機(jī)指令系統(tǒng)2優(yōu)秀文檔_第3頁
第三章MCS系列單片機(jī)指令系統(tǒng)2優(yōu)秀文檔_第4頁
第三章MCS系列單片機(jī)指令系統(tǒng)2優(yōu)秀文檔_第5頁
已閱讀5頁,還剩68頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

3.3.2算術(shù)運(yùn)算指令

1加法、減法指令2乘法、除法指令3加1、減1指令4BCD碼(十進(jìn)制)調(diào)整指令5算術(shù)運(yùn)算類指令應(yīng)用實(shí)例

注意:加法指令將影響PSW中的Cy、AC、OV、P標(biāo)志位。(1)不帶進(jìn)位位加法指令

1)ADDA,Rn;A←A+Rn2)ADDA,@Rn;A←A+(Ri)3)ADDA,direct;A←A+(direct)4)ADDA,#data;A←A+data

3.3.2算術(shù)運(yùn)算指令

【例】設(shè)當(dāng)前A=7CH,R0=30H,R1=0D3H,(30H)=5BH,分別執(zhí)行下列指令后,累加器A、標(biāo)志位Cy、AC、OV、P分別為多少?1)ADDA,R12)ADDA,@R03)ADDA,30H4)ADDA,#30H解:1)A=7CH+0D3H=4FH(進(jìn)位),Cy=1,AC=0,OV=0,P=1。2)A=7CH+5BH=0D7H,Cy=0,AC=1,OV=1,P=0。3)A=7CH+5BH=0D7H,Cy=0,AC=1,OV=1,P=0。4)A=7CH+30H=0ACH,Cy=0,AC=0,OV=1,P=0。(2)帶進(jìn)位位加法指令1)ADDCA,Rn;A←A+Rn+Cy2)ADDCA,@Rn;A←A+(Ri)+Cy

3)ADDCA,direct;A←A+(direct)+Cy

4)ADDCA,#data;A←A+data+Cy注意:帶進(jìn)位位加法指令必須加上Cy,因此必須考慮在程序執(zhí)行過程中Cy狀態(tài)的變化情況。所以:A=0AH,B=01H,OV=0,P=05)INCDPTR;DPTR←DPTR+1CJNEA,#0AA,ST1解:根據(jù)題意,可寫出下面指令:MOVR0,#30H數(shù)據(jù)傳送指令分為內(nèi)部數(shù)據(jù)傳送指令、累加器和外部RAM傳送指令、查表指令、堆棧操作指令等。注意:此處@A+DPTR不代表間址的概念,MOVC,Y根據(jù)基址寄存器的不同,又可以分為近程查表和遠(yuǎn)程查表,近程查表用PC作為基址寄存器,遠(yuǎn)程查表采用DPTR作為基址寄存器。注意:除法指令影響標(biāo)志位OV、P。說明:本條指令的操作數(shù)是相對(duì)地址,rel是一個(gè)帶符號(hào)的偏移量(補(bǔ)碼),其范圍為-128~+127共256字節(jié)。寄存器尋址可以訪問工作寄存器R0~R7、A、B、DPTR,直接尋址可以訪問內(nèi)部RAM低128B和特殊功能寄存器(SFR),寄存器間接尋址可以訪問片內(nèi)RAM低128B和片外RAM64KB,變址尋址可以訪問程序存儲(chǔ)器。SJMPPROP ;否則,是正數(shù),轉(zhuǎn)移至PROP【例】設(shè)當(dāng)前A=7CH,R0=30H,R1=0D3H,(30H)=5BH,Cy=1,執(zhí)行下列程序后,累加器A、標(biāo)志位Cy、AC、OV、P為多少?ADDCA,R1ADDCA,@R0ADDCA,30HADDCA,#30H解:第一條指令:A=7CH+0D3H+Cy=4FH+1=50H,Cy=1第二條指令:A=50H+5BH+Cy=0ABH+1=0ACH,Cy=0第三條指令:A=0ACH+5BH+Cy=07H+0=07H,Cy=1第四條指令:A=07H+30H+Cy=37H+1=38H所以結(jié)果:A=38H,Cy=0,AC=0,OV=0,P=1課本P56,例3-28注意:減法指令影響標(biāo)志位Cy、AC、OV、P;減法指令只有帶進(jìn)位標(biāo)志位的減法指令。

1)SUBBA,Rn;A←A-Rn-Cy2)SUBBA,@Rn;A←A-(Ri)-Cy

3)

SUBBA,direct;A←A-(direct)-Cy

4)

SUBBA,#data;A←A-data-Cy【例3-30】設(shè)當(dāng)前A=0A6H,Cy=0,R0=35H,(35H)=45H,,求執(zhí)行指令“SUBBA,@R0”后,累加器A、標(biāo)志位Cy、AC、OV、P為多少?解:SUBBA,@R0;A=A-(R0)-Cy=A6H-45H-0=61H=01100001B

所以結(jié)果:A=61H,Cy=0,AC=0,OV=1,P=1。MULAB;BA←A×B上述指令將累加器A和寄存器B中的兩個(gè)無符號(hào)數(shù)進(jìn)行乘法運(yùn)算,乘積的高八位存放在寄存器B中,低八位存放在累加器A中。注:乘法指令影響標(biāo)志位OV、P。當(dāng)乘積大于0FFH,即寄存器B中的數(shù)據(jù)不為0時(shí),OV=1,否則OV=0?!纠吭O(shè)當(dāng)前A=03H,B=05H,則執(zhí)行指令MULAB后,A、B、OV、P分別為多少?解:所以:A=0FH,B=00H,OV=0,P=0(僅判斷累加器A中“1”的個(gè)數(shù))00000011Bx00000101B00000011+000000110000001111B【例】設(shè)當(dāng)前A=33H,B=37H,則執(zhí)行指令MULAB后,A、B、OV、P分別為多少?解:所以:A=0F5H,B=0AH,OV=1,P=0(僅判斷累加器A中“1”的個(gè)數(shù))00110011Bx00110111B00110011001100110011001100110011+001100110101011110101B

注意:除法指令影響標(biāo)志位OV、P。當(dāng)除數(shù)B中的數(shù)據(jù)為0時(shí),OV=1,否則OV=0,除法運(yùn)算中Cy總為0。DIVAB;A←(A/B)商,B←(A/B)余數(shù)【例】設(shè)當(dāng)前A=33H,B=05H,則執(zhí)行指令DIVAB后,A、B、OV、P分別為多少?解:所以:A=0AH,B=01H,OV=0,P=000001010101B00110011B-101101-1011注意:除“INCA”和“DECA”兩條指令影響P標(biāo)志位外,其余均不影響標(biāo)志位。

(1)加1指令1)INCA;A←A+12)INCRn;Rn←Rn+1

3)INC@Ri;(Ri)←(Ri)+1

4)INCdirect;(direct)←(direct)+1

5)INCDPTR;DPTR←DPTR+15.加1/減1指令(2)減1指令

1)DECA;A←A-12)DECRn;Rn←Rn-1

3)DEC@Ri;(Ri)←(Ri)-1

4)DECdirect;(direct)←(direct)-1注意:對(duì)于數(shù)據(jù)指針DPTR,只有加1指令,沒有減1指令。BCD碼:四位二進(jìn)制數(shù)表示一位十進(jìn)制數(shù)。

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

DAA D4H 調(diào)整累加器A內(nèi)容為BCD碼注意:這條指令一般跟在ADD或ADDC指令后,將相加后存放在累加器中的結(jié)果進(jìn)行BCD碼(十進(jìn)制)調(diào)整,完成BCD(十進(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。6.BCD碼調(diào)整指令(十進(jìn)制調(diào)整指令)【例】設(shè)累加器A內(nèi)容為01010110B(即為56的BCD碼),寄存器R3內(nèi)容為01100111B(67的BCD碼),編寫指令,求十進(jìn)制數(shù)56+67的和。解:根據(jù)題意,可寫出下面指令:ADDA,R3DAA第一條指令是加法指令,相加后累加器A的內(nèi)容為10111101B(0BDH);然后執(zhí)行調(diào)整指令“DAA”。因?yàn)楦咚奈恢禐?1>9,低四位13>9,所以CPU自動(dòng)進(jìn)行加66H操作,結(jié)果A的內(nèi)容為00100011B(即23的BCD碼),Cy=1。BCD碼調(diào)整指令(十進(jìn)制調(diào)整指令)算術(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~41H單元。解:求兩個(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位

算術(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位算術(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.3.3邏輯運(yùn)算指令

1邏輯“與”、“或”、“異或”指令2清零、取反指令3循環(huán)移位指令4邏輯運(yùn)算類指令應(yīng)用實(shí)例

“與”運(yùn)算指令

1)ANLA,Rn;A←A∧Rn2)ANLA,@Rn;A←A∧(Ri)

3)ANLA,direct;A←A∧(direct)

4)ANLA,#data;A←A∧data

5)ANLdirect,A;(direct)←(direct)∧A6)ANLdirect,#data;(direct)←(direct)∧data注意:邏輯與運(yùn)算要逐位相與,遵守“有0為0,全1為1”規(guī)則。3.3.3邏輯運(yùn)算指令

【例】執(zhí)行下列程序后,A=?MOVA,#7BH;A=7BHMOVR0,#40H;R0=40HMOV40H,#0D9H;(40H)=0D9HANLA,@R0;A=01111011B∧11011001B=01011001BANLA,#6FH;A=01011001B∧01101111B=01001001BANLA,R0;A=01001001B∧01000000B=01000000B所以:A=40HCPLA;A←A(bit)←(bit)因?yàn)楦咚奈恢禐?1>9,低四位13>9,所以CPU自動(dòng)進(jìn)行加66H操作,結(jié)果A的內(nèi)容為00100011B(即23的BCD碼),Cy=1。【例15】試分析執(zhí)行下列指令以后,寄存器和內(nèi)部RAM的狀態(tài)。若A≠0,則PC←PC+rel+2CJNE第一操作數(shù),第二操作數(shù),rel2)ANLC,/bit;Cy←Cy∧(bit);SP←SP+1,(SP)←PC7-0注意:對(duì)累加器A取反要逐位取反,“1”取反為“0”,“0”取反為“1”。4邏輯運(yùn)算類指令應(yīng)用實(shí)例MOVA,50H ;取第一個(gè)數(shù)低2位BCD碼【例】當(dāng)前PC=2000H,執(zhí)行指令LCALL3000H,數(shù)據(jù)狀態(tài)變化如圖所示(點(diǎn)擊頁面可以演示)。;PC10-0←addr11,PC15-11保持不變?nèi)鬋y=0,則PC←PC+23)DEC@Ri;(Ri)←(Ri)-12)SETBbit;1)ORLA,Rn;A←A∨Rn2)ORLA,@Rn;A←A∨(Ri)

3)ORLA,direct;A←A∨(direct)

4)ORLA,#data;A←A∨data

5)ORLdirect,A;(direct)←(direct)∨A6)ORLdirect,#data;(direct)←(direct)∨data注意:邏輯與運(yùn)算要逐位相或,遵守“有1為1,全0為0”規(guī)則。“或”運(yùn)算指令【例】執(zhí)行下列程序后,A=?(40H)=?MOVA,#7BH;A=7BHMOVR0,#40H;R0=40HMOV40H,#0D9H;(40H)=0D9HORLA,R0;A=01111011B∨01000000B=01111011BORLA,#63H;A=01111011B∨01100011B=01111011BORL40H,A;(40H)=11011001B∨01111011B=11111011B所以:A=7BH,(40H)=0FBH

1)XRLA,Rn;A←A⊕Rn2)XRLA,@Rn;A←A⊕(Ri)

3)XRLA,direct;A←A⊕(direct)

4)XRLA,#data;A←A⊕data

5)XRLdirect,A;(direct)←(direct)⊕A6)XRLdirect,#data;(direct)←(direct)⊕data注意:邏輯與運(yùn)算要逐位相異或,遵守“相同為0,不同為1”規(guī)則?!爱惢颉边\(yùn)算指令3)位名稱方式:Cy要正確理解指令的功能一定要分析指令中操作數(shù)是如何獲取的,也就是要清楚尋址方式。本章主要介紹8051單片機(jī)的指令系統(tǒng)。指令系統(tǒng)是計(jì)算機(jī)可執(zhí)行命令的集合,是程序設(shè)計(jì)的基礎(chǔ)。ANLA,@R0;A=01111011B∧11011001B=01011001B數(shù)據(jù)傳送類指令中還包含了一種交換指令,能將源地址單元和目的地址單元內(nèi)容互換。MOV40H,#0D9H;(40H)=0D9H;PC←addr16【例】設(shè)當(dāng)前A=03H,B=05H,則執(zhí)行指令MULAB后,A、B、OV、P分別為多少?【例14】試編程計(jì)算5678H~1234H的值,結(jié)果保存在R6、R5中。熟悉和掌握指令系統(tǒng)對(duì)于單片機(jī)的匯編語言程序設(shè)計(jì)是十分重要的。說明:本指令作為中斷服務(wù)程序的最后一條指令,其目的在處理完中斷服務(wù)程序后返回原程序斷點(diǎn)處。ORLA,#63H;A=01111011B∨01100011B=01111011B注:不能用于十進(jìn)制減法的調(diào)整。DJNZdirect,rel;(direct)←(direct)-1無條件轉(zhuǎn)移類指令有四類:MOVR0,#30H

1)對(duì)累加器A清零指令

CLRA;A←00H2)對(duì)累加器A取反指令

CPLA;A←A注意:對(duì)累加器A取反要逐位取反,“1”取反為“0”,“0”取反為“1”。

1)循環(huán)左移:

RLA

2)帶進(jìn)位位Cy循環(huán)左移:RLCA

3)循環(huán)右移:

RRA

4)帶進(jìn)位位Cy循環(huán)右移:RRCAP61,例3-43邏輯運(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=10101010B邏輯運(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.3.4轉(zhuǎn)移與調(diào)用返回指令

1子程序調(diào)用和返回指令2轉(zhuǎn)移指令3空操作指令4控制轉(zhuǎn)移類指令應(yīng)用實(shí)例1)絕對(duì)調(diào)用指令

ACALLaddr11;PC←PC+2;SP←SP+1,(SP)←PC7-0;SP←SP+1,(SP)←PC15-8;PC10-0←addr11,PC15-11保持不變說明:本指令的操作數(shù)為8位操作數(shù),作為addr11中的低8位,而addr11中的高3位隱含在操作碼中。注意:本指令只能在2KB范圍內(nèi)調(diào)用,在ROM允許情況下,建議不要使用本指令。

1.子程序調(diào)用和返回指令

2)長(zhǎng)調(diào)用指令

LCALLaddr16;PC←PC+3;SP←SP+1,(SP)←PC7-0;SP←SP+1,(SP)←PC15-8;PC←addr16說明:本指令可以在整個(gè)64KBROM范圍內(nèi)調(diào)用,使用靈活方便,不會(huì)出錯(cuò)。在ROM允許情況下,建議使用本指令。60H8CH20H【例】當(dāng)前PC=2000H,執(zhí)行指令LCALL3000H,數(shù)據(jù)狀態(tài)變化如圖所示(點(diǎn)擊頁面可以演示)。LCALL3000H則PC=?SP=?(SP)=?(SP-1)=?70H33H45H00HPC71H73HSP72H71H70H72H…03H03H203000H3)子程序返回指令

RET;PC15-8←(SP),SP←SP-1;PC7-0←(SP),SP←SP-1說明:本指令作為子程序最后一條指令,其目的在子程序完成后能返回原程序斷點(diǎn)處。與調(diào)用指令對(duì)應(yīng)。4)中斷返回指令

RETI;PC15-8←(SP),SP←SP-1;PC7-0←(SP),SP←SP-1說明:本指令作為中斷服務(wù)程序的最后一條指令,其目的在處理完中斷服務(wù)程序后返回原程序斷點(diǎn)處。與中斷響應(yīng)對(duì)應(yīng)。(1)無條件轉(zhuǎn)移指令無條件轉(zhuǎn)移指令是指當(dāng)程序執(zhí)行到該指令時(shí),程序無條件轉(zhuǎn)移到指令所提供的地址處執(zhí)行。無條件轉(zhuǎn)移類指令有四類:絕對(duì)轉(zhuǎn)移——AJMP長(zhǎng)轉(zhuǎn)移——LJMP短轉(zhuǎn)移——SJMP間接轉(zhuǎn)移——JMP1)絕對(duì)轉(zhuǎn)移指令

AJMPaddr11;PC←PC+2;PC10-0←addr11,PC15-11保持不變說明:本指令的操作數(shù)為8位操作數(shù),作為addr11中的低8位,而addr11中的高3位隱含在操作碼中。注意:本指令只能在2KB范圍內(nèi)轉(zhuǎn)移,在ROM允許情況下,建議不要使用本指令。

本指令與ACALLaddr11指令不同在于,它不保存當(dāng)前PC值,因?yàn)檗D(zhuǎn)移不需要返回。2)長(zhǎng)轉(zhuǎn)移指令

LJMPaddr16;PC←PC+3;PC←addr16說明:本指令可以在整個(gè)64KBROM范圍內(nèi)轉(zhuǎn)移,使用靈活方便,不會(huì)出錯(cuò)。在ROM允許情況下,建議使用本指令。注意:本指令與LCALLaddr16不同之處,它不需要保存當(dāng)前PC值,因?yàn)椴恍枰祷亍?)短轉(zhuǎn)移指令

SJMPrel;PC←PC+2;PC←PC+rel說明:本條指令的操作數(shù)是相對(duì)地址,rel是一個(gè)帶符號(hào)的偏移量(補(bǔ)碼),其范圍為-128~+127共256字節(jié)。負(fù)數(shù)表示反向轉(zhuǎn)移,正數(shù)表示正向轉(zhuǎn)移。針對(duì)rel不同情況(正數(shù)或負(fù)數(shù))可以采用下列公式:當(dāng)rel為正數(shù)(<80H)時(shí):PC目的=PC原+2+rel當(dāng)rel為負(fù)數(shù)(≥80H)時(shí):PC目的=PC原+2+rel-100H【例】當(dāng)前PC=2356H,執(zhí)行SJMPrel后,(1)如果PC為2347H,則rel為多少?(2)如果PC為2379H,則rel為多少?解:(1)因?yàn)镻C目的<PC原,所以采用公式PC目的=PC原+2+rel-100Hrel=PC目的-PC原-2+100H=2347H+100H-2356H-2=0EFH(2)因?yàn)镻C目的>PC原,所以采用公式PC目的=PC原+2+relrel=PC目的-PC原-2=2379H-2356H-2=021H【例】當(dāng)前PC=2356H,執(zhí)行(1)SJMP0BCH(2)SJMP36H后,PC分別為多少?解:(1)因?yàn)閞el為負(fù)數(shù),所以采用公式PC目的=PC原+2+rel-100H=2356H+2+0BCH-100H=2314H(2)因?yàn)閞el為正數(shù),所以采用公式PC目的=PC原+2+rel=2356H+2+36H=238EH注意:使用SJMPrel指令,在人工匯編時(shí)在知道當(dāng)前PC和目的PC后,求rel。對(duì)于偏移量的計(jì)算必須要求掌握,后面的條件轉(zhuǎn)移指令均涉及到偏移量問題。在求rel時(shí),是減2還是減3要根據(jù)指令的字節(jié)數(shù)而定,如果指令的字節(jié)數(shù)為2,則減2;如果指令的字節(jié)數(shù)為3,則減3。4)間接轉(zhuǎn)移指令

JMP@A+DPTR;PC←A+DPTR說明:A中的值為無符號(hào)數(shù)。注意:此處@A+DPTR不代表間址的概念,即不是這樣功能:PC←(A+DPTR)【例】

ORG2000HMOVA,#20H;A=20HMOVDPTR,#3200H;DPTR=3200HJMP@A+DPTR;PC=3220H即執(zhí)行JMP@A+DPTR后,將轉(zhuǎn)到3220H處執(zhí)行。(2)條件轉(zhuǎn)移指令條件轉(zhuǎn)移指令是指根據(jù)給出的條件進(jìn)行判斷,若條件滿足,則程序轉(zhuǎn)向由偏移量確定的目的地址處去執(zhí)行。若條件不滿足,程序?qū)⒉粫?huì)轉(zhuǎn)移,而是按原順序執(zhí)行。8051有豐富的條件轉(zhuǎn)移指令。

1)判零轉(zhuǎn)移指令

JZrel

;若A=0,則PC←PC+rel+2;若A≠0,則PC←PC+2說明:即A為零則轉(zhuǎn)移,否則執(zhí)行緊跟JZrel的下一條指令。

JNZrel

;若A≠0,則PC←PC+rel+2;若A=0,則PC←PC+2說明:即A不為零則轉(zhuǎn)移,否則執(zhí)行緊跟JNZrel的下一條指令。

JNZrel的流程圖A=0?YES轉(zhuǎn)移NO往下執(zhí)行JZrel的流程圖A=0?YES轉(zhuǎn)移NO往下執(zhí)行2)判Cy轉(zhuǎn)移指令

JCrel

;若Cy=1,則PC←PC+rel+2;若Cy=0,則PC←PC+2

JNCrel

;若Cy=0,則PC←PC+rel+2;若Cy=1,則PC←PC+2說明:上述兩條指令的條件剛好相反。第一條指令是進(jìn)位標(biāo)志位Cy為1時(shí)轉(zhuǎn)移,否則不轉(zhuǎn)移;第二條指令是進(jìn)位標(biāo)志位Cy為0時(shí)轉(zhuǎn)移,否則不轉(zhuǎn)移。JNCrel的流程圖Cy=1?往下執(zhí)行YJCrel的流程圖Cy=0?NYN轉(zhuǎn)移轉(zhuǎn)移往下執(zhí)行【例3-48】執(zhí)行下列程序后,A=?R0=?START:MOVA,#00HMOVR0,#00HLOOP:ADDA,#50HJCEXITINCR0SJMPLOOPEXITEND解:執(zhí)行本程序后結(jié)果為A=40H,R0=03H.3)判位變量轉(zhuǎn)移指令

JBbit,rel;若(bit)=1,則PC←PC+rel+3;若(bit)=0,則PC←PC+3JNBbit,rel;若(bit)=0,則PC←PC+rel+3;若(bit)=1,則PC←PC+3說明:上述兩條指令是根據(jù)位地址bit這位的1或0的情況來轉(zhuǎn)移或不轉(zhuǎn)移。第一條指令是當(dāng)這位為1時(shí)轉(zhuǎn)移,為0時(shí)不轉(zhuǎn)移(執(zhí)行下一條指令)。第二條指令與第一條指令的條件剛好相反。JNBbit,rel的流程圖(bit)=1?NYJBbit,rel的流程圖(bit)=0?NY轉(zhuǎn)移轉(zhuǎn)移往下執(zhí)行往下執(zhí)行4)判位變量并清零轉(zhuǎn)移指令

JBCbit,rel;若(bit)=1,則PC←PC+rel+3且bit)=0;若(bit)=0,則PC←PC+3(bit)=1?NY(bit)=0轉(zhuǎn)移往下執(zhí)行5)比較轉(zhuǎn)移指令

CJNE第一操作數(shù),第二操作數(shù),rel具體指令格式為:

CJNEA,direct,relCJNEA,#data,relCJNERn,#data,relCJNE@Ri,#data,rel

注意:若目的操作數(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ù)?!纠颗袛鄡?nèi)存30H單元中內(nèi)容是否為AAH,若不是則置40H單元為FFH,若是則置40H單元為00H。使用CJNEA,direct,rel

ST:MOVA,#0AAHMOV40H,#0FFHCJNEA,30H,ST1MOV40H,#00HST1:END使用CJNEA,#data,rel

ST:MOVA,30HMOV40H,#0FFHCJNEA,#0AA,ST1MOV40H,#00HST1:END使用CJNE@R0,#data,rel

ST:MOVR0,#30HMOV40H,#0FFHCJNE@R0,#0AAH,ST1MOV40H,#00HST1:END使用CJNERn,#data,rel

ST:MOVR0,30HMOV40H,#0FFHCJNER0,#0AA,ST1MOV40H,#00HST1:END6)減1非0(循環(huán)轉(zhuǎn)移)指令

DJNZRn,rel;Rn←Rn-1,;若Rn≠0,則轉(zhuǎn)移PC←PC+2+rel;;若Rn=0,則執(zhí)行下一條指令DJNZdirect,rel;(direct)←(direct)-1;若(direct)≠0,則PC←PC+3+rel;若(direct)=0,則執(zhí)行下一條指令NYRn←Rn-1……Rn=0?……NY(direct)←(direct)-1……(direct)=0?……【例】判斷內(nèi)存從30H~3FH中是否存在關(guān)鍵字為AAH的單元,若有則置40H單元為FFH,若沒有則置40H單元為00H。START:MOV40H,#00HMOVR0,#30HMOVR1,#10HLOOP1:CJNE@R0,#0AAH,LOOP2MOV40H,#0FFHSJMPLOOP3LOOP2:INCR0DJNZR1,LOOP1LOOP3:END【例3-49】統(tǒng)計(jì)從內(nèi)存30H~3FH單元中有多少個(gè)關(guān)鍵字為0AAH的單元,將統(tǒng)計(jì)結(jié)果存放在40H單元中。START:MOV40H,#00HMOVR0,#30HMOVR1,#10HLOOP1:CJNE@R0,#AAH,LOOP2INC40H

SJMPLOOP1LOOP2:INCR0DJNZR1,LOOP1LOOP3:END

NOP;PC←PC+1說明:這是一條單字節(jié)指令,除PC加1指向下一條指令以外,它不執(zhí)行其他任何操作,不影響其他寄存器和標(biāo)志位。NOP指令常用來產(chǎn)生一個(gè)機(jī)器周期的延遲,用來編寫軟件延時(shí)程序。3.3.5位操作類指令

1位傳送指令2位邏輯運(yùn)算指令3位清0、置1指令4位取反指令5位操作類指令應(yīng)用實(shí)例

3.3.5位操作指令

位操作指令主要實(shí)現(xiàn)對(duì)某一位進(jìn)行位置位(置1)、位清零、位取反或位傳送、位邏輯運(yùn)算等操作。位尋址空間包括以下兩部分:片內(nèi)RAM中位尋址區(qū)——即字節(jié)地址20H~2FH單元中連續(xù)的128個(gè)位,位地址為00H~7FH。部分特殊功能寄存器中的可尋址位——凡SFR中字節(jié)地址能被8整除的特殊功能寄存器都可以進(jìn)行位尋址。位地址為80~F7H,一共83位。位地址的表示方法(以PSW中的D7位為例):1)直接位地址方式:D7H3)位名稱方式:Cy4)用戶定義名方式:USERBITCy(后面程序可以用USER代替Cy)1在進(jìn)行位尋址時(shí),PSW中的進(jìn)位標(biāo)志CY作為位處理機(jī)的累加器,稱為位累加器。1)MOVC,bit;Cy←(bit);2)MOVbit,C;(bit)←Cy【例】設(shè)當(dāng)前程序狀態(tài)字PSW和累加器A的數(shù)據(jù)狀態(tài)如圖,執(zhí)行下列程序后,其數(shù)據(jù)變化如圖所示(點(diǎn)擊頁面即可)。MOVACC.5,C0000000PSWA1111110001011)SETBC;Cy←1

2)SETBbit;(bit)←1【例】當(dāng)前程序狀態(tài)字PSW狀態(tài)如圖所示,要求將當(dāng)前工作寄存器區(qū)設(shè)置為3區(qū),試編程(點(diǎn)擊頁面即可)。SETBRS1SETBRS0000000PSW1001)CLRC;Cy←0

2)CLRbit;(bit)←0【例】當(dāng)前程序狀態(tài)字PSW狀態(tài)如圖所示,要求將當(dāng)前工作寄存器區(qū)設(shè)置為2區(qū),試編程(點(diǎn)擊頁面即可)。CLRRS00001000PSW101)CPLC;Cy←Cy

2)CPLbit;(bit)←(bit)(1)位邏輯與運(yùn)算指令1)ANLC,bit;Cy←Cy∧(bit)2)ANLC,/bit;Cy←Cy∧(bit)(2)位邏輯或運(yùn)算指令1)ORLC,bit;Cy←Cy∨(bit)2)ORLC,/bit;Cy←Cy∨(bit)

【例3-51】試編程,實(shí)現(xiàn)以下邏輯運(yùn)算:Q=X·Y+Y·Z其中:Q為P1.1,X為P2.1,Y為P0.2,Z為P1.7。程序如下:MOVC,XANLC,YMOVF0,CMOVC,YANLC,/ZORLC,F0MOVQ,CEND位操作類指令應(yīng)用實(shí)例

【例26】

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

CPLCMOVP1.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

溫馨提示

  • 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. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論