物理單片機(jī)3第三章尋址方式課件_第1頁
物理單片機(jī)3第三章尋址方式課件_第2頁
物理單片機(jī)3第三章尋址方式課件_第3頁
物理單片機(jī)3第三章尋址方式課件_第4頁
物理單片機(jī)3第三章尋址方式課件_第5頁
已閱讀5頁,還剩247頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1

單片機(jī)原理及應(yīng)用北京化工大學(xué)信息科學(xué)與技術(shù)學(xué)院郭青1單片機(jī)原理及應(yīng)用北京化工大學(xué)第三章80C51指令系統(tǒng)本章重點(diǎn)尋址方式指令格式操作結(jié)果及對標(biāo)志位影響第三章80C51指令系統(tǒng)本章重點(diǎn)3.1概述分類數(shù)據(jù)傳送類指令29數(shù)學(xué)運(yùn)算類指令24邏輯運(yùn)算類指令24控制轉(zhuǎn)移類指令17位操作指令17111條指令3.1概述分類數(shù)據(jù)傳送類指令29數(shù)學(xué)運(yùn)算類指按指令長度分類單字節(jié)指令雙字節(jié)指令三字節(jié)指令指令執(zhí)行時間12個振蕩周期6424個振蕩周期4548個振蕩周期2按指令長度分類單字節(jié)指令雙字節(jié)指令三字節(jié)指令指令執(zhí)行時間12指令格式標(biāo)號:操作碼[(目的操作數(shù)),(源操作數(shù))];注釋指令的符號地址由字母打頭的字母數(shù)字串組成,長度一般不超過6個符號指令操作的性質(zhì)用規(guī)定的匯編語言助記符表示指令操作的對象指令格式標(biāo)號:操作碼[(目的操作數(shù)),(源操作數(shù))]3.2尋址方式和尋址空間概念:說明操作數(shù)所在的位置(地址),把操作數(shù)提取出來的方法基本尋址方式:1、寄存器尋址 2、直接尋址3、寄存器間接尋址 4、立即尋址5、相對尋址 6、變址尋址7、位尋址3.2尋址方式和尋址空間概念:基本尋址方式:1、寄存器一、寄存器尋址操作數(shù)—通用寄存器的內(nèi)容表示符號—寄存器名稱尋址范圍工作寄存器Rn(R0~R7)寄存器ACC(累加器A)寄存器B,DPTR,位寄存器Cy一、寄存器尋址操作數(shù)—通用寄存器的內(nèi)容尋址范圍工作寄存器880C52片內(nèi)數(shù)據(jù)RAM位尋址區(qū)R7~R0

3組R7~R0

2組R7~R0

1組R7~R0

0組20H18H10H08H00H寄存器30H7FH80HFFH特殊功能寄存器(SFR)RAM64KBFFFFH0000H片內(nèi)數(shù)據(jù)存儲器片外數(shù)據(jù)存儲器ACCDPTRB880C52片內(nèi)數(shù)據(jù)RAM位尋址區(qū)R7~R03組R7~二、直接尋址操作數(shù)—指令中直接地址的內(nèi)容尋址范圍:1、內(nèi)部數(shù)據(jù)RAM的低128個字節(jié)單元2、特殊功能寄存器3、位地址空間通用符號:direct二、直接尋址操作數(shù)—指令中直接地址的內(nèi)容尋址范圍:1、內(nèi)1080C52片內(nèi)數(shù)據(jù)RAM

位尋址區(qū)R7~R0

3組R7~R0

2組R7~R0

1組R7~R0

0組20H18H10H08H00H寄存器30H7FH80HFFH特殊功能寄存器(SFR)RAM64KBFFFFH0000H片內(nèi)數(shù)據(jù)存儲器片外數(shù)據(jù)存儲器1080C52片內(nèi)數(shù)據(jù)RAM位尋址區(qū)R7~R03組R7三、寄存器間接尋址方式指令指定的寄存器內(nèi)容為操作數(shù)地址間址寄存器—R0,R1,DPTR,SP尋址范圍1、內(nèi)部RAM的低128字節(jié)(00H~7FH)

@R0,@R1(@Ri,i=0,1)2、外部RAM的64KB(0000H~FFFFH)

@DPTR,@R0,@R1符號

@寄存器名3、堆棧區(qū)SP為間址寄存器三、寄存器間接尋址方式指令指定的寄存器內(nèi)容為操作數(shù)地址間址寄1280C52片內(nèi)數(shù)據(jù)RAM位尋址區(qū)R7~R0

3組R7~R0

2組R7~R0

1組R7~R0

0組20H18H10H08H00H寄存器30H7FH80HFFH特殊功能寄存器(SFR)RAM64KBFFFFH0000H片內(nèi)數(shù)據(jù)存儲器片外數(shù)據(jù)存儲器1280C52片內(nèi)數(shù)據(jù)RAM位尋址區(qū)R7~R03組R7四、立即尋址方式指令直接給出操作數(shù),操作數(shù)為8位或16位二進(jìn)制數(shù),稱立即數(shù)尋址范圍程序存儲器中的立即數(shù)通用符號:#data(8位),#data16(16位)四、立即尋址方式指令直接給出操作數(shù),操作數(shù)為8位或16位二進(jìn)五、相對尋址方式以PC當(dāng)前值為基址,加上指令中給出的偏移量(rel)形成有效的程序轉(zhuǎn)移地址。控制轉(zhuǎn)移類指令轉(zhuǎn)移范圍:以PC當(dāng)前值為起始地址,相對偏移在+127~-128個字節(jié)單元之間。偏移量rel

