




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、單片機(jī)原理及應(yīng)用,北京化工大學(xué) 信息科學(xué)與技術(shù)學(xué)院 主講教師:林偉國(guó) E-mail: ,cn,第三章 MCS-51指令系統(tǒng),本章重點(diǎn),尋址方式 指令格式 操作結(jié)果及對(duì)標(biāo)志位影響,第一節(jié) 概述,分類,數(shù)據(jù)傳送類指令 29,數(shù)學(xué)運(yùn)算類指令 24,邏輯運(yùn)算類指令 24,控制轉(zhuǎn)移類指令 17,位操作指令 17,指令格式,標(biāo)號(hào):操作碼 (目的操作數(shù)),(源操作數(shù)) ;注釋,指令的符號(hào)地址,由字母打頭的字母數(shù)字串組成,長(zhǎng)度一般不超過(guò)6個(gè)符號(hào),指令操作的性質(zhì),用規(guī)定的匯編語(yǔ)言助記符表示,指令操作的對(duì)象,按指令長(zhǎng)度分類,單字節(jié)指令,雙字節(jié)指令,三字節(jié)指令,指令執(zhí)行時(shí)間,12
2、個(gè)振蕩周期 64條,24個(gè)振蕩周期 45條,48個(gè)振蕩周期 2條,第二節(jié) MCS-51的尋址方式,尋址方式就是確定操作數(shù)所在的位置(地址),把操作數(shù)提取出來(lái)的方法。,基本尋址方式:,1、寄存器尋址2、直接尋址 3、寄存器間接尋址4、立即尋址 5、基址寄存器加變址寄存器間接尋址 6、相對(duì)尋址7、位尋址,一、寄存器尋址,以通用寄存器的內(nèi)容作為操作數(shù),在指令的助記符中直接以寄存器的名字表示操作數(shù)位置,尋址范圍:,工作寄存器Rn(R0R7),寄存器ACC(累加器A),B,DPTR,Cy,例:MOV A,R0,二、直接尋址,指令中直接給出操作數(shù)地址,尋址范圍:,1、內(nèi)部數(shù)據(jù)RAM的低128個(gè)字節(jié)單元 2
3、、特殊功能寄存器 3、位地址空間,通用符號(hào):direct,例:MOV A,3AH,MOV A,P0,MOV A,80H,等價(jià),三、寄存器間接尋址方式,指令指定的寄存器內(nèi)容為操作數(shù)地址,間址寄存器:,R0,R1,DPTR,SP,尋址范圍:,1、內(nèi)部RAM的低128字節(jié)(00H7FH) R0, R1 (Ri ,i=0,1),2、外部RAM的64KB(0000HFFFFH) DPTR, R0, R1,例:MOV A,R0 設(shè): (R0)=30H (30H)=6FH,操作結(jié)果: (30H),A,A=6FH,如指令為 MOV A,R0 則 A=30H,四、立即尋址方式,指令直接給出操作數(shù),操作數(shù)為8位或
4、16位二進(jìn)制數(shù),稱立即數(shù),尋址范圍:,程序存儲(chǔ)器中的立即數(shù),通用符號(hào):#data (8位),#data16(16位),例:MOV A,#0FH MOV DPTR , #1000H,五、變址間接尋址,基址寄存器內(nèi)容加上間址寄存器內(nèi)容(地址偏移量)為有效地址,基址寄存器:PC,DPTR 變址寄存器:A,尋址范圍:程序存儲(chǔ)器,例: MOVC A,A+DPTR 設(shè) A=11H DPTR=02F1H,操作數(shù)地址為 02F1H+11H=0302H,操作:,(0302H),A,六、相對(duì)尋址方式,以PC當(dāng)前值為基址,加上指令中給出的偏移量(del)形成有效的程序轉(zhuǎn)移地址。,僅用在控制轉(zhuǎn)移類指令中,轉(zhuǎn)移范圍:以
5、PC當(dāng)前值為起始地址,相對(duì)偏移在+127-128個(gè)字節(jié)單元之間。,偏移量rel帶符號(hào)數(shù),為八位二進(jìn)制補(bǔ)碼,例: 1005H:JC 80H,執(zhí)行過(guò)程:,讀指令,完成后 (PC)=(PC)+2,如 C=1,則 (PC)=(PC)+rel 轉(zhuǎn)移至 1007H-80H=0F87H 單元,如C=0 則執(zhí)行1007H單元中的指令,1005H 40H 1006H 80H 1007H,后向128個(gè)單元 前向127個(gè)單元,七、位尋址,MCS-51設(shè)有獨(dú)立的位處理器,位地址一般用直接位地址方式給出,可歸入直接尋址方式,尋址范圍:,位尋址內(nèi)部RAM 128位 可位尋址的SFR 82位,通用符號(hào):bit,指令中位地址
6、的表示方式:,1、直接地址(位地址) 2、位名稱 3、第幾單元第幾位,寄存器名+位,4、用偽指令指定的符號(hào)地址,例:,PSW中F0(用戶標(biāo)志)可表示如下:,D5H F0 PSW.5 AF(AF EQU F0),第三節(jié) 數(shù)據(jù)傳送類指令,按操作方式,分為三種:,數(shù)據(jù)傳送,數(shù)據(jù)交換,棧操作,一、普通傳送類指令,格式:,MOV (目的操作數(shù)),(源操作數(shù)),操作碼助記符,操作:,將源操作數(shù)單元內(nèi)容,傳送到目的操作數(shù)單元中,源操作數(shù)內(nèi)容不變。不影響標(biāo)志位Cy,AC和OV。,操作數(shù)的組合關(guān)系,1、立即數(shù)的傳送,MOV A, #data,(A),#data,MOV Rn, #data,(Rn),#data,
7、MOV Ri, #data,(Ri),#data,MOV direct, #data,(direct),#data,MOV DPTR, #data16,(DPTR),#data,說(shuō)明:,a、MOV A,#data,將8位立即數(shù)送入累加器A中,例:MOV A,#80H,操作結(jié)果: (A)= 80H,b、MOV Rn,#data n=07,將8位立即數(shù)送入工作寄存器Rn中,例:MOV R4,#80H,操作結(jié)果: (R4)= 80H,c、MOV Ri, #data,將8位立即數(shù)送入由Ri指定的地址單元中,i=0,1。,Ri中的地址為00H7FH(8051),00HFFH(8052),注:僅尋址內(nèi)部R
8、AM,不能尋址SFR,例:MOV R0,#32H 設(shè) (R0)=70H , (70H)=11H,執(zhí)行結(jié)果:(70H)=32H,d:MOV direct,#data,將8位立即數(shù)送入由direct直接尋址的地址單元中。,direct:00HFFH,8位二進(jìn)制地址碼 尋址內(nèi)部RAM(00H7FH)及SFR,例:MOV 70H,#70H,MOV P0,#70H MOV 80H,#70H,e:MOV DPTR,#data,唯一的16位數(shù)據(jù)傳送指令,把16位立即數(shù)送入DPTR中,例:MOV DPTR,#2034H,執(zhí)行結(jié)果:(DPH)=20H (DPL)=34H,2、內(nèi)部數(shù)據(jù)存儲(chǔ)器與累加器A傳送數(shù)據(jù),M
9、OV A, direct,(A),(direct),MOV direct, A,(A),(direct),MOV A, Rn,(A),(Rn),MOV Rn, A,(A),(Rn),MOV A, Ri,(A),(Ri),MOV Ri, A,(Ri),(A),例:MOV R1,#82H MOV A,R1,指令錯(cuò)誤。因?yàn)?2H是DPL的地址值,對(duì)于SFR,不能使用間接尋址方式,正確指令:MOV A,DPL 或 MOV A,82H,3、內(nèi)部數(shù)據(jù)存儲(chǔ)器中Rn、SFR和片內(nèi)數(shù)據(jù)RAM之間的數(shù)據(jù)傳送,MOV direct,direct,(direct目的),(direct源),MOV direct, Rn
10、,(direct),(Rn),MOV Rn, direct,(direct),(Rn),MOV direct, Ri,(direct),(Ri),MOV Ri, direct,(Ri),(direct),例1:設(shè)PSW中標(biāo)志位RS1,RS0為“11”,則選中第三組工作寄存器,MOV 40H,R0,MOV 40H,18H,等價(jià),用立即尋址指令為片內(nèi)RAM中20H,25H和P1口上置數(shù),例2:,MOV 20H, #25H MOV 25H, #10H MOV P1, #0CAH,執(zhí)行結(jié)果(20H)=25H,(25H)=10H (P1)=CAH,將以上狀態(tài)作為初值,執(zhí)行以下程序,結(jié)果如何,MOV R0
11、, #20H MOV A, R0 MOV R1, A MOV B, R1 MOV R1, P1 MOV P3, P1,(R0)=20H,(A)=(R0)=(20H)=25H,(R1)=A,(B)=(R1)=(25H)=10H,(R1)=P1 (25H)=CAH,P3=P1=CAH,(A)=? (R1)=? (B)=? (25H)=? (P3)=? (P1)=? (20H)=?,25H 25H 10H CAH CAH CAH 25H,二、外部數(shù)據(jù)存儲(chǔ)器的數(shù)據(jù)傳送指令,只能采用間接尋址方式,且只能與累加器A進(jìn)行數(shù)據(jù)傳送,格式:MOVX (目的操作數(shù)),(源操作數(shù)),MOVX A, DPTR,(A)
12、,(DPTR),MOVX DPTR, A,(DPTR),(A),MOVX A,Ri,(A),(Ri),MOVX Ri, A,(Ri),(A),例:,若片外數(shù)據(jù)存儲(chǔ)單元中,(3007H)=60H,執(zhí)行:,MOV DPTR, #3007H MOVX A, DPTR,結(jié)果:,(A)=60H,使用Ri作間址寄存器,此時(shí)需用P2口輸出高八位地址,應(yīng)事先預(yù)置P2,Ri的值,以下程序功能與上例相同: MOV P2 , #30H MOV R0 , #07H MOVX A, R0,三、程序存儲(chǔ)器向累加器A傳送指令MOVC,MOVC A , A+PC,(PC),(PC)+1,(A),(A)+(PC),MOVC A
13、, A+DPTR,(A),(A)+(DPTR)),功能:把A中內(nèi)容與基址寄存器(PC,DPTR)內(nèi)容相加,求得程序存儲(chǔ)器某單元地址,再將該地址單元內(nèi)容送累加器A,8位無(wú)符號(hào)整數(shù),說(shuō)明:,1、以PC作為基址寄存器,因?yàn)镻C值不能任意更改,所以查表范圍為PC當(dāng)前值開(kāi)始后的256字節(jié)。,偏移量計(jì)算式: DIS=表首地址(該指令所在地址+1),2、以DPTR作為基址寄存器,因?yàn)镈PTR的內(nèi)容可以通過(guò)賦值改變,使表格可以設(shè)置在64KB程序存儲(chǔ)器的任意地址空間。,3、以上兩條指令中,表格長(zhǎng)度均受到變址寄存器A的限制,不超過(guò)256字節(jié)。,例1:編制根據(jù)累加器A中的數(shù)(09)查其平方表的子程序。,COUNT:
14、PUSH DPH; 保護(hù)DPTR內(nèi)容 PUSH DPL; MOV DPTR,#TABLE ;賦表首地址給DPTR MOVC A, A+DPTR ; 根據(jù)A中內(nèi)容查表 POP DPL; 恢復(fù)DPTR內(nèi)容 POP DPH RET; 返回主程序,ORG 1000H TABLE:DB 00 DB 01 DB 04 DB 09 DB 16 DB 25 DB 36 DB 49 DB 64 DB 81,DB:偽指令,作用是把其后的值存入由標(biāo)號(hào)開(kāi)始的連續(xù)單元中,例2:編子程序根據(jù)A中二進(jìn)制數(shù)查其ASCII碼,BITOASC:,ADD A,#02H MOVC A, A+PC SJMP BARET DB 30H,
15、 31H, 32H, 33H DB 34H, 35H, 36H, 37H DB 38H, 39H, 41H, 42H DB 43H, 44H, 45H, 46H RET,TABLE:,BARET:,四、數(shù)據(jù)交換指令,1、字節(jié)交換指令,XCH A, Rn XCH A, direct XCH A, Ri,(A) (Rn) (A) (direct) (A) (Ri),例:設(shè)(R0)=20H,(A)=3FH,(20H)=75H,執(zhí)行指令:XCH A,R0,執(zhí)行結(jié)果:(A)=75H,(20H)=3FH,2、半字節(jié)交換指令,XCHD A, Ri (A30) (Ri)30),例:設(shè)(R1)=30H,(A)=
16、67H,(30H)=84H,執(zhí)行指令:XCHD A, R1,執(zhí)行結(jié)果:(A)=64H (30H)=87H,3、累加器A高4位與低4位內(nèi)容互換指令,SWAP A ;( A 03) (A 03),例:設(shè)(A)=0CAH,執(zhí)行指令:SWAP A 執(zhí)行結(jié)果:(A)=0ACH,5、堆棧操作類指令,PUSH direct,(SP) (SP)+1 (SP) (direct),POP direct,(direct) (SP) (SP) (SP)-1,要點(diǎn):入棧操作,先執(zhí)行SP+1,再入棧 出棧操作,先出棧,再執(zhí)行SP-1,例:在中斷響應(yīng)時(shí),(SP)=09H,數(shù)據(jù)指針DPTR的內(nèi)容為0123H,執(zhí)行以下指令:,
17、PUSH DPL PUSH DPH,(SP)+1,使(SP)=0AH (DPL)壓入0AH單元,(SP)+1,(SP)=0BH (DPH)壓入0BH單元,執(zhí)行結(jié)果:,(0AH)=23H (0BH)=01H (SP)=0BH,堆棧操作需遵循先入后出,后入先出原則,才能保持原單元內(nèi)容不變,例:設(shè)(DPTR)=0123H,PUSH DPH PUSH DPL . . POP DPL POP DPH,執(zhí)行結(jié)果:(DPTR)=0123H,如執(zhí)行:,PUSH DPH PUSH DPL POP DPH POP DPL,執(zhí)行結(jié)果: (DPTR)=2301H,第四節(jié) 算術(shù)運(yùn)算類指令,類型:加,減,乘,除,增量、減
18、量以及二十進(jìn)制調(diào)整指令,ADD、ADDC、SUBB指令的執(zhí)行將影響標(biāo)志位(PSW中的OV,Cy,AC及P),一、加法指令A(yù)DD,目的操作數(shù)為A內(nèi)容,源操作數(shù)可以采用4種尋址方式,結(jié)果存放于A中,ADD A,Rn (A) (A)+(Rn) ADD A,direct (A) (A)+(direct) ADD A,Ri (A) (A)+(Ri) ADD A,#data (A) (A)+#data,運(yùn)算均針對(duì)無(wú)符號(hào)二進(jìn)制數(shù)進(jìn)行,但結(jié)合OV標(biāo)志可實(shí)現(xiàn)有符號(hào)數(shù)運(yùn)算。結(jié)果將影響OV,Cy,AC,P標(biāo)志,當(dāng)最高位有進(jìn)位,Cy=1 位3向位4有進(jìn)位,AC=1 OV取決于6、7兩位的進(jìn)位情況,同時(shí)有進(jìn)位或無(wú)進(jìn)位,
19、則OV=0;只有一位有進(jìn)位,OV=1 A中有偶數(shù)個(gè)1,P=0;否則,P=1,例:設(shè)(A)=0C3H,(R0)=0AAH 執(zhí)行指令:ADD A,R0 寫出執(zhí)行結(jié)果及對(duì)標(biāo)志位影響,(A) 1 1 0 0 0 0 1 1 + (R0) 1 0 1 0 1 0 1 0,0 1 1 0 1 1 0 1,C=1,AC=0,OV=1,P=1,(A)=6DH,只對(duì)有符號(hào)數(shù)運(yùn)算有意義。兩負(fù)數(shù)相加,結(jié)果為正數(shù),溢出,二、帶進(jìn)位加法指令A(yù)DDC,ADDC A, Rn ; (A) (A)+(C)+(Rn) ADDC A,direct ; (A) (A)+(C)+(direct) ADDC A,Ri ; (A) (A)
20、+(C)+(Ri) ADDC A, #data ; (A) (A)+(C)+(#data),常用于多字節(jié)加法,例:設(shè)(A)=0C3H,(R0)=0AAH,C=1 執(zhí)行指令:ADDC A,R0,(A) 1 1 0 0 0 0 1 1 + (C) 0 0 0 0 0 0 0 1,1 1 0 0 0 1 0 0,+(R0) 1 0 1 0 1 0 1 0,0 1 1 0 1 1 1 0,C=1,AC=0,OV=1,P=1,(A)=6EH,三、帶借位減法指令SUBB,SUBB A,Rn ; (A) (A)-(C)-(Rn) SUBB A,direct ; (A) (A)-(C)-(direct) SU
21、BB A,Ri ; (A) (A)-(C)-(Ri) SUBB A,#data ; (A) (A)-(C)-#data,影響標(biāo)志位:,最高位有借位,Cy=1 位3向位4有借位,AC=1 最高兩位同時(shí)有借位或無(wú)借位,OV=0;只有一位有借位,OV=1,例:設(shè)(A)=0C9H,(30H)=54H,C=1 執(zhí)行:SUBB A,30H,(A) 1 1 0 0 1 0 0 1 - (C) 0 0 0 0 0 0 0 1,1 1 0 0 1 0 0 0,- (30H) 0 1 0 1 0 1 0 0,0 1 1 1 0 1 0 0,C=0,AC=0,OV=1,P=0,(A)=74H,只有在符號(hào)數(shù)相減時(shí),O
22、V才意味著溢出與否,如出現(xiàn)以下兩種情況,OV置1:負(fù)-正=正 正-負(fù)=負(fù),四、增量指令I(lǐng)NC,INC A ; (A) (A)+1 INC Rn ; (Rn) (Rn)+1 INC direct ; (direct) (direct)+1 INC Ri ; (Ri) (Ri)+1 INC DPTR; (DPTR) (DPTR)+1,操作:指定變量加1,結(jié)果仍存于原地址單元中。除P外,不影響任何標(biāo)志位。,例:設(shè)(R0)=7EH,(7EH)=0FFH (7FH)=40H,執(zhí)行下列指令:,INC R0 ; INC R0 ; INC R0 ;,(R0)=(R0)+1, (7EH)=00H,(R0)=(R
23、0)+1, (7FH)=41H,(R0)=(R0)+1, (R0)=7FH,運(yùn)行結(jié)果: (R0)=7FH,(7EH)=00H (7FH)=41H,例:執(zhí)行指令序列,MOV DPTR,#1FFEH; INC DPTR ; INC DPTR ; INC DPTR ;,(DPTR)=1FFEH,(DPTR)=1FFFH,(DPTR)=2000H,(DPTR)=2001H,五、減量指令DEC,DEC A ; (A) (A)-1 DEC Rn ; (Rn) (Rn)-1 DEC direct ; (direct) (direct)-1 DEC Ri ; (Ri) (Ri)-1,操作:指定變量減1,結(jié)果送
24、回原地址單元,不影響標(biāo)志位(除P)。,設(shè)(40H)=00H 執(zhí)行 DEC 40H,結(jié)果:(40H)=FFH 不影響標(biāo)志位,六、乘法指令,MUL AB ;,(A)07 (B)815,(A)*(B),影響標(biāo)志位: 如乘積255 (0FFH) (即B0) ,OV=1 C總是被清0,即C=0 AC不變,對(duì)P有影響,例:設(shè)(A)=80H(128),(B)=32H(50),執(zhí)行指令:MUL AB,結(jié)果:乘積為1900H(6400),(A)= (B)=,00H,19H,OV= Cy= P=,1,0,0,七、除法指令,DIV AB ;,(A) (B),商 余數(shù),(A)/(B),對(duì)標(biāo)志位影響: 當(dāng)B中除數(shù)為00
25、H,除法運(yùn)算結(jié)果為不定值,則A、B中內(nèi)容均為不定值,OV置1 C=0,例: (A)=87H(135),(B)=0CH(12) DIV AB,(A)= (B)=,0BH(11),03H,OV= C=,0 0,八、二十進(jìn)制調(diào)整指令,DA A ; 調(diào)整A中內(nèi)容為BCD碼,調(diào)整方法: 根據(jù)C和AC的狀態(tài),并結(jié)合A的內(nèi)容,IF (A03)9 OR (AC)=1, THEN (A03)=(A03)+06H;,IF (A47)9 OR (C)=1 , THEN (A47)=(A47)+60H,因?yàn)橹噶钜肅和AC,所以必須跟在加法指令(ADD,ADDC)后面,根據(jù)A中的數(shù)值及PSW相應(yīng)標(biāo)志位的狀態(tài),可能的
26、操作為A加06H,60H,66H,例: (A)=0101 0110B(56) (R3)=0110 0111B(67)以上均為ASCII碼 (C)=0,執(zhí)行指令: ADDC A,R3 DA A,(A) 0 1 0 1 0 1 1 0 +(R3) 0 1 1 0 0 1 1 1,1 0 1 1 1 1 0 1,A309,AC=0 A749,C=0 +66H調(diào)整,+ 0 1 1 0 0 1 1 0,0 0 1 0 0 0 1 1,結(jié)果: (A)=23H (C)=1,對(duì)于無(wú)符號(hào)BCD碼運(yùn)算,56+67=123,使用此指令條件:,1、兩個(gè)操作數(shù)均為壓縮BCD碼 2、不適合減法和增1運(yùn)算,例:對(duì)于十進(jìn)制減
27、法運(yùn)算,可采用補(bǔ)碼相加的方法 即用9AH減去減數(shù)得到以十為模的補(bǔ)碼,設(shè)被減數(shù)存30H單元,減數(shù)存40H單元,結(jié)果存50H單元。程序如下:,CLR C ; MOV A,#9AH; SUBB A, 40H ; ADD A , 30H; DA A ; MOV 50H, A,清進(jìn)位位,求減數(shù)的十補(bǔ)碼,補(bǔ)碼相加,調(diào)整至BCD碼,第五節(jié) 邏輯運(yùn)算類指令,按操作數(shù)分為兩類:,單操作數(shù)指令 雙操作數(shù)指令,針對(duì)累加器A進(jìn)行,A與第二操作數(shù)之間進(jìn)行,操作:清零、求反、移位,與、或、異或,一、單操作數(shù)邏輯運(yùn)算類指令,1、累加器A清零指令 CLR A; (A) 0,2、累加器求反指令 CPL A; (A) (A),例
28、:設(shè)(A)=0AAH(10101010B) 執(zhí)行:CPL A,結(jié)果: (A)=01010101B(55H),3、累加器A循環(huán)左移指令 RL A;,4、累加器A連同進(jìn)位位C循環(huán)左移指令,RLC A;,例: (A)=0C5H(1100 0101B),RL A,(A)=1000 1011B=8BH,例: (A)=45H(0100 0101 B),(C)=1,RLC A ;,(A)=1000 1011B=8BH,(C)=0,5、累加器A循環(huán)右移指令,RR A ;,6、累加器A連同進(jìn)位位C循環(huán)右移指令,RRC A ;,例: (A)=0C5H(1100 0101B),(C)=1,執(zhí)行指令: RRC A,結(jié)
29、果: (A)=1110 0010B=0E2H,(C)=1,二、雙操作數(shù)邏輯運(yùn)算類指令,1、邏輯“與”指令,ANL A , Rn ANL A , direct ANL A , Ri ANL A , #data,以A為第一操作數(shù),邏輯“與”運(yùn)算的結(jié)果存入A,ANL direct,A ANL direct,#data,目的操作數(shù)為direct,源操作數(shù)為A和立即數(shù),與指令常用于屏蔽某些不用位。,方法是將該位與“0”相“與”,保留位與“1”相“與”,如 ANL A,#1111 0000B; 屏蔽低4位,高4位不變,2、邏輯“或”指令,ORL A , Rn ORL A , direct ORL A ,
30、Ri ORL A , #data ORL direct , A ORL direct , #data,ORL指令常用于使字節(jié)中某些位置1,方法:欲置1的位與“1”相或,欲保留不變的位與“0”相或,如 ORL A,#0FH; 高4位不變,低4位置1,3、邏輯“異或”指令,XRL A , Rn XRL A , direct XRL A , Ri XRL A , #data XRL direct , A XRL direct , #data,XRL 指令可用于對(duì)某些位取反,方法:欲取反的位用“1”去異或,保留位用“0”去異或,如 XRL A,#0FH;高4位不變,低4位取反,例: 設(shè)(A)=0C3H
31、(1100 0011B) (R0)=0AAH(1010 1010B),分別執(zhí)行以下指令:,ANL A,R0 ; ORL A,R0 ; XRL A,R0 ;,(A)=1000 0010B=82H,(A)=1110 1011B=0EBH,(A)=0110 1001B=69H,第六節(jié) 控制轉(zhuǎn)移類指令,3類:,無(wú)條件轉(zhuǎn)移 條件轉(zhuǎn)移 子程序調(diào)用及返回,一、無(wú)條件轉(zhuǎn)移指令,1、絕對(duì)無(wú)條件轉(zhuǎn)移,AJMP addr11;,(PC) (PC)+2 (PC 010) addr 010 (PC 1115)不變,addr11:11位地址,是轉(zhuǎn)移目的地址的低11位。 在匯編語(yǔ)言程序中,可寫成4位16進(jìn)制地址,也可寫成代
32、表16位地址的標(biāo)號(hào)(符號(hào)地址)形式。,轉(zhuǎn)移范圍:2K字節(jié),例1: 0345H:AJMP addr11 addr11取值可為000 0000 0000B111 1111 1111B,執(zhí)行時(shí) (PC)=(PC)+2=0347H,15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0,0347H:,0 0 0 0 0 0 1 1 0 1 0 0 0 1 1 1 B,轉(zhuǎn)移目標(biāo)地址范圍:PC 1115不變,0 0 0 0 0 0 0 0 0 0 0 B,1 1 1 1 1 1 1 1 1 1 1 B,有效轉(zhuǎn)移地址范圍: 0000H07FFH,例2: 07FFH: AJMP adr11
33、,(PC)+2=07FFH+2=0801H,0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1B,0 0 0 0 0 0 0 0 0 0 1B,1 1 1 1 1 1 1 1 1 1 1B,0801H,0801H,0FFFH,轉(zhuǎn)移范圍,轉(zhuǎn)移范圍:包括當(dāng)前指令的下一條指令在內(nèi)的同一2K字節(jié)內(nèi),addr11:在0801H0FFFH范圍內(nèi),例3: 0345H:AJMP 0123H 2567H:AJMP 29ABH,是否正確,正確,錯(cuò)誤,2567H:0 0 1 0 0 1 0 1 0 1 1 0 0 1 1 1 B,1 1 1 1 1 1 1 1 1 1 1 B,27FFH,轉(zhuǎn)移地址最大為
34、27FFH,29ABH大于27FFH,超出有效轉(zhuǎn)移地址范圍,2、長(zhǎng)轉(zhuǎn)移指令,LIMP addr16 ; (PC) addr16,轉(zhuǎn)移范圍: 64KB,3、相對(duì)轉(zhuǎn)移指令,SJMP rel ;,(PC) (PC)+2 (PC) (PC)+rel,rel:8位二進(jìn)制補(bǔ)碼,可寫成符號(hào)地址的形式,轉(zhuǎn)移范圍:PC當(dāng)前值為基準(zhǔn),-128+127,例: 0345H:SJMP rel,PC 當(dāng)前值:0347H,向后128字節(jié) 02C7H,向前127字節(jié) 03C6H,rel=80H,rel=7FH,當(dāng)rel取值為FEH(-2),則目的地址與源地址相同,如 設(shè)rel=FEH,執(zhí)行指令 HERE:SJMP HERE,
35、程序在此指令處無(wú)限循環(huán),4、間接轉(zhuǎn)移指令,JMP A+DPTR ; (PC) (A)+(DPTR),多分支轉(zhuǎn)移指令,DPTR內(nèi)容為多分支轉(zhuǎn)移程序的首地址,由累加器A的內(nèi)容來(lái)選擇其中的某一個(gè)分支轉(zhuǎn)移指令,例:,MOV DPTR , #JMP_TBL JMP A+DPTR . AJMP LABEL0 AJMP LABEL1 AJMP LABEL2 AJMP LABEL3,JMP_TBL:,AJMP 為兩字節(jié)指令,所以A中內(nèi)容為偶數(shù),JMPTBL為分支轉(zhuǎn)移表的起始地址,分支表的長(zhǎng)度應(yīng)不超過(guò)256字節(jié),二、條件轉(zhuǎn)移指令,均為相對(duì)尋址方式,指令提供偏移量rel,轉(zhuǎn)移范圍為PC當(dāng)前值的-128+127,1
36、、判零轉(zhuǎn)移指令,JZ rel ;,(PC) (PC)+2 如(A)=0,則(PC)=(PC)+rel 否則,程序順序執(zhí)行,JNZ rel ;,(PC) (PC)+2 如(A)=0,則(PC)=(PC)+rel 否則,程序順序執(zhí)行,例:將外部數(shù)據(jù)存儲(chǔ)器的一個(gè)數(shù)據(jù)塊傳送到內(nèi)部數(shù)據(jù)RAM,兩者的首地址分別為DATA1和DATA2,遇到傳送的數(shù)據(jù)為0時(shí)停止傳送。,分析:數(shù)據(jù)塊傳送,長(zhǎng)度較短,均采用間接尋址方式,其中R0尋址外部數(shù)據(jù)存儲(chǔ)器,R1尋址內(nèi)部RAM。,傳送時(shí),要以累加器A作為過(guò)渡,利用判零轉(zhuǎn)移可以判別是否繼續(xù)傳送還是終止,程序如下:,MOV R0,#DATA1 ; MOV R1,#DATA2
37、; MOVX A,R0 ; JZ STOP ; MOV R1,A ; INC R0 ; INC R1 ; SJMP LOOP ;,LOOP:,HERE:,外部數(shù)據(jù)塊首址,內(nèi)部數(shù)據(jù)塊首址,外部數(shù)據(jù)傳入A,為零則終止,不為零則傳送至內(nèi)部RAM單元,修改地址指針,繼續(xù)循環(huán),STOP:,2、比較轉(zhuǎn)移指令,格式: CJNE (目的操作數(shù)),(源操作數(shù)),rel,根據(jù)目的和源操作數(shù)的尋址方式不同,共有4條,CJNE A , #data , rel CJNE A , direct , rel CJNE Rn , #data , rel CJNE Ri , #data , rel,均為三字節(jié)指令,例:設(shè)(R7
38、)=56H,執(zhí)行指令,CJNE R7,#60H,K1 ,K1:,例2、設(shè)P1口P10P13為準(zhǔn)備就緒信號(hào)輸入端,當(dāng)該4位輸入全“1”說(shuō)明各項(xiàng)工作準(zhǔn)備好,單片機(jī)可順序執(zhí)行主程序,否則循環(huán)等待。,程序片段如下:,L0:,MOV A , P1 ; ANL A , #0FH ; CJNE A , #0FH , L0 ; ,MAN1:,讀P1口內(nèi)容,高4位無(wú)意義,屏蔽,低4位不全為1,返回L0,否則繼續(xù)執(zhí)行,3、循環(huán)轉(zhuǎn)移指令(減1條件轉(zhuǎn)移指令),DJNZ Rn,rel ;,(PC) (PC)+2 (Rn) (Rn)-1 If(Rn)=0,(PC) (PC)+rel Else,程序向下執(zhí)行,DJNZ di
39、rect,rel;,(PC) (PC)+3 (direct) (direct)-1 If (direct)=0, (PC) (PC)+rel Else, 程序向下執(zhí)行,若循環(huán)變量為00H,則循環(huán)次數(shù)為256次,例1: (40H)=01H,(50H)=70H (60H)=15H,以下程序片段的執(zhí)行結(jié)果,DJNZ 40H,LABEL1; DJNZ 50H,LABEL2; DJNZ 60H,LABEL3;,結(jié)束循環(huán)向下執(zhí)行,轉(zhuǎn)向LABEL2執(zhí)行,繼續(xù)循環(huán),需等上條指令執(zhí)行完,才執(zhí)行本指令,各單元內(nèi)容變?yōu)椋?(40H)=00H,(50H)=6FH,(60H)=15H,例2:,MOV R2,#8 ; C
40、PL P17 ; DJNZ R2,TOGGLF;,TOGGLF:,循環(huán)次數(shù)送R2,P17取反,1個(gè)機(jī)周,R2控制循環(huán),2個(gè)機(jī)周期,執(zhí)行結(jié)果:,三、子程序調(diào)用及返回指令,1、長(zhǎng)調(diào)用指令,LCALL addr16 ;,(PC)=(PC)+3 (SP)=(SP)+1 (SP)=(PC 07) (SP)=(SP)+1 (SP)=(PC 815) (PC)=addr 015,64KB范圍內(nèi)子程序調(diào)用,例:設(shè)(SP)=53H,子程序首址在3000H單元,并以標(biāo)號(hào)STR表示。即 2000H: LCALL STR,執(zhí)行時(shí): (PC)=(PC)+3=2003H,(SP)+1, (54H)=03H,(SP)+1,
41、(55H)=20H,執(zhí)行結(jié)果:,(SP)= (54H)= (55H)= (PC)=,55H,03H,20H,3000H,STR (PC),2、絕對(duì)調(diào)用指令,ACALL addr11 ;,(PC)=(PC)+2 (SP)=(SP)+1 (SP)=(PC 07) (SP)=(SP)+1 (SP)=(PC 815) (PC 010) addr11 (PC 1115)不變,提供2KB范圍內(nèi)的子程序調(diào)用,調(diào)用范圍同AJMP指令,3、返回指令,RET ;,(PC 815) (SP) (SP) (SP)-1 (PC 07) (SP) (SP) (SP)-1,例:設(shè)(SP)=6BH,內(nèi)部RAM(6AH)=23
42、H (6BH)=01H,執(zhí)行 RET,(PC 815) (6BH),(PC 07) (6AH),執(zhí)行結(jié)果: (PC)=0123H,(SP)=69H,4、中斷返回指令,RETI ;,功能:,A)恢復(fù)斷點(diǎn),同RET B)恢復(fù)中斷邏輯,使CPU能接收同級(jí)或低級(jí)中斷請(qǐng)求,5、空操作指令,NOP ; (PC) (PC)+1,功能:無(wú)任何操作,繼續(xù)執(zhí)行下一條指令,不影響任何標(biāo)志,產(chǎn)生一個(gè)機(jī)器周期的延時(shí),例: 利用NOP指令產(chǎn)生方波,CLR P2.7 ; NOP NOP NOP SETB P2.7 ;,P2.7清0輸出,置位P2.7高電平輸出,第七節(jié) 位操作指令,位處理器:,CPU 程序存儲(chǔ)器 數(shù)據(jù)存儲(chǔ)器
43、累加器(C) I/O口,數(shù)據(jù)RAM可位尋址空間128位 SFR的可尋址位82位,位地址表示:bit 在匯編語(yǔ)言中有5種表示方法: (以用戶標(biāo)志F0為例),1、位地址 D5H 2、字節(jié)地址位 D0H5 3、位寄存器名稱 F0 4、寄存器名位 PSW5 5、事先用偽指令定義的符號(hào)地址 格式: 字符名稱 BIT 位地址 A1 BIT F0,一、位傳送指令,MOV C , bit ; ( C ) (bit) MOV bit , C ; (bit) ( C ),注:位傳送必須通過(guò)累加器C進(jìn)行,例:將30H位的內(nèi)容傳送到20H位,MOV C,30H MOV 20H,C,二、位狀態(tài)控制指令,1、位清零指令
44、CLR bit ; (bit) 0 CLR C ; (C) 0,2、位求反指令 CPL bit ; (bit) (bit) CPL C ; (C) (C),3、位置位指令 SETB bit ; (bit) 1 SETB C ; (C) 1,例: 設(shè)(P1)=00110101 B 執(zhí)行以下指令: CLR P1.0 ; CPL P1.0 ; SETB P1.6 ;,P1=00110100 B,P1=00110101B,P1=01110101 B,三、位邏輯操作指令,1、位邏輯“與” ANL C,bit ; (C) (C)與(bit) ANL C,/bit ; (C) (C)與(bit),2、位邏輯
45、“或” ORL C,bit ; (C) ()或(bit) ORL C,/bit ; (C) (C)或(bit),例:設(shè)E,B,D都代表位地址,試編寫程序完成E、B內(nèi)容的異或操作。即D=EB+EB,程序如下: MOV C,B ANL C,/E MOV F0,C MOV C,E ANL C,/B ORL C,F(xiàn)0 MOV D,C,;C=EB,;暫存 EB,;C=EB,;C=EB+EB,;將運(yùn)算結(jié)果存入D,四、位控制轉(zhuǎn)移指令,1、判C轉(zhuǎn)移 JC rel ; C=1 轉(zhuǎn)移 JNC rel ; C=0 轉(zhuǎn)移,例: 設(shè)(C)=0,以下程序段的執(zhí)行路徑是什么,JC L1 CPL C JC L2 L1: L2
46、:,;C=0,不轉(zhuǎn)移,順序執(zhí)行,;C取反,C=1,;C=1,轉(zhuǎn)向L2執(zhí)行,2、判位變量轉(zhuǎn)移指令,JB bit ,rel ; (bit)=1 轉(zhuǎn)移 JNB bit,rel ; (bit)=0轉(zhuǎn)移,判位變量并清0轉(zhuǎn)移指令 JBC bit,rel ;,(PC) (PC)+3 IF(bit)=1, Then(PC) (PC)+rel And (bit)=0,例1:MOV P1,#0CAH MOV A,#56H JB P1.2 , L1 JNB ACC.3 , L2 L1: L2: ,; P1=1100 1010 B,; A=0101 0110 B,; P1.2=0,不轉(zhuǎn),; ACC.3=0,轉(zhuǎn)L2執(zhí)行,例2: MOV A , #43H JBC ACC.2 , L1 JBC ACC.6 , L2 L1 : L2 : ,; A=43H= 01
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- Unit 2 More than fun:Understanding ideas (Grammar) 教學(xué)設(shè)計(jì) 2024-2025學(xué)年外研版(2024年)英語(yǔ)七年級(jí) 上冊(cè)
- 2025年度勞動(dòng)合同解除終止證明書模板設(shè)計(jì)與員工離職后續(xù)支持合同
- 2025年度拖欠工資問(wèn)題解決與勞動(dòng)權(quán)益保障合同
- 2025年度家居裝修安全責(zé)任協(xié)議書
- 2025年度房產(chǎn)證辦理完畢后購(gòu)房合同保管期限與責(zé)任合同
- 2025年度抵押車買賣合同車輛交易稅費(fèi)繳納及返還協(xié)議
- 2025年度餐飲公司合伙人合作協(xié)議及知識(shí)產(chǎn)權(quán)保護(hù)合同
- 2025年度臨時(shí)炊事員餐飲服務(wù)與管理合作協(xié)議
- 2025年度個(gè)人水泥品牌授權(quán)與推廣合作協(xié)議
- 2025年度體育場(chǎng)地租賃及健身課程開(kāi)發(fā)合同
- 2024年山東司法警官職業(yè)學(xué)院高職單招(英語(yǔ)/數(shù)學(xué)/語(yǔ)文)筆試歷年參考題庫(kù)含答案解析
- 物業(yè)客服課件培訓(xùn)模板
- 人教版PEP四年級(jí)英語(yǔ)下冊(cè)全冊(cè)教學(xué)設(shè)計(jì)表格教案
- 制造業(yè)面臨的挑戰(zhàn)與發(fā)展對(duì)策
- 高速公路綠化工程施工
- 發(fā)展?jié)h語(yǔ)-初級(jí)讀寫-第一課-你好
- 化工公司原址污染場(chǎng)地污染土壤治理修復(fù)方案
- 法蘭標(biāo)準(zhǔn)尺寸表(美標(biāo)、日標(biāo)、德標(biāo))
- 施工技術(shù)管理項(xiàng)總體思路、方式和方法解析
- 《大學(xué)生安全教育》課件-第一課 國(guó)家安全
- 城市規(guī)劃與建筑學(xué)專業(yè)英語(yǔ)
評(píng)論
0/150
提交評(píng)論