第三章89C51的指令系統(tǒng)_第1頁
第三章89C51的指令系統(tǒng)_第2頁
第三章89C51的指令系統(tǒng)_第3頁
第三章89C51的指令系統(tǒng)_第4頁
第三章89C51的指令系統(tǒng)_第5頁
已閱讀5頁,還剩77頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第三章89C51的指令系統(tǒng)提要指令系統(tǒng)簡介尋址方式數(shù)據(jù)傳送類指令算術(shù)運算類指令邏輯運算類指令控制轉(zhuǎn)移類指令位操作類指令2023年2月4日2第1節(jié)指令系統(tǒng)簡介1、簡要介紹2、指令格式2023年2月4日31、簡要介紹MCS-51單片機(jī)共有111條指令:單字節(jié)指令有49條,雙字節(jié)指令有45條,三字節(jié)指令有17條。其中有64條是單機(jī)器周期指令,45條雙機(jī)器周期指令,有2條是4機(jī)器周期指令(乘法和除法,單字節(jié))。根據(jù)功能可分為5類:數(shù)據(jù)傳輸指令,有29條算術(shù)運算類指令,有24條邏輯操作類指令,有24條位操作指令,有17條控制轉(zhuǎn)移指令,是17條。2023年2月4日42、指令格式指令格式:[標(biāo)號]:<操作碼>[目的操作數(shù)],[源操作數(shù)][;注釋]標(biāo)號:指令的符號地址操作碼:規(guī)定了指令的操作功能操作數(shù):參加操作的數(shù)據(jù)、數(shù)據(jù)地址或符號地址注釋:該條指令的說明,便于閱讀MCS-51指令系統(tǒng)根據(jù)指令字節(jié)長度可分為單字節(jié)、雙字節(jié)和三字節(jié)。第二節(jié)尋址方式1、尋址方式定義2、尋址方式中的常用符號3、尋址方式1、尋址方式定義將尋找指令中的操作數(shù)或操作數(shù)所在地址,稱為尋址。把如何找到操作數(shù)或操作數(shù)所在的地址,稱為尋址方式。尋址方式越多,計算機(jī)的功能就越強(qiáng),靈活性就越大,更能有效的處理各種數(shù)據(jù)。2、指令中的常用符號Rn:n等于0—7。R0-R7代表當(dāng)前所選定的工作寄存器組。Ri:i取值為0或1??勺鳛榈刂分羔樀膬蓚€工作寄存器,既可存放數(shù)據(jù),又可存放地址。#data:表示8位的立即數(shù),出現(xiàn)在指令中的8位常數(shù)。#data16:表示16位的立即數(shù),出現(xiàn)在指令當(dāng)中的16位常數(shù)。direct:直接地址,表示8位片內(nèi)數(shù)據(jù)存儲器單元,SFR也是直接地址。addr11:表示一個11位的目的地址,主要用在ACALL和AJMP指令,其目的地址是在下一條指令地址所在的2K字節(jié)分區(qū)內(nèi)。addr16:表示一個16位的目的地址,主要用在于LCALL和LJMP指令中,可在整個64K地址空間內(nèi)轉(zhuǎn)移。2、指令中的常用符號disp:表示一個補(bǔ)碼形式的8位地址偏移量,以下一條指令的第一字節(jié)地址為基值,偏移的范圍是-128到+127。bit:表示片內(nèi)數(shù)據(jù)存儲器中或特殊寄存器中的可直接尋址的位地址。@:間址寄存器前面的前綴符號,用在寄存器間接尋址方式中。/:取反符號,在位操作指令中,先求反再進(jìn)行操作。(x):表示指定的寄存器或地址中的內(nèi)容。((x)):表示由x所指的地址單元中的內(nèi)容,適合間址尋址使用。箭頭←:表示指令的操作流程,將箭頭右邊內(nèi)容送給左邊的單元。$:表示本條指令的起始地址。3、尋址方式1)立即尋址2)直接尋址3)寄存器尋址4)間接尋址5)變址尋址6)相對尋址7)位尋址1)立即尋址立即尋址指令大多是雙字節(jié):第一個字節(jié)是操作碼第二個字節(jié)是操作數(shù)。真接參與運算的操作數(shù),稱為立即數(shù),數(shù)的前面面用“#”來表示。例:MOVA,#31H有一條指令的源操作數(shù)是16位,功能是向DPTR傳送16位的立即數(shù),立即數(shù)的高8位送到DPH里,而低8位送到DPL中。例:MOVDPTR,#3FA6H2)直接尋址在指令當(dāng)中,直接給出操作數(shù)所在的存儲地址,包括片內(nèi)RAM128個單元,以及所有特殊功能寄存器SFR。對于特殊功能寄存器,直接尋址時,可以用其地址,也可以使用其名字。(P1或90H)例:MOVA,69HMOVA,P1MOVA,90H3)寄存器尋址對工作寄存器R0——R7、累加器A、寄存器B、數(shù)據(jù)指針DPTR中的數(shù)進(jìn)行尋址。R0到R7是由操作碼的低三位來表示。其它寄存器隱含在操作碼當(dāng)中。例:MOVA,R5;A(R5)指令代碼:EDH(11101101)注:操作碼的低三位101表示操作數(shù)是R5。MOVR2,#30H4)寄存器間接尋址方式寄存器間接尋址中,操作數(shù)所指定的寄存器存放的不是操作數(shù)本身,而是操作數(shù)的地址??捎米鏖g接寄存器的有R0、R1和DPTR。間址寄存器使用時,前面一定要加@來標(biāo)識。當(dāng)訪問片內(nèi)RAM,或片外RAM低256個字節(jié)時:可用R0或R1來作為間址寄存器。操作碼的最低位指明具體使用哪個寄存器。例:MOVA,@R1