八位二進(jìn)制補(bǔ)碼五、相對尋址方式以PC當(dāng)前值為基址,加上指令中給出的偏移量(1005H:JC80H執(zhí)行過程:讀指令,完成后(PC)=(PC)+2如C=1,則(PC)=(PC)+rel

轉(zhuǎn)移至1007H-80H=0F87H單元如C=0則執(zhí)行1007H單元中的指令后向128個單元前向127個單元1005H40H1006H80H1007H0F87H1086H1005H:JC80H執(zhí)行過程:讀指令,完成后(六、變址間接尋址基址寄存器內(nèi)容加上間址寄存器內(nèi)容(地址偏移量)為有效地址基址寄存器:PC,DPTR變址寄存器:A尋址范圍:程序存儲器例:MOVCA,@A+DPTR

設(shè)A=11HDPTR=02F1H操作數(shù)地址為02F1H+11H=0302H操作:(0302H)A六、變址間接尋址基址寄存器內(nèi)容加上間址寄存器內(nèi)容(地址偏移量七、位尋址MCS-51設(shè)有獨(dú)立的位處理器,位地址一般用直接位地址方式給出,可歸入直接尋址方式尋址范圍:位尋址內(nèi)部RAM128位可位尋址的SFR82位位地址的表示方式:1、直接地址(位地址)2、位名稱3、第幾單元第幾位,寄存器名+位4、用偽指令指定的符號地址通用符號bit七、位尋址MCS-51設(shè)有獨(dú)立的位處理器,位地址一般用直接位例:PSW中F0(用戶標(biāo)志)可表示如下:D5HF0PSW.5AF(AFEQUF0)例:PSW中F0(用戶標(biāo)志)可表示如下:D5H193.3指令系統(tǒng)193.3指令系統(tǒng)3.3.1數(shù)據(jù)傳送類指令按操作方式,分為三種:數(shù)據(jù)傳送數(shù)據(jù)交換棧操作3.3.1數(shù)據(jù)傳送類指令按操作方式,分為三種:數(shù)據(jù)傳一、普通傳送類指令格式:MOV(目的操作數(shù)),(源操作數(shù))操作碼助記符操作:將源操作數(shù)單元內(nèi)容,傳送到目的操作數(shù)單元中,源操作數(shù)內(nèi)容不變。不影響標(biāo)志位Cy,AC和OV。一、普通傳送類指令格式:MOV(目的操作數(shù)),(源操作數(shù)操作數(shù)的組合關(guān)系操作數(shù)的組合關(guān)系1、立即數(shù)的傳送MOVA,#data(A)#dataMOVRn,#data(Rn)#dataMOV@Ri,#data((Ri))#dataMOVdirect,#data(direct)#dataMOVDPTR,#data16(DPTR)#data1、立即數(shù)的傳送MOVA,#data(A)#dataM說明:a、MOVA,#data將8位立即數(shù)送入累加器A中例:MOVA,#80H操作結(jié)果:(A)=80Hb、MOVRn,#datan=0~7將8位立即數(shù)送入工作寄存器Rn中例:MOVR4,#80H操作結(jié)果:(R4)=80H說明:a、MOVA,#data將8位立即數(shù)送入累加器A中c、MOV@Ri,#data將8位立即數(shù)送入由Ri指定的地址單元中,i=0,1。Ri中的地址為00H~7FH(8051)00H~FFH(8052)注:僅尋址內(nèi)部RAM,不能尋址SFR例:MOV@R0,#32H

設(shè)(R0)=70H,(70H)=11H執(zhí)行結(jié)果:(70H)=32Hc、MOV@Ri,#data將8位立即數(shù)送入由Ri指定d:MOVdirect,#data將8位立即數(shù)送入由direct直接尋址的地址單元中。direct:00H~FFH,8位二進(jìn)制地址碼尋址內(nèi)部RAM(00H~7FH)及SFR例:MOV70H,#70H

MOVP0,#70H

MOV80H,#70Hd:MOVdirect,#data將8位立即數(shù)送入由die:MOVDPTR,#data唯一的16位數(shù)據(jù)傳送指令,把16位立即數(shù)送入DPTR中例:MOVDPTR,#2034H執(zhí)行結(jié)果:(DPH)=20H

(DPL)=34He:MOVDPTR,#data唯一的16位數(shù)據(jù)傳送指令,2、內(nèi)部數(shù)據(jù)存儲器與累加器A傳送數(shù)據(jù)MOVA,direct(A)(direct)MOVdirect,A(A)(direct)MOVA,Rn(A)(Rn)MOVRn,A(A)(Rn)MOVA,@Ri(A)((Ri))MOV@Ri,A((Ri))(A)2、內(nèi)部數(shù)據(jù)存儲器與累加器A傳送數(shù)據(jù)MOVA,dire尋址方式的組合尋址方式的組合例:MOVR1,#82HMOVA,@R180C51指令錯誤因為82H是DPL的地址值,對于SFR,不能使用間接尋址方式正確指令:MOVA,DPL

或MOVA,82H80C52正確,尋址內(nèi)部RAM例:MOVR1,#82H80C51指令錯誤正確指令:MO3、內(nèi)部數(shù)據(jù)存儲器中Rn、SFR和片內(nèi)數(shù)據(jù)RAM之間的數(shù)據(jù)傳送MOVdirect,direct(direct目的)(direct源)MOVdirect,Rn(direct)(Rn)MOVRn,direct(direct)(Rn)MOVdirect,@Ri(direct)((Ri))MOV@Ri,direct((Ri))(direct)3、內(nèi)部數(shù)據(jù)存儲器中Rn、SFR和片內(nèi)數(shù)據(jù)RAM之間的數(shù)據(jù)傳[物理]單片機(jī)3第三章尋址方式課件例1:設(shè)PSW中標(biāo)志位RS1,RS0為“11”,則選中第三組工作寄存器MOV40H,R0MOV40H,18H結(jié)果相同例1:設(shè)PSW中標(biāo)志位RS1,RS0為“11”,則選中第三組用立即尋址指令為片內(nèi)RAM中20H,25H和P1口上置數(shù)例2:MOV20H,#25HMOV25H,#10HMOVP1,#0CAH執(zhí)行結(jié)果

(20H)=25H,(25H)=10H

(P1)=CAH用立即尋址指令為片內(nèi)RAM中20H,25H和P1口上置數(shù)例2將以上狀態(tài)作為初值,執(zhí)行以下程序,結(jié)果如何MOVR0,#20HMOVA,@R0MOVR1,AMOVB,@R1MOV@R1,P1MOVP3,P1(R0)=20H(A)=((R0))=(20H)=25H(R1)=(A)=25H(B)=((R1))=(25H)=10H((R1))=P1(25H)=CAHP3=P1=CAH將以上狀態(tài)作為初值,執(zhí)行以下程序,結(jié)果如何MOVR0,(A)=?(R1)=?(B)=?(25H)=?(P3)=?(P1)=?(20H)=?25H25H10HCAHCAHCAH25H(A)=?25H二、外部數(shù)據(jù)存儲器的數(shù)據(jù)傳送指令只能間接尋址,且只能與累加器A進(jìn)行數(shù)據(jù)傳送格式:MOVX(目的操作數(shù)),(源操作數(shù))MOVXA,@DPTR(A)((DPTR))MOVX@DPTR,A((DPTR))(A)MOVXA,@Ri(A)((Ri))MOVX@Ri,A((Ri))(A)二、外部數(shù)據(jù)存儲器的數(shù)據(jù)傳送指令只能間接尋址,且只能與累加器例:若片外數(shù)據(jù)存儲單元中,(3007H)=60HMOVDPTR,#3007HMOVXA,@DPTR結(jié)果:(A)=60H使用Ri作間址寄存器,此時需用P2口輸出高八位地址,應(yīng)事先預(yù)置P2,Ri的值以下程序功能與上例相同:MOVP2,#30HMOVR0,#07HMOVXA,@R0例:若片外數(shù)據(jù)存儲單元中,(3007H)=60HMOVD三、程序存儲器向累加器A傳送指令—MOVCMOVCA,@A+PC(PC)(PC)+1(A)((A)+(PC)MOVCA,@A+DPTR(A)((A)+(DPTR))功能:把A中內(nèi)容與基址寄存器(PC,DPTR)內(nèi)容相加,求得程序存儲器某單元地址,再將該地址單元內(nèi)容送累加器A8位無符號整數(shù)三、程序存儲器向累加器A傳送指令—MOVCMOVCA,說明:1、以PC作為基址寄存器,因為PC值不能任意更改,所以查表范圍為PC當(dāng)前值開始后的256字節(jié)。偏移量計算式:DIS=表首地址-(該指令所在地址+1)2、以DPTR作為基址寄存器,因為DPTR的內(nèi)容可以通過賦值改變,使表格可以設(shè)置在64KB程序存儲器的任意地址空間。說明:1、以PC作為基址寄存器,因為PC值不能任意更改,所以例1:編制根據(jù)累加器A中的數(shù)(0~9)查其平方表的子程序。COUNT:PUSHDPH;保護(hù)DPTR內(nèi)容

PUSHDPL;

MOVDPTR,#TABLE

;賦表首地址給DPTRMOVCA,@A+DPTR;根據(jù)A中內(nèi)容查表

POPDPL;恢復(fù)DPTR內(nèi)容

POPDPHRET;返回主程序例1:編制根據(jù)累加器A中的數(shù)(0~9)查其平方表的子程序。CORG1000HTABLE:DB00DB01DB04DB09DB16DB25DB36DB49DB64DB81DB:偽指令,作用是把其后的值存入由標(biāo)號開始的連續(xù)單元中ORG1000HDB:偽指令,作用是把其后的值例2:編子程序根據(jù)A中二進(jìn)制數(shù)查其ASCII碼BITOASC:ADDA,#02HMOVCA,@A+PCSJMPBARETDB30H,31H,32H,33HDB34H,35H,36H,37HDB38H,39H,41H,42HDB43H,44H,45H,46HRETTABLE:BARET:;加偏移量調(diào)整;查表;返回主程序例2:編子程序根據(jù)A中二進(jìn)制數(shù)查其ASCII碼BITOASC四、數(shù)據(jù)交換指令1、字節(jié)交換指令XCHA,RnXCHA,directXCHA,@Ri(A)(Rn)

(A)

(direct)(A)((Ri))例:設(shè)(R0)=20H,(A)=3FH,(20H)=75H執(zhí)行指令:XCHA,@R0執(zhí)行結(jié)果:(A)=75H,(20H)=3FH四、數(shù)據(jù)交換指令1、字節(jié)交換指令XCHA,Rn(2、半字節(jié)交換指令XCHDA,@Ri(A3~0)((Ri)3~0)例:設(shè)(R1)=30H,(A)=67H,(30H)=84H執(zhí)行指令:XCHDA,@R1執(zhí)行結(jié)果:(A)=64H(30H)=87H2、半字節(jié)交換指令XCHDA,@Ri3、累加器A高4位與低4位內(nèi)容互換指令SWAPA;(A0~3)(A0~3)例:設(shè)(A)=0CAH執(zhí)行指令:SWAPA執(zhí)行結(jié)果:(A)=0ACH3、累加器A高4位與低4位內(nèi)容互換指令SWAPA5、堆棧操作類指令PUSHdirect(SP)(SP)+1((SP))(direct)POPdirect(direct)((SP))(SP)(SP)-1要點(diǎn):入棧操作,先執(zhí)行SP+1,再入棧出棧操作,先出棧,再執(zhí)行SP-15、堆棧操作類指令PUSHdirect(SP)例:在中斷響應(yīng)時,(SP)=09H,數(shù)據(jù)指針DPTR的內(nèi)容為0123H執(zhí)行以下指令:PUSHDPLPUSHDPH(SP)+1,使(SP)=0AH(DPL)壓入0AH單元(SP)+1,(SP)=0BH(DPH)壓入0BH單元執(zhí)行結(jié)果:(0AH)=23H(0BH)=01H(SP)=0BH例:在中斷響應(yīng)時,(SP)=09H,數(shù)據(jù)指針DPTR的內(nèi)容為堆棧操作需遵循先入后出,后入先出原則,才能保持原單元內(nèi)容不變例:設(shè)(DPTR)=0123HPUSHDPHPUSHDPL…….…….POPDPLPOPDPH執(zhí)行結(jié)果:(DPTR)=0123H如執(zhí)行:PUSHDPHPUSHDPL·······POPDPHPOPDPL執(zhí)行結(jié)果:(DPTR)=2301H堆棧操作需遵循先入后出,后入先出原則,才能保持原單元內(nèi)容不變3.3.2算術(shù)運(yùn)算類指令類型:加,減,乘,除,增量、減量以及二—十進(jìn)制調(diào)整指令A(yù)DD、ADDC、SUBB指令的執(zhí)行將影響標(biāo)志位(PSW中的OV,Cy,AC及P)要求掌握指令的操作結(jié)果對標(biāo)志位的影響3.3.2算術(shù)運(yùn)算類指令類型:加,減,乘,除,增量、減一、加法指令A(yù)DD目的操作數(shù)—累加器A源操作數(shù)—

4種尋址方式ADDA,Rn(A)(A)+(Rn)ADDA,direct(A)(A)+(direct)ADDA,@Ri(A)(A)+((Ri))ADDA,#data(A)(A)+#data運(yùn)算均針對無符號二進(jìn)制數(shù)進(jìn)行,但結(jié)合OV標(biāo)志可實現(xiàn)有符號數(shù)運(yùn)算。結(jié)果將影響OV,Cy,AC,P標(biāo)志A源+A一、加法指令A(yù)DD目的操作數(shù)—累加器AADDA,R當(dāng)最高位有進(jìn)位,Cy=1位3向位4有進(jìn)位,AC=1OV取決于6、7兩位的進(jìn)位情況,同時有進(jìn)位或無進(jìn)位,則OV=0;只有一位有進(jìn)位,OV=1A中有偶數(shù)個1,P=0;否則,P=1當(dāng)最高位有進(jìn)位,Cy=1例:設(shè)(A)=0C3H,(R0)=0AAH

執(zhí)行指令:ADDA,R0

寫出執(zhí)行結(jié)果及對標(biāo)志位影響(A)11000011+(R0)10101010

01101101C=1AC=0OV=1P=1(A)=6DH只對有符號數(shù)運(yùn)算有意義。兩負(fù)數(shù)相加,結(jié)果為正數(shù),溢出例:設(shè)(A)=0C3H,(R0)=0AAH(A例:設(shè)(A)=0C3H,(R0)=0AAH

執(zhí)行指令:ADDA,R0

寫出執(zhí)行結(jié)果及對標(biāo)志位影響(A)11000011+(R0)10101010

01101101C=1AC=0OV=1P=1(A)=6DH無符號數(shù)195+170=365有符號數(shù)-61+(-86)=-147109溢出

例:設(shè)(A)=0C3H,(R0)=0AAH(A二、帶進(jìn)位加法指令A(yù)DDCADDCA,Rn;(A)(A)+(C)+(Rn)ADDCA,direct;(A)(A)+(C)+(direct)ADDCA,@Ri;(A)(A)+(C)+((Ri))ADDCA,#data;(A)(A)+(C)+(#data)常用于多字節(jié)加法二、帶進(jìn)位加法指令A(yù)DDCADDCA,Rn;例:設(shè)(A)=0C3H,(R0)=0AAH,C=1

執(zhí)行指令:ADDCA,R0(A)11000011+(C)0000000111000100+(R0)10101010

01101110C=1AC=0OV=1P=1(A)=6EH例:設(shè)(A)=0C3H,(R0)=0AAH,C=1(A三、帶借位減法指令SUBBSUBBA,Rn;(A)(A)-(C)-(Rn)SUBBA,direct;(A)(A)-(C)-(direct)SUBBA,@Ri;(A)(A)-(C)-((Ri))SUBBA,#data;(A)(A)-(C)-#data影響標(biāo)志位:最高位有借位,Cy=1位3向位4有借位,AC=1最高兩位同時有借位或無借位,OV=0;只有一位有借位,OV=1三、帶借位減法指令SUBBSUBBA,Rn;例:設(shè)(A)=0C9H,(30H)=54H,C=1

執(zhí)行:SUBBA,30H(A)11001001-(C)0000000111001000-(30H)01010100

01110100C=0AC=0OV=1P=0(A)=74H只有在符號數(shù)相減時,OV才意味著溢出與否,如出現(xiàn)以下兩種情況,OV置1:負(fù)-正=正正-負(fù)=負(fù)例:設(shè)(A)=0C9H,(30H)=54H,C=1(A)四、增量指令I(lǐng)NCINCA;(A)(A)+1INCRn;(Rn)(Rn)+1INCdirect;(direct)(direct)+1INC@Ri;((Ri))((Ri))+1INCDPTR;(DPTR)(DPTR)+1操作:指定變量加1,結(jié)果仍存于原地址單元中。除P外,不影響任何標(biāo)志位。四、增量指令I(lǐng)NCINCA;例:設(shè)(R0)=7EH,(7EH)=0FFH

(7FH)=40H執(zhí)行下列指令:INC@R0;INCR0;INC@R0;((R0))=((R0))+1,(7EH)=00H((R0))=((R0))+1,(7FH)=41H(R0)=(R0)+1,(R0)=7FH運(yùn)行結(jié)果:(R0)=7FH,(7EH)=00H(7FH)=41H例:設(shè)(R0)=7EH,(7EH)=0FFH執(zhí)行下列指令:I例:執(zhí)行指令序列MOVDPTR,#1FFEH;INCDPTR;INCDPTR;INCDPTR;(DPTR)=1FFEH(DPTR)=1FFFH(DPTR)=2000H(DPTR)=2001H例:執(zhí)行指令序列MOVDPTR,#1FFEH;(DPTR五、減量指令DECDECA;(A)(A)-1DECRn;(Rn)(Rn)-1DECdirect;(direct)(direct)-1DEC@Ri;((Ri))((Ri))-1操作:指定變量減1,結(jié)果送回原地址單元,不影響標(biāo)志位(除P)。設(shè)(40H)=00H

執(zhí)行DEC40H結(jié)果:(40H)=FFH不影響標(biāo)志位五、減量指令DECDECA;六、乘法指令MULAB;(A)0~7(B)8~15(A)*(B)影響標(biāo)志位:如乘積>255(0FFH)(即B>0),OV=1C總是被清0,即C=0AC不變,對P有影響六、乘法指令MULAB;(A)0~7(A)*(B)影例:設(shè)(A)=80H(128),(B)=32H(50)執(zhí)行指令:MULAB結(jié)果:乘積為1900H(6400)(A)=(B)=00H19HOV=Cy=P=100例:設(shè)(A)=80H(128),(B)=32H(50)執(zhí)行指七、除法指令DIVAB;(A)(B)商余數(shù)(A)/(B)對標(biāo)志位影響:當(dāng)B中除數(shù)為00H,除法運(yùn)算結(jié)果為不定值,則A、B中內(nèi)容均為不定值,OV置1C=0例:(A)=87H(135),(B)=0CH(12)

DIVAB(A)=(B)=0BH(11)03HOV=C=00七、除法指令DIVAB;(A)商(A)/(B)對標(biāo)八、二—十進(jìn)制調(diào)整指令DAA;調(diào)整A中內(nèi)容為BCD碼調(diào)整方法:根據(jù)C和AC的狀態(tài),并結(jié)合A的內(nèi)容IF[(A0~3)>9]OR[(AC)=1],THEN(A0~3)=(A0~3)+06H;IF[(A4~7)>9]OR[(C)=1],THEN(A4~7)=(A4~7)+60H因為指令要利用C和AC,所以必須跟在加法指令(ADD,ADDC)后面八、二—十進(jìn)制調(diào)整指令DAA;調(diào)整A中內(nèi)容為B根據(jù)A中的數(shù)值及PSW相應(yīng)標(biāo)志位的狀態(tài),可能的操作為A加06H,60H,66H例:(A)=01010110B(56)(R3)=01100111B(67)以上均為BCD碼(C)=0執(zhí)行指令:ADDCA,R3DAA根據(jù)A中的數(shù)值及PSW相應(yīng)標(biāo)志位的狀態(tài),可能的操作為A加06(A)01010110+(R3)0110011110111101A3~0>9,AC=0A7~4>9,C=0+66H調(diào)整+0110011000100011結(jié)果:(A)=23H

(C)=1對于無符號BCD碼運(yùn)算,56+67=123使用此指令條件:1、兩個操作數(shù)均為壓縮BCD碼2、不適合減法和增1運(yùn)算(A)0101011010例:對于十進(jìn)制減法運(yùn)算,可采用補(bǔ)碼相加的方法即用9AH減去減數(shù)得到以十為模的補(bǔ)碼設(shè)被減數(shù)存30H單元,減數(shù)存40H單元,結(jié)果存50H單元。程序如下:CLRC;MOVA,#9AH;SUBBA,40H;ADDA,30H;DAA;MOV50H,A清進(jìn)位位求減數(shù)的十補(bǔ)碼補(bǔ)碼相加調(diào)整至BCD碼例:對于十進(jìn)制減法運(yùn)算,可采用補(bǔ)碼相加的方法設(shè)被減數(shù)存30H3.3.3邏輯運(yùn)算類指令按操作數(shù)分為兩類:單操作數(shù)指令雙操作數(shù)指令針對累加器A進(jìn)行A與第二操作數(shù)之間進(jìn)行操作:清零、求反、移位,與、或、異或3.3.3邏輯運(yùn)算類指令按操作數(shù)分為兩類:單一、單操作數(shù)邏輯運(yùn)算類指令1、累加器A清零指令

CLRA;(A)02、累加器求反指令

CPLA;(A)(A)例:設(shè)(A)=0AAH(10101010B)執(zhí)行:CPLA結(jié)果:(A)=01010101B(55H)一、單操作數(shù)邏輯運(yùn)算類指令1、累加器A清零指令2、累加器求反3、累加器A循環(huán)左移指令

RLA;例:(A)=0C5H(11000101B)RLA(A)=10001011B=8BH3、累加器A循環(huán)左移指令例:(A)=0C5H(11000734、累加器A連同進(jìn)位位C循環(huán)左移指令RLCA;例:(A)=45H(01000101B),(C)=1RLCA;(A)=10001011B=8BH(C)=0734、累加器A連同進(jìn)位位C循環(huán)左移指令RLCA5、累加器A循環(huán)右移指令RRA

;6、累加器A連同進(jìn)位位C循環(huán)右移指令RRCA

;例:(A)=0C5H(11000101B),(C)=1執(zhí)行指令:RRCA結(jié)果:(A)=11100010B=0E2H(C)=15、累加器A循環(huán)右移指令RRA;6、累加器A連同二、雙操作數(shù)邏輯運(yùn)算類指令1、邏輯“與”指令A(yù)NLA,Rn

ANLA,directANLA,@RiANLA,#data

以A為第一操作數(shù),邏輯“與”運(yùn)算的結(jié)果存入AANLdirect,AANLdirect,#data目的操作數(shù)為direct,源操作數(shù)為A和立即數(shù)二、雙操作數(shù)邏輯運(yùn)算類指令1、邏輯“與”指令A(yù)NL與指令常用于屏蔽某些不用位。方法:欲屏蔽位該位與“0”相“與”,保留位與“1”相“與”例ANLA,#11110000B;屏蔽低4位,高4位不變與指令常用于屏蔽某些不用位。方法:欲屏蔽位該位與“0”相“與2、邏輯“或”指令ORLA,RnORLA,directORLA,@RiORLA,#dataORLdirect,AORLdirect,#dataORL指令常用于使字節(jié)中某些位置1方法:欲置1的位與“1”相或,欲保留不變的位與“0”相或如ORLA,#0FH;高4位不變,低4位置12、邏輯“或”指令ORLA,RnORL指令常用于使3、邏輯“異或”指令XRLA,RnXRLA,directXRLA,@RiXRLA,#dataXRLdirect,AXRLdirect,#dataXRL指令可用于對某些位取反方法:欲取反的位用“1”去異或,保留位用“0”去異或如XRLA,#0FH;高4位不變,低4位取反3、邏輯“異或”指令XRLA,RnXRL指令可用于例:設(shè)(A)=0C3H(11000011B)(R0)=0AAH(10101010B)分別執(zhí)行以下指令:ANLA,R0;ORLA,R0;XRLA,R0;(A)=10000010B=82H(A)=11101011B=0EBH(A)=01101001B=69H例:設(shè)(A)=0C3H(11000011B)分別執(zhí)行以下3.3.4控制轉(zhuǎn)移類指令3類:無條件轉(zhuǎn)移條件轉(zhuǎn)移子程序調(diào)用及返回3.3.4控制轉(zhuǎn)移類指令3類:無條件轉(zhuǎn)移一、無條件轉(zhuǎn)移指令1、絕對無條件轉(zhuǎn)移AJMPaddr11;(PC)(PC)+2(PC0~10)addr0~10(PC11~15)不變addr11:11位地址,是轉(zhuǎn)移目的地址的低11位。在匯編語言程序中,可寫成4位16進(jìn)制地址,也可寫成代表16位地址的標(biāo)號(符號地址)形式。轉(zhuǎn)移范圍:2K字節(jié)一、無條件轉(zhuǎn)移指令1、絕對無條件轉(zhuǎn)移AJMPaddr1例1:0345H:AJMPaddr11addr11取值可為00000000000B~11111111111B執(zhí)行時(PC)=(PC)+2=0347H15141312111098765432100347H:0000001101000111B轉(zhuǎn)移目標(biāo)地址范圍:PC11~15不變00000000000B11111111111B有效轉(zhuǎn)移地址范圍:

0000H~07FFH例1:0345H:AJMPaddr11執(zhí)例2:07FFH:AJMPadr11(PC)+2=07FFH+2=0801H0000100000000001B00000000001B11111111111B0801H0801H0FFFH轉(zhuǎn)移范圍轉(zhuǎn)移范圍:包括當(dāng)前指令的下一條指令在內(nèi)的同一2K字節(jié)內(nèi)addr11:在0801H~0FFFH范圍內(nèi)例2:07FFH:AJMPadr11(PC)+2=0例3:0345H:AJMP0123H2567H:AJMP29ABH是否正確正確錯誤2567H:0010010101100111B11111111111B27FFH轉(zhuǎn)移地址最大為27FFH,29ABH大于27FFH,超出有效轉(zhuǎn)移地址范圍例3:0345H:AJMP0123H是否正確正確錯誤22、長轉(zhuǎn)移指令LIMP

addr16;(PC)addr16轉(zhuǎn)移范圍:64KB3、相對轉(zhuǎn)移指令SJMPrel

;(PC)(PC)+2(PC)(PC)+relrel:8位二進(jìn)制補(bǔ)碼,可寫成符號地址的形式轉(zhuǎn)移范圍:PC當(dāng)前值為基準(zhǔn),-128~+1272、長轉(zhuǎn)移指令LIMPaddr16;(PC)例:0345H:SJMPrelPC當(dāng)前值:0347H向后128字節(jié)02C7H向前127字節(jié)03C6Hrel=80Hrel=7FH當(dāng)rel取值為FEH(-2),則目的地址與源地址相同如設(shè)rel=FEH,執(zhí)行指令

HERE:SJMPHERE程序在此指令處無限循環(huán)例:0345H:SJMPrelPC當(dāng)前值:03474、間接轉(zhuǎn)移指令JMP@A+DPTR;(PC)(A)+(DPTR)多分支轉(zhuǎn)移指令,DPTR內(nèi)容為多分支轉(zhuǎn)移程序的首地址,由累加器A的內(nèi)容來選擇其中的某一個分支轉(zhuǎn)移指令例:MOVDPTR,#JMP_TBLJMP@A+DPTR…..AJMPLABEL0AJMPLABEL1AJMPLABEL2AJMPLABEL3JMP_TBL:A中內(nèi)容為偶數(shù)分支轉(zhuǎn)移表不超過256B4、間接轉(zhuǎn)移指令JMP@A+DPTR;二、條件轉(zhuǎn)移指令均為相對尋址方式,指令提供偏移量rel,轉(zhuǎn)移范圍為PC當(dāng)前值的-128~+1271、判零轉(zhuǎn)移指令JZrel

;(PC)(PC)+2如(A)=0,則(PC)=(PC)+rel否則,程序順序執(zhí)行JNZrel

;(PC)(PC)+2如(A)=0,則(PC)=(PC)+rel否則,程序順序執(zhí)行二、條件轉(zhuǎn)移指令均為相對尋址方式,指令提供偏移量rel,轉(zhuǎn)移例:將外部數(shù)據(jù)存儲器的一個數(shù)據(jù)塊傳送到內(nèi)部數(shù)據(jù)RAM,兩者的首地址分別為DATA1和DATA2,遇到傳送的數(shù)據(jù)為0時停止傳送。分析:數(shù)據(jù)塊傳送,長度較短,均采用間接尋址方式,其中R0尋址外部數(shù)據(jù)存儲器,R1尋址內(nèi)部RAM。傳送時,要以累加器A作為過渡,利用判零轉(zhuǎn)移可以判別是否繼續(xù)傳送還是終止例:將外部數(shù)據(jù)存儲器的一個數(shù)據(jù)塊傳送到內(nèi)部數(shù)據(jù)RAM,兩者的程序如下:MOVR0,#DATA1;MOVR1,#DATA2;MOVXA,@R0;JZSTOP;MOV@R1,A;INCR0;INCR1;SJMPLOOP;LOOP:HERE:外部數(shù)據(jù)塊首址內(nèi)部數(shù)據(jù)塊首址外部數(shù)據(jù)傳入A為零則終止不為零則傳送至內(nèi)部RAM單元修改地址指針繼續(xù)循環(huán)STOP:程序如下:MOVR0,#DATA1;LOOP:HE2、比較轉(zhuǎn)移指令格式:CJNE(目的操作數(shù)),(源操作數(shù)),rel2、比較轉(zhuǎn)移指令格式:CJNE(目的操作數(shù)),(源操根據(jù)目的和源操作數(shù)的尋址方式不同,共有4條CJNEA,#data,relCJNEA,direct,relCJNERn,#data,relCJNE@Ri,#data,rel三字節(jié)指令例:設(shè)(R7)=56H,執(zhí)行指令CJNER7,#60H,K1…………K1:根據(jù)目的和源操作數(shù)的尋址方式不同,共有4條CJNEA,例2、設(shè)P1口P1·0~P1·3為準(zhǔn)備就緒信號輸入端,當(dāng)該4位輸入全“1”說明各項工作準(zhǔn)備好,單片機(jī)可順序執(zhí)行主程序,否則循環(huán)等待。程序片段如下:L0:MOVA,P1;ANLA,#0FH;CJNEA,#0FH,L0;…………MAN1:讀P1口內(nèi)容高4位無意義,屏蔽低4位不全為1,返回L0,否則繼續(xù)執(zhí)行例2、設(shè)P1口P1·0~P1·3為準(zhǔn)備就緒信號輸入端,當(dāng)該43、循環(huán)轉(zhuǎn)移指令(減1條件轉(zhuǎn)移指令)DJNZRn,rel

;(PC)(PC)+2(Rn)(Rn)-1If(Rn)=0,(PC)(PC)+relElse,程序向下執(zhí)行DJNZdirect,rel;(PC)(PC)+3(direct)(direct)-1If(direct)=0,(PC)(PC)+relElse,程序向下執(zhí)行3、循環(huán)轉(zhuǎn)移指令(減1條件轉(zhuǎn)移指令)DJNZRn,rel若循環(huán)變量為00H,則循環(huán)次數(shù)為256次例1:(40H)=01H,(50H)=70H

(60H)=15H,以下程序片段的執(zhí)行結(jié)果DJNZ40H,LABEL1;DJNZ50H,LABEL2;DJNZ60H,LABEL3;結(jié)束循環(huán)向下執(zhí)行轉(zhuǎn)向LABEL2執(zhí)行,繼續(xù)循環(huán)需等上條指令執(zhí)行完,才執(zhí)行本指令各單元內(nèi)容變?yōu)椋海?0H)=00H,(50H)=6FH,(60H)=15H若循環(huán)變量為00H,則循環(huán)次數(shù)為256次例1:(40H)=例2:MOVR2,#8;CPLP1·7;DJNZR2,TOGGLF;TOGGLF:循環(huán)次數(shù)送R2P1·7取反,1個機(jī)周R2控制循環(huán),2個機(jī)器周期執(zhí)行結(jié)果:例2:MOVR2,#8;TOGGLF:循環(huán)次數(shù)送R2三、子程序調(diào)用及返回指令1、長調(diào)用指令LCALLaddr16;(PC)=(PC)+3(SP)=(SP)+1((SP))=(PC0~7)(SP)=(SP)+1((SP))=(PC8~15)(PC)=addr0~1564KB范圍內(nèi)子程序調(diào)用三、子程序調(diào)用及返回指令1、長調(diào)用指令LCALLaddr例:設(shè)(SP)=53H,子程序首址在3000H單元,并以標(biāo)號STR表示。即

2000H:LCALLSTR執(zhí)行時:(PC)=(PC)+3=2003H(SP)+1,(54H)=

03H(SP)+1,(55H)=

20H執(zhí)行結(jié)果:(SP)=(54H)=(55H)=(PC)=55H03H20H3000HSTR(PC)例:設(shè)(SP)=53H,子程序首址在3000H單元,并以標(biāo)號2、絕對調(diào)用指令A(yù)CALLaddr11

;(PC)=(PC)+2(SP)=(SP)+1((SP))=(PC0~7)(SP)=(SP)+1((SP))=(PC8~15)(PC0~10)addr11(PC11~15)不變提供2KB范圍內(nèi)的子程序調(diào)用,調(diào)用范圍同AJMP指令2、絕對調(diào)用指令A(yù)CALLaddr11;(PC)=(P3、返回指令RET;(PC8~15)((SP))(SP)(SP)-1(PC0~7)((SP))(SP)(SP)-1例:設(shè)(SP)=6BH,內(nèi)部RAM(6AH)=23H

(6BH)=01H,執(zhí)行RET(PC8~15)(6BH)(PC0~7)(6AH)執(zhí)行結(jié)果:(PC)=0123H

(SP)=69H3、返回指令RET;(PC8~15)4、中斷返回指令RETI

;功能:A)恢復(fù)斷點(diǎn),同RETB)恢復(fù)中斷邏輯,使CPU能接收同級或低級中斷請求5、空操作指令NOP

;(PC)(PC)+1功能:無任何操作,繼續(xù)執(zhí)行下一條指令,不影響任何標(biāo)志,產(chǎn)生一個機(jī)器周期的延時4、中斷返回指令RETI;功能:A)恢復(fù)斷點(diǎn),同RET5例:利用NOP指令產(chǎn)生方波CLRP2.7;NOPNOPNOPSETBP2.7;P2.7清0輸出置位P2.7高電平輸出例:利用NOP指令產(chǎn)生方波CLRP2.7;P2.程序舉例103在3000H為首地址的存儲區(qū)域中,存放著14個由ASCII碼表示的0~9之間的數(shù)。試編寫程序,將它們轉(zhuǎn)換成BCD碼,并以壓縮BCD碼的形式,存放在2000H~2006H單元。分析:1、外部RAM數(shù)據(jù)塊操作,14個數(shù)

DPTR做源間址寄存器,R0為目標(biāo)間址寄存器

R3做計數(shù)器2、ASCII碼轉(zhuǎn)換為壓縮BCD碼ASCII分離BCD碼壓縮BCD碼屏蔽高4位移位、異或程序舉例103在3000H為首地址的存儲區(qū)域中,存放著程序104MOVDPTR,#3000HMOVR0,#00HMOVR3,#07HMOVXA,@DPTRANLA,#0FHMOVR4,AINCDPTRMOVXA,@DPTRANLA,#0FHSWAPAXRLA,R4MOVP2,#20HMOVX@R0,AINCDPTRINCR0DJNZR3,LOOPLOOP:;源數(shù)據(jù)塊首地址;目標(biāo)數(shù)據(jù)塊首地址;計數(shù)器;取低位字節(jié)ASCII碼;屏蔽高4位,轉(zhuǎn)換為BCD碼;暫存;修改地址指針,指向高位字節(jié);取高位字節(jié)ASCII碼;轉(zhuǎn)換為BCD碼;移位到高4位;異或,轉(zhuǎn)換為壓縮BCD碼;高8位目標(biāo)地址;存放壓縮BCD碼到外部RAM;修改源地址指針;修改目標(biāo)地址;循環(huán)程序104MOVDPTR,#3000HLOOP:;源3.3.5位操作指令位處理器:CPU程序存儲器數(shù)據(jù)存儲器累加器(C)I/O口數(shù)據(jù)RAM可位尋址空間128位SFR的可尋址位82位3.3.5位操作指令位處理器:CPU數(shù)據(jù)RAM可位尋位地址表示:bit在匯編語言中有5種表示方法:(以用戶標(biāo)志F0為例)1、位地址D5H2、字節(jié)地址·位D0H·53、位寄存器名稱F04、寄存器名·位PSW·55、事先用偽指令定義的符號地址格式:字符名稱BIT位地址

AFBITF0位地址表示:bit1、位地址D5H一、位傳送指令MOVC,bit;(C)(bit)MOVbit,C;(bit)(C)注:位傳送必須通過累加器C進(jìn)行例:將30H位的內(nèi)容傳送到20H位MOVC,30HMOV20H,C一、位傳送指令MOVC,bit;二、位狀態(tài)控制指令1、位清零指令

CLRbit;(bit)0

CLRC;(C)02、位求反指令

CPLbit;(bit)(bit)

CPLC;(C)(C)3、位置位指令

SETBbit;(bit)1

SETBC;(C)1二、位狀態(tài)控制指令1、位清零指令2、位求反指令3、位置位指令例:設(shè)(P1)=00110101B

執(zhí)行以下指令:

CLRP1.0;CPLP1.0;SETBP1.6;P1=00110100BP1=00110101BP1=01110101B例:設(shè)(P1)=00110101BP1=00110100三、位邏輯操作指令1、位邏輯“與”

ANLC,bit;(C)(C)與(bit)

ANLC,/bit;(C)(C)與(bit)2、位邏輯“或”

ORLC,bit;(C)(C)或(bit)

ORLC,/bit;(C)(C)或(bit)三、位邏輯操作指令1、位邏輯“與”2、位邏輯“或”例:設(shè)E,B,D都代表位地址,試編寫程序完成E、B內(nèi)容的異或操作。即D=EB+EB程序如下:MOVC,BANLC,/EMOVF0,CMOVC,EANLC,/BORLC,F(xiàn)0MOVD,C;C=EB;暫存EB;C=EB;C=EB+EB;將運(yùn)算結(jié)果存入D位操作必須通過位累加器C進(jìn)行例:設(shè)E,B,D都代表位地址,試編寫程序完成E、B內(nèi)容的異或四、位控制轉(zhuǎn)移指令1、判 C轉(zhuǎn)移

JCrel;C=1轉(zhuǎn)移

JNCrel;C=0轉(zhuǎn)移例:設(shè)(C)=0,以下程序段的執(zhí)行路徑是什么JCL1CPLCJCL2L1:……L2:……;C=0,不轉(zhuǎn)移,順序執(zhí)行;C取反,C=1;C=1,轉(zhuǎn)向L2執(zhí)行四、位控制轉(zhuǎn)移指令1、判 C轉(zhuǎn)移例:設(shè)(C)=0,以下程序2、判位變量轉(zhuǎn)移指令JBbit,rel;(bit)=1轉(zhuǎn)移JNBbit,rel;(bit)=0轉(zhuǎn)移判位變量并清0轉(zhuǎn)移指令JBCbit,rel;(PC)(PC)+3IF(bit)=1,Then(PC)(PC)+relAnd(bit)=02、判位變量轉(zhuǎn)移指令JBbit,rel;(例1:MOVP1,#0CAHMOVA,#56HJBP1.2,L1JNBACC.3,L2L1:……L2:……;P1=11001010B;A=01010110B;P1.2=0,不轉(zhuǎn);ACC.3=0,轉(zhuǎn)L2執(zhí)行例2:MOVA,#43HJBCACC.2,L1JBCACC.6,L2L1:……L2:……;A=43H=01000011B;ACC.2=0,不轉(zhuǎn)移;ACC.6=1,轉(zhuǎn)L2執(zhí)行,且使ACC.6=0執(zhí)行結(jié)果:(A)=03H例1:MOVP1,#0CAH;P1=110010105.2匯編語言常用偽指令一、設(shè)置起始地址ORG格式:ORGnn操作碼助記符16位二進(jìn)制數(shù)功能:指定后續(xù)源程序經(jīng)匯編后的目標(biāo)程序存放的起始地址值。總是出現(xiàn)在每段源程序或數(shù)據(jù)塊的開始,可使程序員將程序、子程序或數(shù)據(jù)塊存放在程序存儲器的任何位置。5.2匯編語言常用偽指令一、設(shè)置起始地址ORG格式:例:ORG1000HSTART:MOVA,#00H表示由START開始的目標(biāo)程序從1000H開始存放一個源程序中,多次設(shè)置程序段起始地址,要求定義地址空間從小到大,且不能重疊如:ORG3000HMOVA,20H……ORG2700HMOVA,21H……地址從大到小,錯誤例:ORG1000H表示由ST再如:ORG2000HMOVA,20HORG2001HMOVA,21H……地址從小到大,但重疊,所以不正確若在源程序開始不放ORG指令,則匯編后的目標(biāo)程序?qū)?000H單元開始存放再如:ORG2000H地址從小到大,但重疊,所以不二、定義字節(jié)數(shù)據(jù)偽指令DB或DEFB格式:(標(biāo)號:)DB(項或項表)指一個字節(jié)、數(shù)或以‘’括起的字符串功能:將項或項表的數(shù)值存入從標(biāo)號開始的連續(xù)單元中例:HERE:DB84HDB43H;(HERE)=84H;(HERE+1)=43H二、定義字節(jié)數(shù)據(jù)偽指令DB或DEFB指一個字節(jié)、數(shù)或以‘例:ORG1000HSEG:DB53H,74H,78H,’1’,’2’結(jié)果:(1000H)=53H(1001H)=74H

(1002H)=78H

(1003H)=31H

(1004H)=32H1,2的ASCII碼注:操作數(shù)為字節(jié)數(shù)據(jù)(00H~FFH),字節(jié)數(shù)據(jù)串或字符串(長度應(yīng)限制在80個字節(jié)數(shù)據(jù)內(nèi))例:ORG1000H結(jié)果:(1三、定義字?jǐn)?shù)據(jù)偽指令DW或DEFW格式:(標(biāo)號:)DW(項或項表)功能:類似DB指令,區(qū)別在于DW定義16位數(shù)據(jù)(字?jǐn)?shù)據(jù))。在匯編時,按高位字節(jié)在高地址單元,低位字節(jié)在低地址單元的順序存放,常用于建立地址表例:ABC:DW1234H,0008H與ABC:DB34H,12H,08H,00H等價三、定義字?jǐn)?shù)據(jù)偽指令DW或DEFW格式:(標(biāo)號:)D四、預(yù)留存儲區(qū)偽指令DS或DEFS格式:(標(biāo)號:)DS(表達(dá)式)功能:由標(biāo)號指定單元開始,定義一個數(shù)據(jù)區(qū),以備源程序使用。預(yù)留的存儲單元數(shù)由表達(dá)式的值來決定例:ORG3C40HTEMP:DS10……即由3C40H單元開始保留連續(xù)的10個存儲單元的存儲區(qū)四、預(yù)留存儲區(qū)偽指令DS或DEFS格式:(標(biāo)號:)D五、標(biāo)號賦值偽指令EQU格式:(標(biāo)號)EQU(表達(dá)式)功能:將表達(dá)式的值賦予標(biāo)號,又稱等值指令例:BLKEQU1000H表達(dá)式的值可以是數(shù)據(jù)地址、代碼地址、位地址或立即數(shù)。即可以是8位,也可以是16位二進(jìn)制數(shù)注:EQU偽指令必須先賦值,后使用;且在整個源程序中,該標(biāo)號的值不能改變五、標(biāo)號賦值偽指令EQU格式:(標(biāo)號)EQU(表六、定義標(biāo)號值偽指令DL格式:(標(biāo)號:)DL(表達(dá)式)功能:定義該標(biāo)號的值為表達(dá)式例:COUNT1:DL2300H……COUNT2:DLCOUNT1+1與EQU區(qū)別:DL可在同一源程序中對同一標(biāo)號多次賦值六、定義標(biāo)號值偽指令DL格式:(標(biāo)號:)DL(表七、匯編結(jié)束偽指令END格式:(標(biāo)號:)END可有可無功能:匯編語言源程序結(jié)束標(biāo)志注意:一個源程序只能且必須有一個END偽指令,并放在所有指令的最后七、匯編結(jié)束偽指令END格式:(標(biāo)號:)ENMCS—51源程序的基本格式 ORG0000H AJMPSTART ORG0003H LJMPINTIE0 …… ORG0050HSTART:………… ORG1000H

A0:……

…… ORG2000HINTIE0:…………END;程序起始,轉(zhuǎn)向主程序;轉(zhuǎn)向外中斷0服務(wù)子程序;主程序段;子程序段A0;外部中斷0服務(wù)子程序;匯編程序結(jié)束MCS—51源程序的基本格式 ORG0000H;本章小結(jié)126尋址方式和尋址空間數(shù)據(jù)傳送類指令算術(shù)運(yùn)算類指令邏輯運(yùn)算類指令控制轉(zhuǎn)移類指令位操作類指令匯編語言常用偽指令本章小結(jié)126尋址方式和尋址空間127

單片機(jī)原理及應(yīng)用北京化工大學(xué)信息科學(xué)與技術(shù)學(xué)院郭青1單片機(jī)原理及應(yīng)用北京化工大學(xué)第三章80C51指令系統(tǒng)本章重點(diǎn)尋址方式指令格式操作結(jié)果及對標(biāo)志位影響第三章80C51指令系統(tǒng)本章重點(diǎn)3.1概述分類數(shù)據(jù)傳送類指令29數(shù)學(xué)運(yùn)算類指令24邏輯運(yùn)算類指令24控制轉(zhuǎn)移類指令17位操作指令17111條指令3.1概述分類數(shù)據(jù)傳送類指令29數(shù)學(xué)運(yùn)算類指按指令長度分類單字節(jié)指令雙字節(jié)指令三字節(jié)指令指令執(zhí)行時間12個振蕩周期6424個振蕩周期4548個振蕩周期2按指令長度分類單字節(jié)指令雙字節(jié)指令三字節(jié)指令指令執(zhí)行時間12指令格式標(biāo)號:操作碼[(目的操作數(shù)),(源操作數(shù))];注釋指令的符號地址由字母打頭的字母數(shù)字串組成,長度一般不超過6個符號指令操作的性質(zhì)用規(guī)定的匯編語言助記符表示指令操作的對象指令格式標(biāo)號:操作碼[(目的操作數(shù)),(源操作數(shù))]3.2尋址方式和尋址空間概念:說明操作數(shù)所在的位置(地址),把操作數(shù)提取出來的方法基本尋址方式:1、寄存器尋址 2、直接尋址3、寄存器間接尋址 4、立即尋址5、相對尋址 6、變址尋址7、位尋址3.2尋址方式和尋址空間概念:基本尋址方式:1、寄存器一、寄存器尋址操作數(shù)—通用寄存器的內(nèi)容表示符號—寄存器名稱尋址范圍工作寄存器Rn(R0~R7)寄存器ACC(累加器A)寄存器B,DPTR,位寄存器Cy一、寄存器尋址操作數(shù)—通用寄存器的內(nèi)容尋址范圍工作寄存器13480C52片內(nèi)數(shù)據(jù)RAM位尋址區(qū)R7~R0

3組R7~R0

2組R7~R0

1組R7~R0

0組20H18H10H08H00H寄存器30H7FH80HFFH特殊功能寄存器(SFR)RAM64KBFFFFH0000H片內(nèi)數(shù)據(jù)存儲器片外數(shù)據(jù)存儲器

溫馨提示

  • 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

提交評論