版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、重點(diǎn)內(nèi)容:單片機(jī)的指令系統(tǒng)概述單片機(jī)的尋址方式單片機(jī)的指令說明本章小結(jié),第3章 單片機(jī)指令系統(tǒng),一、單片機(jī)的指令系統(tǒng)概述,匯編語言是我們后面所講的指令系統(tǒng)的一個(gè)子集,只要指令按格式書寫就構(gòu)成了程序的基本格式。在程序中,指令格式由以下幾部分組成:操作碼 [目的操作數(shù)],[源操作數(shù)] ;[注釋]對各部分的解釋如下:●操作碼:操作碼用助記符表示,它代表了指令的操作功能。操作碼是指令的必需部分,是指令的核心,不可缺少?!癫?/p>
2、作數(shù)(目的操作數(shù)和源操作數(shù)):是指參加操作的數(shù)據(jù)或數(shù)據(jù)的地址。操作數(shù)的個(gè)數(shù)可以是0~3個(gè)。操作數(shù)與操作碼之間用空格分隔,操作數(shù)與操作數(shù)之間用逗號“,”分隔。●注釋:注釋屬于非必需項(xiàng),是為便于閱讀,對指令功能作的說明和注解。注釋必須以“;”開始。注釋的長度不限,當(dāng)一行不夠時(shí),可以換行后接著書寫,但是換行時(shí)應(yīng)以分號“;”開始。,1、指令格式,一、單片機(jī)的指令系統(tǒng)概述,為了方便后面指令系統(tǒng)的學(xué)習(xí)和記憶,我們需要對51單片機(jī)指令系統(tǒng)中的一
3、些常用符號進(jìn)行了解。常用符號的說明如下:(1)#data:8位立即數(shù);(2)#data16:16位立即數(shù);(3)Rn:工作寄存器,R0~R7,n為0~7;(4)Ri:工作寄存器,0或1,i=0或1;(5)@Ri:寄存器Ri間接尋址8位存儲(chǔ)單元00H~FFH;(6)direct:8位直接尋址,可以是特殊功能寄存器SFR的80H~FFH或內(nèi)部存儲(chǔ)單元00H~7FH;(7)addr11:11位目的地址。用于AJMP和ACALL指
4、令,均在2KB地址內(nèi)轉(zhuǎn)移或調(diào)用;,2、符號說明,一、單片機(jī)的指令系統(tǒng)概述,(8)addr16:16位目的地址。用于LJMP和LCALL指令,可在64KB地址內(nèi)轉(zhuǎn)移或調(diào)用;(9)rel:帶符號的8位偏移地址,主要應(yīng)用于所有的條件轉(zhuǎn)移指令和SJMP。其范圍是相對于下一條指令的第一字節(jié)地址-128 ~ +127字節(jié);(10)bit:位地址。片內(nèi)RAM中的可尋址位和專用寄存器中的可尋址位;(11)DPTR:數(shù)據(jù)指針,可用于16位的地址寄存
5、器;(12)@:間接寄存器或者是基址寄存器的前綴。如:@DPTR,@Ri,@A+PC,@A+DPTR;(13)A:累加器ACC;(14)B:通用寄存器,常用于乘法MUL和除法DIV的指令;(15)Cy:進(jìn)位標(biāo)志位或者布爾處理器中的累加器。,2、符號說明,二、單片機(jī)的尋址方式,立即尋址就是直接將需要訪問的數(shù)據(jù)在指令中給出,這樣的尋址方式就是立即尋址。立即尋址的方式為: MOV A #dataH就是一條立即尋址方式的傳送指令
6、,通常我們把出現(xiàn)在指令中的操作數(shù)data稱之為立即數(shù)。假如立即數(shù)是0F4H,則指令為:MOV A #4BH 指令功能是把數(shù)據(jù)4BH傳送到累加器A中。值得注意的一點(diǎn)是:在立即數(shù)尋址中立即數(shù)前面必須要加上一個(gè)“?!碧?。,1、立即尋址,二、單片機(jī)的尋址方式,直接尋址就是直接在指令中指定操作數(shù)的地址,-比如:MOV A,3AH 其功能就是將地址為3AH的存儲(chǔ)單元中數(shù)據(jù)取出來傳送給累加器A。這里的操作數(shù)就是直接通過數(shù)據(jù)存儲(chǔ)器
7、的地址3AH來指定的。直接尋址方式的尋址范圍僅限于內(nèi)部數(shù)據(jù)存儲(chǔ)器。對于內(nèi)部數(shù)據(jù)存儲(chǔ)器的低128個(gè)字節(jié)可以直接通過地址的方式來指定,而對于高128個(gè)字節(jié)除了可以通過地址的方式來指定外還可以通過特殊功能寄存器的寄存器符號給出。,2、直接尋址,二、單片機(jī)的尋址方式,寄存器尋址方式就是操作數(shù)存儲(chǔ)在寄存器中,指定寄存器就得到了操作數(shù),例如:MOV A,R0其功能是將寄存器R0中的數(shù)據(jù)傳送到累加器A中,這樣通過直接指定寄存器的方式進(jìn)行尋址即
8、為寄存器尋址。可以采用這種方式進(jìn)行尋址分寄存器包括通用寄存器和部分專用寄存器,比如工作寄存器R0-~R7、累加器ACC、通用寄存器B 、數(shù)據(jù)指針DPTR、位累加器Cy。,3、寄存器尋址,二、單片機(jī)的尋址方式,寄存器間接尋址就是通過寄存器指定數(shù)據(jù)存儲(chǔ)單元的地址,寄存器中存儲(chǔ)的是地址。采用用寄存器間接尋址方式時(shí)應(yīng)在寄存器前加上@符號。比如:MOVE A,@R0它的功能就是將R0中所存儲(chǔ)的地址所指向的存儲(chǔ)單元中的數(shù)據(jù)取出來傳送到累加器中
9、去。對于這種寄存器間接尋址,用來存儲(chǔ)地址的寄存器只能為R0或R1或DPTR。其中R0和R1用來訪問片內(nèi)數(shù)據(jù)存儲(chǔ)器的低128字節(jié)和片外數(shù)據(jù)存儲(chǔ)器的低256字節(jié),DPTR用來訪問片外數(shù)據(jù)存儲(chǔ)器。比如:MOVX A ,@DPTR它的功能是將外RAM DPTR所指存儲(chǔ)單元中的數(shù)據(jù)傳送至累加器A中。,4、間接尋址,二、單片機(jī)的尋址方式,變址尋址是以某個(gè)寄存器的內(nèi)容為基礎(chǔ),然后在這個(gè)基礎(chǔ)上再加上地址偏移量,形成真正的操作數(shù)地址,需要特別指出的是用
10、來作為基礎(chǔ)的寄存器可以是PC或是DPTR,地址偏移量存儲(chǔ)在累加器A中比如:MOV A,@A+DPTRMOV A,@A+PCJMP @A+DPTR前2條意思就是分別將DPTR、PC內(nèi)存儲(chǔ)的地址和累加器A里面的偏移量相加最后根據(jù)得到的地址來查找相應(yīng)的存儲(chǔ)單元。最后一條是無條件轉(zhuǎn)移指令。,5、變址尋址,二、單片機(jī)的尋址方式,相對尋址主要是針對跳轉(zhuǎn)指令而言的。對于跳轉(zhuǎn)指令,跳轉(zhuǎn)去的目標(biāo)指令的地址是通過正在執(zhí)行的指令地址來確定的,
11、一般是采用正在執(zhí)行的指令地址加上偏移量的方式。即:轉(zhuǎn)移目的地址=當(dāng)前PC值+轉(zhuǎn)移指令字節(jié)數(shù)+相對偏移量rel我們后面所講的條件轉(zhuǎn)移指令都是相對尋址方式,如:JZ rel;若(A)= 0,則PC←(PC)+ 2 + rel ;若(A)≠0,則PC←(PC)+ 2 JNZ rel;若(A)≠0,則PC←(PC)+ 2 + rel ;若(A)= 0,則PC←(PC)+ 2由于這2條指
12、令都是二字節(jié)指令,所以轉(zhuǎn)移指令字節(jié)數(shù)為2。偏移量可以是正也可以是負(fù),偏移量是采用有符號數(shù)的存儲(chǔ)形式即補(bǔ)碼的形式來存儲(chǔ)的,所能表示的范圍是-128~+128。,6、相對尋址,二、單片機(jī)的尋址方式,位尋址方式是指將要訪問的數(shù)據(jù)是一個(gè)單獨(dú)的位,指定位數(shù)據(jù)的方式有:通過位地址、通過字節(jié)地址加點(diǎn)及位數(shù)、通過寄存器名加點(diǎn)及位數(shù)以及通過位的名稱等方式。例如:MOV C,07H 這條指令的功能是把07H位的狀態(tài)送進(jìn)進(jìn)位位C。位尋址的范圍是有
13、限制的,下面將講述位尋址的尋址范圍,7、位尋址,二、單片機(jī)的尋址方式,1.內(nèi)部RAM中的位尋址區(qū)單元地址為20H~2FH,共16個(gè)單元128位,位地址是00H~7FH。對這個(gè)128個(gè)位的尋址使用直接位地址表示。位尋址區(qū)中的位有兩種表示方法,一種是位地址;另一種是單元地址加位。2.專用寄存器的可尋址位可供位尋址的專用寄存器共有11個(gè),實(shí)有尋址位83位。對這些尋址位在指令中有如下4中表示方法:●直接使用位地址。例如PSW寄存器位5
14、地址為0D5H?!裎幻Q表示方法。例如PSW寄存器位5是F0標(biāo)志位,則可使用F0表示該位?!駟卧刂芳游粩?shù)的表示方法。例如0D0H單元(即PSW寄存器)位5,表示為0D0H.5?!駥S眉拇嫫鞣柤游粩?shù)的表示方法。例如PSW寄存器的位5,表示為PSW.5。,7、位尋址,二、單片機(jī)的尋址方式,尋址方式可以做如下小結(jié)。對于片內(nèi)程序存儲(chǔ)器只能使用變址尋址方式,或者反過來說,變址尋址是一種專門用于程序存儲(chǔ)器的尋址方式。,8、尋址方式
15、總匯,三、單片機(jī)的指令說明,1.內(nèi)部RAM中數(shù)據(jù)傳送指令單片機(jī)內(nèi)部的數(shù)據(jù)傳送指令運(yùn)用頻率最高。寄存器、累加器、RAM單元及專用寄存器之間的數(shù)據(jù)可相互傳送。這類指令使用助記符MOV。(1)以累加器A為目的字節(jié)的傳送指令(4條)MOV A,@Ri;(Ri)→A,i=0、1MOV A,Rn;Rn→A,n=0~7 MOV A,#data;data→A MOV A,direct;(direct)→A這
16、組指令的功能是將源操作數(shù)所指定的內(nèi)容送入累加器A。源操作數(shù)可以采用寄存器尋址、直接尋址、寄存器間接尋址和立即尋址4種方式。,1、數(shù)據(jù)傳送類指令,三、單片機(jī)的指令說明,(2)以工作寄存器Rn為目的字節(jié)的傳送指令(3條)MOV R,A;A→Rn,n=0~7MOV Rn,direct;(direct)→Rn,n=0~7MOV Rn,#data ;data→Rn,n=0~7這組指令的功能是把源操作數(shù)所指定的內(nèi)容送
17、到當(dāng)前工作寄存器組R0~R7中的某個(gè)寄存器中。源操作數(shù)有寄存器尋址、直接尋址、立即尋址3種方式。例如下面三條指令:MOV R0,A ;把累加器A的內(nèi)容傳送給R0MOV R2,80H ;把80H單元的內(nèi)容傳給R2MOV R6,#60H ;把立即數(shù)60H傳給R6,1、數(shù)據(jù)傳送類指令,三、單片機(jī)的指令說明,(3)以直接地址為目的字節(jié)的傳送指令MOV direct,A ;A→(dir
18、ect)MOV direct,Rn ;Rn→(direct),n=0~7MOV direct,@Ri ;(Ri)→(direct),i=0、1MOV direct1,direct2;(direct2)→(direct1)MOV direct,#data;data→(direct)這組指令的功能是把源操作數(shù)所指定的內(nèi)容送入由直接地址direct所指出的片內(nèi)存儲(chǔ)單元中。源操作數(shù)有寄存器尋址、直接尋址、寄存器
19、間接尋址、立即尋址等方式。例如下面五條指令:MOV 3FH,#3FH ;把立即數(shù)3FH傳送給內(nèi)部RAM的3FH單元MOV 3FH,A ;把累加器A中的內(nèi)容傳送給內(nèi)部RAM的3FH單元MOV 3FH,R0 ;把寄存器R0中的內(nèi)容傳送給內(nèi)部RAM的3FH單元,1、數(shù)據(jù)傳送類指令,三、單片機(jī)的指令說明,(4)以寄存器間址為目的字節(jié)的傳送指令(3條)MOV @Ri,A ;A→(Ri)
20、,i=0、1MOV @Ri,direct;(direct)→(Ri),i=0、1MOV @Ri,#data;data→(Ri),i=0、1這組指令的功能是把源操作數(shù)所指定的內(nèi)容送入以R0或R1為地址指針的片內(nèi)存儲(chǔ)單元中。源操作數(shù)有寄存器尋址、直接尋址和立即尋址3種方式。與上一組指令功能類似,不再舉例。(5)16位數(shù)據(jù)傳送指令(1條)MOV DPTR,#data16;data16→DPTR這是唯一的16位立即數(shù)
21、傳送指令。其功能是把16位常數(shù)送入DPTR中。,1、數(shù)據(jù)傳送類指令,三、單片機(jī)的指令說明,2.外部RAM數(shù)據(jù)傳送指令累加器A與片外數(shù)據(jù)存儲(chǔ)器之間的數(shù)據(jù)傳送是通過P0口和P2口進(jìn)行的。片外數(shù)據(jù)存儲(chǔ)器的地址總線低8位和高8位分別由P0口和P2口送出,數(shù)據(jù)總線也是通過P0口與低8位地址總線分時(shí)傳送。外部RAM中數(shù)據(jù)傳送均是通過間接尋址的方式來實(shí)現(xiàn)的,使用操作碼助記符MOVX,共有四條指令:MOVX A,@DPTR; A←(DPTR
22、)MOVX A,@Ri; A←(Ri)MOVX @DPTR,A; (DPTR)←AMOVX @Ri,A; (Ri)←A前兩條指令為外部數(shù)據(jù)存儲(chǔ)器讀指令,后兩條指令為外部數(shù)據(jù)存儲(chǔ)器寫指令。這四條指令共同特點(diǎn)都要經(jīng)過累加器A,外RAM的低8位地址均由P0傳送,高8位地址均由P2傳送,其中8位數(shù)據(jù)也需P0傳送。,1、數(shù)據(jù)傳送類指令,三、單片機(jī)的指令說明,3.查表指令51系列單片機(jī)的程序存儲(chǔ)器除了存放程序外,還可
23、存放一些常數(shù),被稱為表格。在單片機(jī)指令系統(tǒng)提供了兩條訪問程序存儲(chǔ)器的指令,稱為查表指令,該指令使用助記符MOVC,只能通過累加器A來實(shí)現(xiàn)。共兩條指令:MOVC A,@A+PC;PC←(PC)+1,A←(A)+PCMOVC A,@A+DPTR;A←(A+DPTR)前一條指令由PC作為基址寄存器,它雖然提供16位地址,但其基址值是固定的,A+PC中的PC是程序計(jì)數(shù)器的當(dāng)前內(nèi)容(查表指令的地址加1),所以它的查表范圍是查表指令
24、后256B的地址空間。后一條指令采用DPTR作為基址寄存器,它的尋址范圍為整個(gè)程序存儲(chǔ)器的64KB空間,所以表格可以放在程序存儲(chǔ)器的任何位置。缺點(diǎn)是若DPTR已有它用,在上式表首地址之前必須保護(hù)現(xiàn)場,執(zhí)行完查表后再執(zhí)行恢復(fù)。,1、數(shù)據(jù)傳送類指令,三、單片機(jī)的指令說明,數(shù)據(jù)交換指令數(shù)據(jù)交換主要用在累加器和其它內(nèi)部RAM中的數(shù)據(jù)交換,數(shù)據(jù)交換指令分為三類: (1)整字節(jié)交換指令 XCH A,Rn;A←→Rn XCH
25、 A,@Ri;A←→(Ri) XCH A,direct;A←→(direct) (2)半字節(jié)交換指令:XCHD A,@Ri ;A3~0←→(Ri)3~0。SWAP A;A7~4←→A3~0,1、數(shù)據(jù)傳送類指令,三、單片機(jī)的指令說明,堆棧操作指令堆棧操作通常用于臨時(shí)保護(hù)數(shù)據(jù)及子程序調(diào)用時(shí)保護(hù)現(xiàn)場/恢復(fù)現(xiàn)場。共有兩條指令。PUSH direct;SP←SP+1,(SP)←(dire
26、ct)POP direct ;(direct)←(SP),SP←SP-1PUSH為壓棧指令,將指定的直接尋址單元的內(nèi)容壓入堆棧。先將堆棧指針SP的內(nèi)容+1,指向棧頂?shù)囊粋€(gè)單元,然后把指令指定的直接尋址單元內(nèi)容送入該單元。POP為出棧指令,它是將當(dāng)前棧指針SP所指示的單元內(nèi)容彈出到指定的內(nèi)RAM單元中,然后再將SP減1。以上指令結(jié)果不影響程序狀態(tài)字寄存器PSW標(biāo)志。,1、數(shù)據(jù)傳送類指令,三、單片機(jī)的指令說明,1.加法指
27、令加法指令使用助記符ADD,運(yùn)算時(shí)不帶進(jìn)位位。共有4條:ADD A,#data ;A←A+dataADD A,direct ;A←A+(direct)ADD?。?,@Ri ;A←A+(Ri)ADD A,Rn ;A←A+Rn這組指令的功能是把源操作數(shù)所指出的內(nèi)容與累加器A的內(nèi)容相加,執(zhí)行結(jié)果存入A中。該運(yùn)算會(huì)影響程序狀態(tài)字PSW中的CY、AC、OV。如果位7有進(jìn)位,則進(jìn)位位CY置“1”,
28、否則清“0”;如果位3有進(jìn)位,則半進(jìn)位位AC置“1”,否則清“0”。若看做兩個(gè)帶符號數(shù)相加,還要判斷溢出位OV。若OV為“1”,表示和數(shù)溢出。例如,執(zhí)行A=0C3H,執(zhí)行指令A(yù)DD A,#0AAH,則結(jié)果A=6DH,CY=1,OV=1,AC=0,P=1。,2、算術(shù)運(yùn)算類指令,三、單片機(jī)的指令說明,2.帶進(jìn)位加法指令A(yù)DDC帶進(jìn)位的加法指令使用助記符ADDC,共有4條:ADDC A,#data;A←A+data+CYADDC
29、 A,direct ;A←A+(direct)+CYADDC A,@Ri ;A←A+(Ri)+CYADDC A,Rn ;A←A+Rn+CY這組指令的功能與上一組加法指令A(yù)DD相似,唯一不同的是計(jì)算加法時(shí)同時(shí)還要加上CY中的值。運(yùn)算結(jié)果對PSW各位的影響同上述加法指令。帶進(jìn)位加法指令多用于多字節(jié)數(shù)的加法運(yùn)算,低位字節(jié)相加時(shí)可能產(chǎn)生進(jìn)位。因此,高位字節(jié)運(yùn)算時(shí),必須使用帶進(jìn)位的加法運(yùn)算。例如,設(shè)R0=
30、55H,A=OAAH,Cy=1,執(zhí)行指令A(yù)DDC A ,R0后,結(jié)果為A=00H,Cy=0,AC=0,OV=0, P=0。,2、算術(shù)運(yùn)算類指令,三、單片機(jī)的指令說明,3.帶借位減法指令帶借位減法指令使用助記符SUBB,共有4條:SUBB A ,#data;A←A-data-CYSUBB A ,Rn;A←A-Rn-CYSUBB A ,direct;A←A-(direct)-CYSUBB
31、A ,@Ri;A←A-(Ri)-CY這組指令的功能是將累加器A中的數(shù)減去源操作數(shù)所指出的數(shù)和進(jìn)位位CY,其差值存放在累加器A中。減法運(yùn)算結(jié)果對程序狀態(tài)標(biāo)志寄存器PSW中的影響如下:●減法運(yùn)算的最高位有借位時(shí),進(jìn)位位Cy置位為1,否則Cy為0?!駵p法運(yùn)算時(shí)低4位向高4位有借位時(shí),輔助進(jìn)位位AC置位為1,否則AC為0?!駵p法運(yùn)算過程中,位6和位7同時(shí)借位時(shí)溢出標(biāo)志位OV為1,否則OV為0。,2、算術(shù)運(yùn)算類指令,三、單片機(jī)的
32、指令說明,●運(yùn)算結(jié)果中“1”的個(gè)數(shù)為奇數(shù)時(shí)(注意:不計(jì)借CY中的1),奇偶校驗(yàn)位P置1,否則P為0。由于減法只有帶借位減法一條指令,所以在單字節(jié)相減時(shí),須先清進(jìn)位位CY。減法指令執(zhí)行過程與加法類似,需強(qiáng)調(diào)的一點(diǎn)是,減法運(yùn)算在計(jì)算機(jī)中實(shí)際上是變成補(bǔ)碼相加。例 設(shè)A=D9H,R0=87H,執(zhí)行指令:SUBB A,R0則結(jié)果為:A=52H,CY=0,AC=0,P=1,OV=0。,2、算術(shù)運(yùn)算類指令,三、單片機(jī)的指令說明,加1指令
33、加1指令使用助記符INC,共有5條指令:INC A ;A←A+1INC Rn ;Rn←Rn+1INC @Ri ;(Ri)←(Ri)+1INC direct ;(direct)+1INC DPTR ; DPTR←DPTR+1這組指令的功能是將操作數(shù)所指定單元的內(nèi)容加1。其操作除第一條指令影響奇偶標(biāo)志位外,其余指令均
34、不影響PSW。第4條指令,若直接地址是I/O端口,則其功能是修改輸出口的內(nèi)容。指令執(zhí)行過程中,首先讀入端口的內(nèi)容,然后在CPU中加1,繼而輸出到端口。,2、算術(shù)運(yùn)算類指令,三、單片機(jī)的指令說明,5.減1指令減1指令使用助記符DEC,對于DPTR只能使用加1指令,不能使用減1指令。因此減1指令比加1指令少一條,即4條:DEC A ;A←A-1DEC Rn ;Rn←Rn-1
35、DEC direct ;(direct)←(direct)-1DEC @Ri ;(Ri)←(Ri)-1該指令是將指定變量減1,結(jié)果仍存在原指定單元。這類指令操作除第一條影響奇偶標(biāo)志值外,其余操作均不影響PSW標(biāo)志。其他情況與加1指令類似。,2、算術(shù)運(yùn)算類指令,三、單片機(jī)的指令說明,6.乘法指令乘法指令使用助記符MUL,操作數(shù)只能是累加器A和寄存器B,格式如下:MUL AB
36、;AB←A*B這條指令的功能是把累加器A和寄存器B中的8位無符號整數(shù)相乘,乘積為16位,積低8位存于A中,積高位存于B中。如果積大于255(0FFH),則OV 置1,否則清0,運(yùn)算結(jié)果總使進(jìn)位位CY清0。例如,設(shè)A=5BH,B=0ABH,執(zhí)行指令MUL AB 后,結(jié)果為:乘積3CC9H,A=0C9H,B=3CH,OV=1,CY=0。,2、算術(shù)運(yùn)算類指令,三、單片機(jī)的指令說明,7.除法指令除法指令使用助記符DIV,操作數(shù)只能是累加
37、器A和寄存器B,格式如下:DIV AB;A←A/B的商,B←余數(shù)這條指令的功能是把累加器A中的8位無符號整數(shù)除以寄存器B中8位無符號整數(shù),商放在A中,余數(shù)放在B中,標(biāo)志位CY和OV均清0。若除數(shù)(B)為00H,則執(zhí)行后果為不確定值,OV置1,在任何情況下,進(jìn)位位Cy清0。例如,設(shè)A=87H,B=0CH,執(zhí)行指令DIV AB后,結(jié)果為:A=0BH,B=03H,OV=0,CY=0。,2、算術(shù)運(yùn)算類指令,三、單片機(jī)的指令說
38、明,8.十進(jìn)制調(diào)整指令BCD碼是十位二進(jìn)制碼, 也就是將十進(jìn)制的數(shù)字轉(zhuǎn)化為二進(jìn)制。十進(jìn)制數(shù)0~9之間的數(shù)字可以用BCD碼來表示,然而,單片機(jī)在進(jìn)行運(yùn)算時(shí),是按照二進(jìn)制規(guī)則進(jìn)行的,對于4位二進(jìn)制數(shù)是按逢16進(jìn)位的,不符合十進(jìn)制的要求,可能導(dǎo)致錯(cuò)誤的結(jié)果,因此需要用十進(jìn)制調(diào)整指令。十進(jìn)制調(diào)整指令使用助記符DA,操作數(shù)只能是累加器A。其格式如下: DA A這條指令是在進(jìn)行BCD碼加法運(yùn)算時(shí),跟在ADD或ADDC指令之后,用于對
39、BCD碼的加法運(yùn)算結(jié)果自動(dòng)進(jìn)行修正,使其仍為BCD碼表達(dá)形式。,2、算術(shù)運(yùn)算類指令,三、單片機(jī)的指令說明,1.“與”指令“與”指令使用助記符ANL,共有6條,格式如下: ANL A,#data;A←A&data ANL A,Rn;A←A&Rn ANL A,@Ri ;A←A&(Ri) ANL A,direct ;A←A&(direct)
40、 ANL direct,#data;A←(direct)&data ANL direct,A;A←(direct)&A這組指令的前4條將累加器A中內(nèi)容與源操作數(shù)所指內(nèi)容進(jìn)行按位與運(yùn)算,并將結(jié)果送入累加器A中,且影響奇偶標(biāo)志位;后2條將直接地址單元中內(nèi)容與操作數(shù)所指內(nèi)容進(jìn)行按位與運(yùn)算,將結(jié)果送入直接尋址地址單元中。例如,設(shè)A=00001101B,(40H)=10001111B,當(dāng)執(zhí)行指令A(yù)NL A,
41、40H后, A=00001101B=0DH。,3、邏輯運(yùn)算類指令,三、單片機(jī)的指令說明,2.“或”指令“或”指令使用助記符ORL,共有6條,格式如下:ORL A,# data;A←A|dataORL A,Rn;A←A|RnORL A,@Ri;A←A |(Ri)ORL A,direct; A←A|(direct)ORL direct,#data;(direct) ←(direc
42、t)|data ORL direct,A;( direct) ← (direct)|A這組指令的功能是將兩個(gè)指定的操作數(shù)按位邏輯“或”。其中前 4條指令的操作結(jié)果存放在累加器A中,執(zhí)行后影響奇偶標(biāo)志位P;后2條指令的操作結(jié)果存放在直接尋址的地址單元中。例如,設(shè)A=1AH,R0=45H,(45H)=39H,當(dāng)執(zhí)行指令“ORL A,@R0”,則結(jié)果為:A=3BH,(45H)=39H,P=0。,3、邏輯運(yùn)算類指令,三、單片機(jī)的
43、指令說明,3.“異或”指令“異或”指令使用助記符XRL,共有6條,其操作方式與“與、或”指令一樣。格式如下: XRL A,# data;A←A data XRL A,Rn;A←A Rn XRL A,@Ri;A←A (Ri)XRL A,direct,# data;A←A (direct)XRL direct,#data;(direct) ←(direct) da
44、taXRL direct,A;(direct) ←(direct) A這組指令是將2個(gè)指定的操作數(shù)按位進(jìn)行異或,前4條指令的結(jié)果存放在累加器A中,后2條指令的操作結(jié)果存放在直接地址單元中。其原則是相同為0,不同為1。異或指令也常用于修改某工作寄存器、某片內(nèi)RAM單元、某直接尋址字節(jié)(包括P0、P1、P2、P3端口)或累加器本身的內(nèi)容。例如,設(shè)P1=01111001B,執(zhí)行指令XRL P1,# 00110001B,則結(jié)果
45、為 P1=01001000B。,3、邏輯運(yùn)算類指令,三、單片機(jī)的指令說明,4.循環(huán)移位指令循環(huán)移位指令的操作數(shù)只能是累加器A,共有4條指令: RL A ;循環(huán)左移 RR A ;循環(huán)右移 RLC A ;帶CY循環(huán)左右移 RRC A ;帶CY循環(huán)右移前兩條指令
46、的功能分別是將累加器A的內(nèi)容循環(huán)左移或右移一位,執(zhí)行后不影響PSW中各位;后兩條指令的功能分別是將累加器A的內(nèi)容與進(jìn)位位CY位一起循環(huán)左移或右移一位,執(zhí)行后影響PSW中的進(jìn)位位CY和奇偶狀態(tài)標(biāo)志位P。,3、邏輯運(yùn)算類指令,三、單片機(jī)的指令說明,5.取反指令取反指令使用助記符CPL,操作數(shù)只能是累加器A,格式如下: CPL A本指令的功能是將累加器A的內(nèi)容按位取反。例如,設(shè)A=F0H,執(zhí)行指令CPL A,則結(jié)果為A=0FH。
47、6.清零指令清零指令使用助記符CLR,格式為: CLR A;A←0本指令的功能是將累加器A的內(nèi)容清“0”。,3、邏輯運(yùn)算類指令,三、單片機(jī)的指令說明,1.無條件轉(zhuǎn)移指令無條件轉(zhuǎn)移指令有4條: AJMP addr11 ;PC←PC+2,PC10~0←addr11 LJMP addr16 ;PC←addr16 SJMP rel ;PC←PC+2 +rel JMP @A+DP
48、TR ;PC←A+DPTR這類指令是指當(dāng)程序執(zhí)行完該指令時(shí),程序就無條件件地轉(zhuǎn)到指令所提供的地址上去。,4、控制轉(zhuǎn)移類指令,三、單片機(jī)的指令說明,2.條件轉(zhuǎn)移指令條件轉(zhuǎn)移指令有7條。它們在滿足條件的情況下才進(jìn)行程序轉(zhuǎn)移,條件若不滿足,仍按原程序繼續(xù)執(zhí)行,故稱為條件轉(zhuǎn)移指令或者稱判跳指令。 JZ rel;若(A)= 0,則PC←(PC)+ 2 + rel ;若(A)≠0,則PC←(PC)+ 2 J
49、NZ rel;若(A)≠0,則PC←(PC)+ 2 + rel ;若(A)= 0,則PC←(PC)+ 2 CJNE A,direct,rel ;PC←PC+3,若A=(direct),按順序執(zhí)行,且Cy=0;若A(direct),則Cy=0,切PC←PC+rel,轉(zhuǎn)移 CJNE A,#data,rel;PC←PC+3,若A=data,按順序執(zhí)行,且Cy=0;若Adata ,則
50、Cy=0且PC←PC+rel,轉(zhuǎn)移,4、控制轉(zhuǎn)移類指令,三、單片機(jī)的指令說明,CJNE Rn,#data,rel;PC←PC+3,若Rn=data,按順序執(zhí)行,且Cy=0;若Rndata,則Cy=0且PC←PC+rel,轉(zhuǎn)移 CJNE @Ri,#data,rel;PC←PC+3,若(Ri)=data,按順序執(zhí)行,且Cy=0;若(Ri)data,則Cy=0且PC←PC+rel,轉(zhuǎn)移 DJNZ Rn,rel
51、;PC←PC+2,Rn←Rn-1,若Rn=0,按順序執(zhí)行;若Rn不等于0,則PC←PC+rel,轉(zhuǎn)移。 DJNZ direct,rel;PC←PC+3,(direct)← (direct)-1,若(direct)=0按順序執(zhí)行;若(direct)≠0,則PC←PC+rel ,轉(zhuǎn)移,4、控制轉(zhuǎn)移類指令,三、單片機(jī)的指令說明,3.空操作指令空操作指令為:NOP這是一條單字節(jié)指令,它控制CPU不進(jìn)行任何操作而轉(zhuǎn)到下
52、一條指令。這條指令用于產(chǎn)生一個(gè)機(jī)器周期的延遲,如果反復(fù)執(zhí)行這一指令,則機(jī)器處于等待狀態(tài)。因此該指令通常用于程序的等待或時(shí)間延遲。,4、控制轉(zhuǎn)移類指令,三、單片機(jī)的指令說明,4.調(diào)用子程序及返回指令在實(shí)際應(yīng)用中,有時(shí)需要多次執(zhí)行某段子程序??梢允褂米映绦蛘{(diào)用指令來實(shí)現(xiàn)此功能。子程序執(zhí)行完畢需自動(dòng)返回到原斷點(diǎn)地址繼續(xù)執(zhí)行,在子程序結(jié)尾放一條返回指令,即可實(shí)現(xiàn)此功能。調(diào)用和返回構(gòu)成了子程序調(diào)用的完整過程。(1)子程序調(diào)用指令子程序調(diào)
53、用指令有2條,格式如下:LCALL addr16;(PC)+3→PC,(SP)+1→SP,(PC)0~7→(SP);(SP)+1→SP,(PC)8~15→(SP),addr16→PCACALL addr11;(PC)+2→PC,(SP)+1→SP,(PC)0~7→(SP) ;(SP)=1→SP,(PC)8~15→(SP),addr0~11→PC0~11,4、控制轉(zhuǎn)移類指令,三、單片機(jī)的指令說明,(2)
54、返回指令返回指令有2條:RET ;子程序返回,PC15~8 ←(SP)– 1,SP←(SP)–1;PC7~0 ←(SP)– 1,SP←(SP)–1RETI ;中斷返回子程序返回指令執(zhí)行子程序返回功能,從堆棧中自動(dòng)取出斷點(diǎn)地址送給程序計(jì)數(shù)器PC,使程序在主程序斷點(diǎn)處繼續(xù)向下執(zhí)行。例如(SP) = 62H,(62H) = 07H,(61H) = 30H, 執(zhí)行指令RET,結(jié)果為:(SP) = 60H,(PC) =
55、0730H,CPU從0730H開始執(zhí)行程序。中斷服務(wù)子程序返回指令,除具有上述子程序返回指令所具有的全部功能之外,還有清除中斷響應(yīng)時(shí)被置位的優(yōu)先級狀態(tài)、開放較低級中斷和恢復(fù)中斷邏輯等功能。,4、控制轉(zhuǎn)移類指令,三、單片機(jī)的指令說明,1.位傳送指令位傳送指令有互逆的2條,可實(shí)現(xiàn)進(jìn)位位C與某直接尋址位bit間內(nèi)容的傳送。格式如下:MOV C,bit;CY←bitMOV bit,C;bit←Cy這兩條指令均為雙字節(jié),第一
56、條指令的功能是將某指定位的內(nèi)容送入位累加器C中,不影響其他標(biāo)志。第二條指令的功能是將C的內(nèi)容傳送到指定位,再把8位內(nèi)容傳送到端口的鎖存器。,5、位操作指令,三、單片機(jī)的指令說明,2.位修正指令位修正指令共有6條,分為位清0指令、位置1指令、位取反指令。CLR C;C←0CLR bit ;bit←0SETB C ;C←1SETB bit;bit←1CPL C;
57、C← CPL bit;bit← 第1、2條為清零指令,第3、4條為位置1指令,后兩條為位取反指令。這些指令的執(zhí)行結(jié)果不影響其他標(biāo)志。,5、位操作指令,三、單片機(jī)的指令說明,3.位邏輯運(yùn)算指令位邏輯運(yùn)算指令分邏輯“與”和邏輯“或”共有4條指令。ANL C,bit;C←C &bitANL C, ;CY←(CY)&( )ORL C,bit ;C←C|bitORL
58、 C, ;C←C|( )這組指令的功能是對位累加器C的內(nèi)容及直接位地址的內(nèi)容做邏輯“與”、邏輯“或”運(yùn)算,然后將運(yùn)算結(jié)果送回到C中。其中,前兩條表示邏輯“與”,后兩條則是邏輯“或”在位操作指令中,沒有位的異或運(yùn)算如需要時(shí)可由多條上述位操作指令實(shí)現(xiàn)。例如E、B、D代表位地址,進(jìn)行E、B內(nèi)容的異或操作,結(jié)果送D??砂垂剑篋 = E B = B + E 進(jìn)行異或運(yùn)算。,5、位操作指令,三、單片機(jī)的指令說明,4.位轉(zhuǎn)移指令位轉(zhuǎn)移指令
59、共有5條,說明如下:JC rel ;若CY=0,則PC←PC+rel,否則順序執(zhí)行JNCrel ;若CY≠0,則PC←PC+rel,否則順序執(zhí)行JB bit,rel ;若bit=1,則PC←PC+rel,否則順序執(zhí)行JNBbit,rel ;若bit=0,則PC←PC+rel,否則順序執(zhí)行JBCbit,rel;若 bit=1,則PC←PC+rel,(bit)
60、←0,否則順序執(zhí)行這組指令的功能是分別判斷位累加器C或直接尋址位是“1”還是“0”,條件符合則轉(zhuǎn)移,否則繼續(xù)執(zhí)行程序。前兩條指令是雙字節(jié),因此PC要加2;后3條指令是三字節(jié),PC要加3。,5、位操作指令,三、單片機(jī)的指令說明,1.起始匯編偽指令ORG這是一條程序匯編起始地址定位偽指令,用來規(guī)定目標(biāo)程序段或數(shù)據(jù)塊的起始地址,程序中可以多次使用。其格式如下:[標(biāo)號]:ORG 地址表達(dá)式地址表達(dá)式必須是16位的地址值,如“ORG 2
61、000H”表示這段程序從2000H開始。ORG定義空間地址由小到大,且不能重疊。如果空間地址有重疊,匯編將拒絕執(zhí)行,并給相應(yīng)的出錯(cuò)信息。例如: ORG 5000HSTART: ADD A,#20H如果不使用ORG指令,測匯編得到的目標(biāo)程序?qū)?000H開始。,6、單片機(jī)的偽指令,三、單片機(jī)的指令說明,2.結(jié)束偽指令END結(jié)束偽指令用于匯編源程序的末尾,表示程序已經(jīng)結(jié)束。匯編程序?qū)ND以后的指令不再
62、匯編。也就是說一個(gè)源程序中只能有一個(gè)END指令,而且必須放在整個(gè)程序段的最后。其格式如下:[標(biāo)號]:END 表達(dá)式如果源程序是主程序,則寫標(biāo)號,所寫標(biāo)號就是該主程序第一條指令的符號地址。如果源程序是一般子程序,則END偽指令不應(yīng)帶標(biāo)號。,6、單片機(jī)的偽指令,三、單片機(jī)的指令說明,3.賦值偽指令EQU賦值偽指令EQU也稱等值(Equate)偽指令,它的作用是將操作數(shù)段中的地址或數(shù)據(jù)賦給一個(gè)字符名稱,賦值后該字符名稱就可以代替程序
63、的地址、數(shù)據(jù)地址或立即數(shù)。其格式如下:字符名稱 EQU 表達(dá)式字符名稱必須是以字母開頭的字母數(shù)字串。表達(dá)式可以是8位或16位二進(jìn)制數(shù)值。需注意的是在同一程序中,用EQU偽指令在賦值后,其字符名稱的值在整個(gè)程序中不能再改變。例如:HUGH EQU R0 ;HUGH= R0ADD A,HUGH ;A ← HUGH+A本例中將PPB等值于匯編符號R0,在指令中HUGH可以代替R0來使用。,6、單片機(jī)的偽指
64、令,三、單片機(jī)的指令說明,4.定義數(shù)據(jù)偽指令DATA定義數(shù)據(jù)偽指令DATA 用于給一個(gè)8位內(nèi)部RAM單元起一個(gè)名字。其格式如下:[標(biāo)號]:字符名稱 DATA 表達(dá)式其中,標(biāo)號是可選項(xiàng),字符名稱必須是以字母開頭的字母數(shù)字串,它必須是先前未定義過的。同一單元地址可以有多個(gè)名字。例如:X DATA 30H ;X代表用戶數(shù)據(jù)存儲(chǔ)區(qū)的第1個(gè)字節(jié)而對應(yīng)于8位的外部RAM單元,有XDATA,用法與此類似。DATA與EQU指令既相
65、似又有區(qū)別:●EQU指令可以把一個(gè)匯編符號賦給一個(gè)字符名稱,而DATA指令不能;●EQU指令應(yīng)先定義后使用,而DATA指令先使用后定義;●DATA指令能將一個(gè)表達(dá)式的值賦予一個(gè)字符名稱;●DATA指令在程序中用來定義數(shù)據(jù)地址。,6、單片機(jī)的偽指令,三、單片機(jī)的指令說明,5.定義字節(jié)偽指令DB定義字節(jié)偽指令DB(Define Byte)可用來為匯編語言源程序在內(nèi)存的某個(gè)區(qū)域定義一個(gè)或一串字節(jié)。其格式如下:[標(biāo)號]:DB
66、 [項(xiàng)或項(xiàng)表]其中,標(biāo)號段為可選項(xiàng)。項(xiàng)或項(xiàng)表可以是一個(gè)8位二進(jìn)制數(shù)或用逗號分開的字符串。匯編程序把DB指令能把項(xiàng)或項(xiàng)表所指字符的內(nèi)容(數(shù)據(jù)或ASCII碼)依次存入從標(biāo)號開始的存儲(chǔ)器單元。例如: ORG 3000H MATH:DB 73,79,61,90,68,93,99,95 ENGLISH:DB 82,90,64,80,82,96,90,99其中偽指令ORG 1000H指明了標(biāo)號FIRST的地址1000H,
67、偽指令DB定義了3000H~3007H單元的內(nèi)容應(yīng)依次為73,79,61,90,68,93,99,95。標(biāo)號SECOND 因與前面8個(gè)字節(jié)緊靠,所以它的地址順次應(yīng)為1008H,而第二條DB指令則定義了3008H~300FH單元的內(nèi)容依次為82,90,64,80,82,96,90,99。,6、單片機(jī)的偽指令,三、單片機(jī)的指令說明,6.定義字偽指令DW定義字偽指令DW用來為匯編語言源程序在內(nèi)存的某區(qū)域定義16位數(shù)據(jù)字。其格式如下:[標(biāo)號
68、]: DW 項(xiàng)或項(xiàng)表該偽指令功能與DB偽指令類似,是給數(shù)據(jù)表中的數(shù)據(jù)分配存儲(chǔ)單元。所不同的是DB偽指令定義的數(shù)據(jù)為字節(jié),而Dw偽指令定義的數(shù)據(jù)為字,即兩個(gè)字節(jié)。對于一個(gè)字?jǐn)?shù)據(jù)占用兩個(gè)連續(xù)的存儲(chǔ)單元,先將高8位數(shù)據(jù)存入低地址單元,后將低8位數(shù)據(jù)存入高地址單元。,6、單片機(jī)的偽指令,三、單片機(jī)的指令說明,7.定義存儲(chǔ)區(qū)偽指令DS定義存儲(chǔ)區(qū)偽指令DS可用來從指定地址開始,保留指定數(shù)目的字節(jié)單元作為存儲(chǔ)區(qū),供程序運(yùn)行使用。匯編時(shí),對這些單
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機(jī)原理與c51程序設(shè)計(jì)--chap11
- 單片機(jī)原理與c51程序設(shè)計(jì)--chap07
- 單片機(jī)原理與c51語言程序設(shè)計(jì)與基礎(chǔ)教程課后習(xí)題答案
- 單片機(jī)原理與應(yīng)用及c51程序設(shè)計(jì)(第二版)課后答案
- c51單片機(jī)03數(shù)碼管
- c51單片機(jī)課程設(shè)計(jì)
- 單片機(jī)原理及應(yīng)用及c51程序設(shè)計(jì)第三章習(xí)題答案
- c51單片機(jī)課程設(shè)計(jì)
- c51單片機(jī)畢業(yè)設(shè)計(jì)
- c51單片機(jī)畢業(yè)設(shè)計(jì)
- 51單片機(jī)c語言程序設(shè)計(jì)源代碼
- C51單片機(jī)畢業(yè)設(shè)計(jì).doc
- C51單片機(jī)畢業(yè)設(shè)計(jì).doc
- 單片機(jī)c51的特點(diǎn)與使用
- 51單片機(jī)脈沖產(chǎn)生程序設(shè)計(jì)
- c51單片機(jī)實(shí)戰(zhàn)100例
- 基于c51單片機(jī)設(shè)計(jì)
- c51單片機(jī)課程設(shè)計(jì)定時(shí)鬧鐘
- 基于c51單片機(jī) 溫度計(jì)設(shè)計(jì)
- c51倒計(jì)時(shí)程序設(shè)計(jì)
評論
0/150
提交評論