指令代碼:E7H5)變址尋址變址尋址是通過“基址寄存器+變址寄存器”來進(jìn)行間接尋址以DPTR(數(shù)據(jù)指針)或PC(程序計數(shù)器)為基址寄存器以A作為變址寄存器。主要是用在查表操作。例:MOVCA,@A+DPTR

指令代碼:93H

MOVCA,@A+PC6)相對尋址相對尋址:PC中的當(dāng)前值+指令的第二字節(jié)給出的偏移量,相加的結(jié)果作為相對跳轉(zhuǎn)指令的目的地址。

只在相對轉(zhuǎn)移指令中使用當(dāng)前值:正運行指令之后的字節(jié)地址,即下一條指令起始地址。偏移量是帶符號是數(shù),有正負(fù)之分,以補(bǔ)碼的形式給出,轉(zhuǎn)移范圍是-128到+127。例:JC06H

指令代碼:40H,06H7)位尋址位尋址:對片內(nèi)RAM的可位尋址區(qū)域和某些可位尋址的特殊功能寄存器進(jìn)行位操作。在進(jìn)行位操作的時候,進(jìn)位位C作為位累加器使用。位地址與直接地址中的字節(jié)地址,形式是完全一樣,主要由操作碼來區(qū)分。例:SETB3DH

指令代碼:D2H,3DH位尋址位尋址的位地址表示方法:(1)直接使用位地址(2)用單元地址加位序號表示(3)用位名稱表示(4)對特殊功能寄存器可直接用寄存器符號加位序號表示2023年2月4日18第三節(jié)數(shù)據(jù)傳送類指令傳送類指令是指令系統(tǒng)當(dāng)中,最基本、使用最多的一類指令,主要用于數(shù)據(jù)的傳送,保存和交換等。具體分為以下幾類:

1、以累加器A為目的操作數(shù)的指令

2、以寄存器Rn為目的操作數(shù)的指令

3、以直接地址為目的操作數(shù)的指令

4、以間接地址為目的操作數(shù)的指令

5、16位的數(shù)據(jù)傳送指令

6、累加器A與片外數(shù)據(jù)存儲器傳送指令

7、查表指令

8、交換指令

9、堆棧指令1、以累加器A為目的操作數(shù)的指令匯編格式機(jī)器碼操作機(jī)器周期振蕩周期字節(jié)MOVA,Rn11101rrrA←(Rn)1121MOVA,direct11100101directA←(direct)1122MOVA,@Ri1110011iA←((Ri))1121MOVA,#data01110100dataA←data11222、以寄存器Rn為目的操作數(shù)的指令匯編格式機(jī)器碼操作機(jī)器周期振蕩周期字節(jié)MOVRn,A11111rrrRn←(A)1121MOVRn,direct10101rrrdirectRn←(direct)2242MOVRn,#data01111rrrdataRn←data11223、以直接地址為目的操作數(shù)的指令匯編格式機(jī)器碼操作機(jī)器周期振蕩周期字節(jié)MOVdirect,A11110101directdirect←(A)1122MOVdirect,Rn10001rrrdirectdirect←(Rn)2242MOVdirect2,direct110000101direct1direct2direct2←(direct1)2243MOVdirect,@Ri1000011idirectdirect←((Ri))2242MOVdirect,#data01110101directdatadirect←data22434、以間接地址為目的操作數(shù)的指令匯編格式機(jī)器碼操作機(jī)器周期振蕩周期字節(jié)MOV@Ri,A1111011i(Ri)←(A)1121MOV@Ri,direct1010011idirect(Ri)←(direct)1122MOV@Ri,#data0111011idata(Ri)←data22425、16位的數(shù)據(jù)傳送指令匯編格式機(jī)器碼操作機(jī)器周期振蕩周期字節(jié)MOVDPTR,#data1610010000data15~8data7~0DPH←data15~8DPL←data7~022436、累加器A與片外數(shù)據(jù)存儲器傳送指令匯編格式機(jī)器碼操作機(jī)器周期振蕩周期字節(jié)MOVXA,@DPTR11100000A←((DPTR))2241MOVX@DPTR,A11110000(DPTR)←(A)2241MOVXA,@Ri1110001iA←((Ri))2241MOVX@Ri,A1111001i(Ri)←(A)22417、查表指令匯編格式機(jī)器碼操作機(jī)器周期振蕩周期字節(jié)MOVCA,@A+PC10000011PC←(PC)+1A←((A)+(PC))2241MOVCA,@A+DPTR10010011A←((A)+(DPTR))22418、交換指令

高4位

低4位匯編格式機(jī)器碼操作機(jī)器周期振蕩周期字節(jié)XCHA,Rn11001rrr1121XCHA,direct11000101direct1122XCHA,@Ri1100011i1121XCHDA,@Ri1101011i1121SWAPA110001001121(A)(Rn)(A)(direct)(A)((Ri))(A)0~3((Ri))0~39、堆棧指令匯編格式機(jī)器碼操作機(jī)器周期振蕩周期字節(jié)PUSHdirect11000000directSP←(SP)+1(SP)←(direct)2242POPdirect11010000directdirect←((SP))SP←(SP)-12242第四節(jié)算術(shù)運算類指令算術(shù)運算類指令主要是對8位數(shù)進(jìn)行算術(shù)操作,包括加法、減法、加1、減1、乘法和除法,以及十進(jìn)制調(diào)整指令。算術(shù)運算類操作大多要影響到PSW中的相關(guān)位:通過溢出標(biāo)志OV,可以對帶符號數(shù)進(jìn)行補(bǔ)碼運算;借助進(jìn)位標(biāo)志C,可以進(jìn)行多精度的加減運算;借助輔助進(jìn)位位AC對壓縮BCD碼進(jìn)行運算。第四節(jié)算術(shù)運算類指令1、加法2、帶進(jìn)位加法3、減法4、加一5、減一6、乘除法7、十進(jìn)制調(diào)整指令1、加法匯編格式機(jī)器碼操作機(jī)器周期振蕩周期字節(jié)ADDA,Rn00101rrrA←(A)+(Rn)1121ADDA,direct00100101directA←(A)+(direct)1122ADDA,@Ri0010011iA←(A)+((Ri))1121ADDA,#data00100100dataA←(A)+data11221、加法與加法相關(guān)的標(biāo)志位

C:加法運算中,最高位第7位有進(jìn)位,進(jìn)位位

C=1,否則C=0。

AC:加法運算中,如果低半字節(jié)向高半字節(jié)有進(jìn) 位,AC=1,否則AC=0。

OV:帶符號位數(shù)相加,要考慮溢出位OV。如果

OV=1,表示運算產(chǎn)生溢出。判斷準(zhǔn)則:OV=(D7進(jìn)位位)⊕(D6進(jìn)位位)2、帶進(jìn)位的加法匯編格式機(jī)器碼操作機(jī)器周期振蕩周期字節(jié)ADDCA,Rn00111rrrA←(A)+(Rn)+(Cy)1121ADDCA,direct00110101directA←(A)+(direct)+(Cy)1122ADDCA,@Ri0011011iA←(A)+((Ri))+(Cy)1121ADDCA,#data00110100dataA←(A)+data+(Cy)11222、帶進(jìn)位的加法利用ADDC指令可以進(jìn)行多字節(jié)加法的運算!運算結(jié)果對PSW標(biāo)志位的影響與ADD指令相同。說明:所加的進(jìn)位標(biāo)志CY的值是在該指令執(zhí)行之前已經(jīng)存在的進(jìn)位標(biāo)志值,而不是執(zhí)行該指令過程中產(chǎn)生的進(jìn)位標(biāo)志值。3、減法指令匯編格式機(jī)器碼操作機(jī)器周期振蕩周期字節(jié)SUBBA,Rn10011rrrA←(A)-(Rn)-(Cy)1121SUBBA,direct10010101directA←(A)-(direct)-(Cy)1122SUBBA,@Ri1001011iA←(A)-((Ri))-(Cy)1121SUBBA,#data10010100dataA←(A)-data-(Cy)11223、減法指令減法指令只有帶借位的減法,沒有不帶借位的減法。C被稱為借位位,C=1,表示有借位;C=0,表示沒有借位。溢出標(biāo)志由運算時第6位和第7位的借位位的“異或”計算得到。4、加1指令匯編格式機(jī)器碼操作機(jī)器周期振蕩周期字節(jié)INCA00000100/A←(A)+11121INCRn00001rrrRn←(Rn)+11121INCdirect00000101directdirect←(direct)+11122INC@Ri0000011i(Ri)←((Ri))+11121INCDPTR10100011DPTR←(DPTR)+122414、加1指令I(lǐng)NC@Ri:Ri寄存器所指向的地址單元的內(nèi)容加1。除INCA,導(dǎo)致P發(fā)生變化外,其他指令不會影響到PSW的標(biāo)志位。INC指令主要應(yīng)用于寄存器間接尋址,用來改變操作數(shù)的地址。5、減1指令匯編格式機(jī)器碼操作機(jī)器周期振蕩周期字節(jié)DECA00010100/A←(A)-11121DECRn00011rrrRn←(Rn)-11121DECdirect00010101directdirect←(direct)-11122DEC@Ri0001011i(Ri)←((Ri))-111216、乘除法匯編格式機(jī)器碼操作機(jī)器周期振蕩周期字節(jié)MULAB10100100BA←(A)×(B)4481八位無符號數(shù)乘法,乘積的低8位放在A中,高8位放在B中。如果乘積大于FFH,OV被置1,表示乘積大于FFH。乘法運算會將C硬件清0。6、乘除法匯編格式機(jī)器碼操作機(jī)器周期振蕩周期字節(jié)DIVAB100001004481B(余數(shù))(B)累加器A除以B寄存器的內(nèi)容,把商送到累加器A,把余數(shù)存放在B寄存器。如果除數(shù)為0,OV被置1,表示除法沒有意義。否則OV被清0。除法運算將C清零。7、十進(jìn)制調(diào)整指令指令:DAA功能:對A中剛進(jìn)行的兩個BCD碼的加法結(jié)果自動進(jìn)行修正。該指令會影響進(jìn)位標(biāo)志CY。在單片機(jī)中沒有專門的BCD碼加法指令,要進(jìn)行BCD碼加法運算,同樣要使用加法指令A(yù)DD或ADDC。單片機(jī)在執(zhí)行ADD或ADDC指令時,是按照二進(jìn)制規(guī)則進(jìn)行,對于4位二進(jìn)制數(shù)是按逢16進(jìn)位。而BCD碼是逢十進(jìn)位,二者存在進(jìn)位差,中間差了6。因此單純用ADD或ADDC指令進(jìn)行BCD碼相加時,會出現(xiàn)錯誤。在51單片機(jī)中,遇到十進(jìn)制調(diào)整情況,中間結(jié)果的修正是由硬件自動進(jìn)行,用戶不用考慮加6,只要在加法指令后緊跟一條“DAA”指令既可。第五節(jié)邏輯運算類指令1、邏輯與2、邏輯或3、邏輯異或4、累加器清零、取反5、循環(huán)移位1、邏輯與匯編格式機(jī)器碼操作機(jī)器周期振蕩周期字節(jié)ANLA,Rn01011rrrA←(A)∧(Rn)1121ANLA,direct01010101directA←(A)∧(direct)1122ANLA,@Ri0101011iA←(A)∧(Ri)1121ANLA,#data01010100dataA←(A)∧data1122ANLdirect,A01010010directdirect←(direct)∧(A)1122ANLdirect,#data01010011directdatadirect←(direct)∧data22431、邏輯與前四條指令是將累加器A的內(nèi)容和操作數(shù)所指的內(nèi)容按位進(jìn)行邏輯“與”,結(jié)果存放在A中。后兩條指令是將直接地址單元中的內(nèi)容和操作數(shù)所指的內(nèi)容按位進(jìn)行邏輯“與”,結(jié)果存入直接地址單元中。若直接地址正好是I/O端口,則為“讀——改——寫”操作。如ANLP1,A。邏輯與可用于將某些位屏蔽,將要屏蔽的位和“0”相與,保留不變的位同“1”相與。2、邏輯或匯編格式機(jī)器碼操作機(jī)器周期振蕩周期字節(jié)ORLA,Rn01001rrrA←(A)∨(Rn)1121ORLA,direct01000101directA←(A)∨(direct)1122ORLA,@Ri0100011iA←(A)∨((Ri))1121ORLA,#data01000100dataA←(A)∨data1122ORLdirect,A01000010directdirect←(direct)∨(A)1122ORLdirect,#data01000011directdatadirect←(direct)∨data22432、邏輯或功能:將兩個指定的操作數(shù)按位進(jìn)行邏輯“或”。前四條指令的操作結(jié)果存放在累加器A中,后兩條指令的操作結(jié)果存放在直接地址單元中。邏輯或可將某些位置位,將要置位的位和“1”相或,要保留不變的位同“0”相或。3、邏輯異或匯編格式機(jī)器碼操作機(jī)器周期振蕩周期字節(jié)XRLA,Rn01101rrr1121XRLA,direct01100101direct1122XRLA,@Ri0110011i1121XRLA,#data01100100data1122XRLdirect,A01100010direct1122XRLdirect,#data01100011directdata2243將兩個指定的操作數(shù)按位進(jìn)行“異或”,前四條指令的結(jié)果存放在累加器A中,后兩條指令的操作結(jié)果存放在直接地址單元中應(yīng)用:用于將某些位取反,將需求反的位同“1”相異或,要保留的位同“0”相異或。A←(A)(Rn)A←(A)(direct)A←(A)(Ri)A←(A)datadirect←(direct)(A)direct←(direct)data4、清零、取反匯編格式機(jī)器碼操作機(jī)器周期振蕩周期字節(jié)CLRA11100100A←01121CPLA111101001121清零和取反指令只針對累加器A,單字節(jié)。只有對A的取反指令,沒有求補(bǔ)指令。若要進(jìn)行求補(bǔ)操作,可按“求反加1”來進(jìn)行。以上所有的邏輯運算指令,對CY、AC和OV標(biāo)志都沒有影響,只在涉及到累加器A時,才會影響奇偶標(biāo)志P。5、循環(huán)移位第六節(jié)控制轉(zhuǎn)移類指令51系列單片機(jī)有比較豐富的控制轉(zhuǎn)移指令,具體分類:

1、無條件轉(zhuǎn)移指令(4條)

2、條件轉(zhuǎn)移指令(8條)

3、調(diào)用子程序和返回指令(4條)

4、空操作指令(1條)1、無條件轉(zhuǎn)移指令匯編格式機(jī)器碼操作機(jī)器周期振蕩周期字節(jié)LJMPaddr1600000010a15~a8a7~a0PC←addr15~02243AJMPaddr11a10a9a800001a7~a0PC←(PC)+2PC10~0←addr10~0PC15~11不變2242SJMPdisp10000000dispPC←(PC)+2PC←(PC)+disp2242JMP@A+DPTR01110011/PC←(A)+(DPTR)2241有4條無條件轉(zhuǎn)移指令,提供不同的轉(zhuǎn)移范圍和方式,可使程序無條件轉(zhuǎn)到指令所提供的地址上。1、無條件轉(zhuǎn)移指令LJMPaddr1600000010a15~a8a7~a0PC←addr15~022431)長轉(zhuǎn)移指令把指令中給出的16位目的地址addr16送入程序計數(shù)器PC,使程序無條件轉(zhuǎn)移到addr16處執(zhí)行。16位地址可尋址64KBROM,可轉(zhuǎn)向64K程序存儲器地址空間的任何單元。長轉(zhuǎn)移指令是由三字節(jié)指令組成:操作碼、高8位地址、低8位地址。1、無條件轉(zhuǎn)移指令A(yù)JMPaddr11a10a9a800001a7~a0PC←(PC)+2PC10~0←addr10~0PC15~11不變22422)絕對轉(zhuǎn)移指令指令格式:包括2字節(jié),具體為:

a10a9a800001a7a6a5a4a3a2a1a0

a10~a8占據(jù)第一字節(jié)的高3位,a7~a0占滿第二字節(jié),而00001是這條指令特有的操作碼,占據(jù)第一字節(jié)的低5位。操作數(shù)出現(xiàn)在操作碼中。低11位地址,范圍為00000000000~11111111111,可轉(zhuǎn)移的范圍是2KB,相對于當(dāng)前地址可以向前也可向后轉(zhuǎn)移。注意:轉(zhuǎn)移的目的位置與PC+2的地址必須在同一個2K段內(nèi)。1、無條件轉(zhuǎn)移指令1、無條件轉(zhuǎn)移指令SJMPdisp10000000dispPC←(PC)+2PC←(PC)+disp22423)短轉(zhuǎn)移指令無條件相對轉(zhuǎn)移指令,雙字節(jié),相對尋址,disp是8位偏移量,范圍為-128~+127。目的地址=(PC)+2+disp1、無條件轉(zhuǎn)移指令JMP@A+DPTR01110011/PC←(A)+(DPTR)22414)變址尋址轉(zhuǎn)移指令(散轉(zhuǎn)指令/間接轉(zhuǎn)移指令)將累加器A中的8位無符號數(shù)與基址寄存器DPTR中的16位地址相加,得到的和作為目的地址送入PC,實現(xiàn)轉(zhuǎn)移。將多分支轉(zhuǎn)移指令表的首地址裝入DPTR,對應(yīng)每個分支的索引裝入累加器A,根據(jù)A中內(nèi)容動態(tài)選擇轉(zhuǎn)向哪一條分支,實現(xiàn)多分支轉(zhuǎn)移的功能。2、條件轉(zhuǎn)移指令有條件限制,當(dāng)滿足某種條件時,才進(jìn)行轉(zhuǎn)移;不滿足條件時,程序按順序執(zhí)行。具有共同特點:所有的條件轉(zhuǎn)移指令都屬于相對轉(zhuǎn)移指令,轉(zhuǎn)移范圍相同,以PC當(dāng)前值為基準(zhǔn)的256B范圍內(nèi)(-128~+127)。計算轉(zhuǎn)移地址的方法相同:轉(zhuǎn)移地址=PC當(dāng)前值

+disp條件轉(zhuǎn)移分類:

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

2)比較判斷轉(zhuǎn)移指令

3)減1條件轉(zhuǎn)移指令2、條件轉(zhuǎn)移指令2、條件轉(zhuǎn)移指令匯編格式機(jī)器碼操作機(jī)器周期振蕩周期字節(jié)JZdisp01100000dispPC←(PC)+2若A=0,則PC←(PC)+disp2242若A≠0,順序執(zhí)行JNZdisp01110000dispPC←(PC)+2若A≠0,則PC←(PC)+disp2242若A=0,順序執(zhí)行1)累加器判零轉(zhuǎn)移指令分別對累加器A的內(nèi)容為零或不為零進(jìn)行檢測,當(dāng)滿足各自條件時,程序轉(zhuǎn)向指定的目標(biāo)地址;當(dāng)不滿足各自的條件時,程序順序向下執(zhí)行。目標(biāo)地址:下一條指令第一個字節(jié)的地址+相對偏移量。2、條件轉(zhuǎn)移指令2)比較判斷轉(zhuǎn)移指令匯編格式機(jī)器碼操作機(jī)器周期振蕩周期字節(jié)CJNEA,direct,disp10110101directdispPC←(PC)+3若(direct)<(A),則2243PC←(PC)+disp且Cy←0若(direct)>(A),則PC←(PC)+disp且Cy←1若(direct)==(A),則順序執(zhí)行,且Cy←0CJNEA,#data,disp10110100datadispPC←(PC)+3若data<(A),則2243PC←(PC)+disp且Cy←0若data>(A),則PC←(PC)+disp且Cy←1若data==(A),則順序執(zhí)行,且Cy←0CJNERn,#data,disp10111rrrdatadispPC←(PC)+3若data<(Rn),則2243PC←(PC)+disp且Cy←0若data>(Rn),則PC←(PC)+disp且Cy←1若data==(Rn),則順序執(zhí)行,且Cy←0CJNE@Ri,#data,disp1011011idatadispPC←(PC)+3若data<((Ri)),則2243PC←(PC)+disp且Cy←0若data>((Ri)),則PC←(PC)+disp且Cy←1若data==((Ri)),則順序執(zhí)行,且Cy←0比較判斷轉(zhuǎn)移指令的特點:三字節(jié)指令,因此PC當(dāng)前值=PC+3;比較時實際上做的是減法操作,不保存差值,具體結(jié)果反映在C上;注意在大于和小于(不等于)的時候,都會實現(xiàn)跳轉(zhuǎn),跳轉(zhuǎn)到目標(biāo)地址位置后,如果要做進(jìn)一步的操作,需要通過判斷C是0還是1,可根據(jù)這個標(biāo)志來做下一步的操作。參與比較的兩個操作數(shù)當(dāng)作無符號數(shù)看待;如果進(jìn)行兩個有符號數(shù)大小的比較,需要依據(jù)符號位、CY和OV來進(jìn)行判決。2、條件轉(zhuǎn)移指令2、條件轉(zhuǎn)移指令匯編格式機(jī)器碼操作機(jī)器周期振蕩周期字節(jié)DJNZRn,disp11011rrrdispPC←(PC)+2Rn←(Rn)-12242當(dāng)(Rn)≠0,則PC←(PC)+disp當(dāng)(Rn)=0,則結(jié)束循環(huán),程序往下執(zhí)行DJNZdirect,disp11010101directdispPC←(PC)+3direct←(direct)-12243當(dāng)(direct)≠0,則PC←(PC)+disp當(dāng)(direct)=0,則結(jié)束循環(huán),程序往下執(zhí)行3)減1條件轉(zhuǎn)移指令減1條件轉(zhuǎn)移指令通常在循環(huán)程序中作為計數(shù)器使用。賦初值后,每執(zhí)行一次程序,計數(shù)器減1,直到為零結(jié)束循環(huán)。3、調(diào)用子程序和返回指令匯編格式機(jī)器碼操作機(jī)器周期振蕩周期字節(jié)ACALLaddr11a10a9a810001addr7~0PC←(PC)+2SP←(SP)+1(SP)←PC7~02242SP←(SP)+1(SP)←PC15~8PC15~11不變PC10~0←addr10~0LCALLaddr1600010010addr15~8addr7~0PC←(PC)+3SP←(SP)+1(SP)←PC7~02243SP←(SP)+1(SP)←PC15~8PC15~0←addr15~0RET00100010/PC15~8←(SP)SP←(SP)-12241PC7~0←((SP))SP←(SP)-1RETI00110010/PC15~8←((SP))SP←(SP)-12241PC7~0←((SP))SP←(SP)-1匯編格式機(jī)器碼操作機(jī)器周期振蕩周期字節(jié)LCALLaddr1600010010addr15~8addr7~0PC←(PC)+3SP←(SP)+1(SP)←PC7~02243SP←(SP)+1(SP)←PC15~8PC15~0←addr15~01)長調(diào)用指令長調(diào)用是16位目的地址,可以在整個64位的地址范圍內(nèi)進(jìn)行調(diào)用。相對于LJMP,有壓棧操作。3、調(diào)用子程序和返回指令匯編格式機(jī)器碼操作機(jī)器周期振蕩周期字節(jié)ACALLaddr11a10a9a810001addr7~0PC←(PC)+2SP←(SP)+1(SP)←PC7~02242SP←(SP)+1(SP)←PC15~8PC10~0←addr10~0PC15~11不變2)絕對調(diào)用在使用ACALL時,單片機(jī)會根據(jù)具體指令會自動匯編成目標(biāo)地址。只要保證調(diào)用子程序的入口地址與PC當(dāng)前值在2K字節(jié)段范圍內(nèi)。相對于AJMP,ACALL有壓棧操作。3、調(diào)用子程序和返回指令3、調(diào)用子程序和返回指令匯編格式機(jī)器碼操作機(jī)器周期振蕩周期字節(jié)RET00100010/PC15~8←((SP))SP←(SP)-12241PC7~0←((SP))SP←(SP)-1前者是子程序的返回指令,后者是中斷子程序的返回,二者完成的操作是一樣的,通過返回指令彈出之前壓棧的PC高八位和低八位。RET與RETI的區(qū)別:RETI返回中斷斷點,同時清除中斷響應(yīng)時被置位的優(yōu)先級狀態(tài)觸發(fā)器二者不能互換使用。RETI00110010/PC15~8←((SP))SP←(SP)-12241PC7~0←((SP))SP←(SP)-14、空操作指令匯編格式機(jī)器碼操作機(jī)器周期振蕩周期字節(jié)NOP00000000/PC←(PC)+11121空操作常常用來產(chǎn)生一個機(jī)器周期的精確延時。第七節(jié)位操作指令51單片機(jī)具有豐富的位操作功能,共17條指令.位操作指令以“可尋址位”為對象,按位來進(jìn)行操作,與前面討論的按字節(jié)操作的指令是有區(qū)別的。通過位操作指令可實現(xiàn)位傳送、位狀態(tài)控制、位邏輯運算和位條件轉(zhuǎn)移等。位地址有4種表示方式:“直接位地址”方式“直接地址+位數(shù)”方式“位名稱”方式“特殊功能寄存器+序號”方式。1、位數(shù)據(jù)傳送指令匯編格式機(jī)器碼操作機(jī)器周期振蕩周期字節(jié)MOVC,bit10100010bitC←(bit)1122MOVbit,C10010010bitbit←(c)2242直接位地址不能夠傳給直接位地址,MOVbit1,bit2是錯誤的。而字節(jié)的直接地址間是可以互傳內(nèi)容。2、位狀態(tài)控制指令CPL對該位內(nèi)容求反,改變了該位的內(nèi)容,而/bit將該位值取出來,求反參加運算,并不改變bit位的內(nèi)容。當(dāng)直接位地址是I/O口的某一位時,具有讀改寫的功能。例如:CPLP1.0。匯編格式機(jī)器碼操作機(jī)器周期振蕩周期字節(jié)CLRC11000011C←01121CLRbit11000010bitbit←01122CPLC101100111121CPLbit10110010bit1122SETBC11010011C←11121SETBbit11010010bitbit←11122C←(c)bit←(bit)3、位邏輯運算指令邏輯與/或就是相乘和相加,CPL是邏輯求反,對應(yīng)硬件的與/或/非三種操作。位操作沒有異或操作指令。匯編格式機(jī)器碼操作機(jī)器周期振蕩周期字節(jié)ANLC,bit10000010bitC←(C)∧(bit)2242ANLC,/bit10110000bit2242ORLC,bit01110010bitC←(C)∨(bit)2242ORLC,/bit10100000bit2242C←(C)∧(bit)C←(C)∨(bit)4、位條件轉(zhuǎn)移指令匯編格式機(jī)器碼操作機(jī)器周期振蕩周期字節(jié)JCdisp01000000dispPC←(PC)+2若Cy=1,則PC←(PC)+disp2242若Cy=0,順序執(zhí)行JNCdisp01010000dispPC←(PC)+2若Cy=0,則PC←(PC)+disp2242若Cy=1,順序執(zhí)行JBbit,disp00100000bitdispPC←(PC)+3若(bit)=1,則PC←(PC)+disp2243若(bit)=0,順序執(zhí)行JNBbit,disp00110000bitdispPC←(PC)+3若(bit)=0,則PC←(PC)+disp2243若(bit)=1,順序執(zhí)行JBCbit,disp00010000bitdispPC←(PC)+3若(bit)=1,則(bit)←0PC←(PC)+disp

2243若(bit)=0,順序執(zhí)行關(guān)于JBC的使用:如果需要在跳轉(zhuǎn)之前對bit位要清零的話,需要用JBC。如果只需要判斷進(jìn)行跳轉(zhuǎn),就用JB。在串口和定時/計數(shù)器中,在通過軟件查詢的方式來響應(yīng)中斷時,就會用到

溫馨提示

  • 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

提交評論