單片機(jī)及接口技術(shù):第2章51系列單片機(jī)的指令系統(tǒng)_第1頁(yè)
單片機(jī)及接口技術(shù):第2章51系列單片機(jī)的指令系統(tǒng)_第2頁(yè)
單片機(jī)及接口技術(shù):第2章51系列單片機(jī)的指令系統(tǒng)_第3頁(yè)
單片機(jī)及接口技術(shù):第2章51系列單片機(jī)的指令系統(tǒng)_第4頁(yè)
單片機(jī)及接口技術(shù):第2章51系列單片機(jī)的指令系統(tǒng)_第5頁(yè)
已閱讀5頁(yè),還剩70頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、單片微型計(jì)算機(jī)與接口技術(shù)(第4版) 第2章 51系列單片機(jī)的指令系統(tǒng) 2.1尋址方式2.2數(shù)據(jù)傳送與交換指令2.3算術(shù)運(yùn)算和邏輯運(yùn)算指令2.4控制轉(zhuǎn)移指令2.5位操作指令學(xué)習(xí)內(nèi)容 51單片機(jī)指令可分為6個(gè)類型,其特點(diǎn):(1)指令執(zhí)行時(shí)間快(2)指令短(3)具有豐富的位操作類指令指令的格式: LOOP: MOV A, R0 ;將R0的內(nèi)容送A 標(biāo)號(hào) 操作符 目的操作數(shù), 源操作數(shù) ;注釋注:括號(hào)的內(nèi)容不是必須的 符號(hào)的約定意義: Rn:當(dāng)前工作寄存器組中的R0R7(n=0,1,7)Ri: 當(dāng)前工作寄存器組中的R0,R1 (i=0,1)dir: 8位直接字節(jié)地址(片內(nèi)RAM和SFR地址)#data

2、: 8位立即數(shù)#data16:16位立即數(shù)addr16:16位地址值addr11:11位地址值bit: 位地址rel: 相對(duì)偏移量( ): 表示存儲(chǔ)單元的內(nèi)容2.1 尋址方式 尋址方式:指令中提供(尋找)操作數(shù)的方式說明:針對(duì)源操作數(shù) (7種) 針對(duì)目的操作數(shù) (4種) 2.1 1 立即尋址(源) 指令中直接給出操作數(shù)該操作數(shù)稱為立即數(shù), 冠以”“號(hào)作前綴, 表示并非地址 MOV A, 80H MOV DPTR, 0DFFFH 目的操作數(shù)沒有立即尋址 2.1.2 直接尋址(源,目) 操作數(shù)直接以單元地址(8位)形式給出直接尋址方式可訪問 2 種存儲(chǔ)器空間: (1) 內(nèi)部RAM低 128 字節(jié)單

3、元(00H7FH) (2) SFR (用SFR寄存器名稱表示) 例: MOV A, 40H ; A(40H) 該指令的機(jī)器碼為E5H 40H MOV P0, #45H ; P045H P0地址為80H,機(jī)器碼為758045,P0為直接尋址 MOV 30H, 20H ; (30H)(20H) 機(jī)器碼為852030 (特殊) *MOV DPTR,2000H ?2.1.3.寄存器尋址(源,目) 操作數(shù)在通用寄存器中 (R0R7, A, B,DPTR) B僅在乘除法指令中為寄存器尋址,其他指令中為直接尋址A既可直接尋址(此時(shí)寫作ACC,為SFR),又可寄存器尋址 INC A 寄存器尋址 ,機(jī)器碼04H

4、 INC ACC 直接尋址,機(jī)器碼05E0H 其余的特殊功能寄存器一律為直接尋址例2-3 MUL AB ; A*BBA,A、B為寄存器尋址,機(jī)器碼A4MOV B, R0 ; R0B,R0為寄存器尋址,B為直接尋 址,機(jī)器碼為88F0,其中F0為B的字節(jié)地址 PUSH ACC ; A的內(nèi)容壓入堆棧,機(jī)器碼為C0E0,其 中E0為A的字節(jié)地址,此處A為直接尋址 ADD A, ACC ;A*2A,(ADD A,dir形式無ADD dir,A形式) 2.1.4. 寄存器間接尋址(二次尋址,與RAM有關(guān)) (源,目) 以寄存器中的內(nèi)容為地址,該地址中的內(nèi)容為操作數(shù) 1, 使用R0、R1及DPTR,前綴“

5、” 2, 存儲(chǔ)器空間包括 內(nèi)RAM (MOV指令) 外RAM (MOVX指令) 對(duì)于外RAM最大尋址可達(dá)64KB1),由P2提供高8位地址,由R0或R1提供低 8位地址 (高8位,低8位)2),由DPTR作寄存器間接尋址 (16位)區(qū)別:寄存器尋址:寄存器內(nèi)容為操作數(shù) 寄存器間接尋址:寄存器內(nèi)容為操作 數(shù)所在存儲(chǔ)單元地址例2-4 MOV R0, A ; A以R0內(nèi)容 為地址的內(nèi)部RAM片內(nèi)RAMR0A圖2-1 MOV R0, A MOVX A, R1 ; 外部RAM(地址為P2R1)的內(nèi)容A MOVX DPTR, A ; A以DPTR內(nèi)容為地址的外部RAM片外RAMR1AxxxxP2圖2-2

6、MOVX A, R1片外RAMDPTRAxx圖2-3 MOVX DPTR, Axx 2.1.5 變址尋址 (與ROM有關(guān),2條) (源)以DPTR或PC的內(nèi)容加上A的內(nèi)容之和作為操作數(shù)的地址1) 只有讀操作,無寫操作2) 指令采用MOVC,操作數(shù)A例2-5: MOVC A, A+DPTR ; A(A+DPTR) MOVC A, A+PC ;(A+PC) A注意:目的操作數(shù)無變址尋址(無MOVC A+DPTR, A ) 2.1.6. 相對(duì)尋址(修改PC 轉(zhuǎn)移) (源) 以當(dāng)前PC的內(nèi)容為基址, 加上指令中給定的偏移量作為轉(zhuǎn)移地址 如 SJMP 08H(機(jī)器碼80H,08H ) 指令執(zhí)行后,轉(zhuǎn)移到

7、地址為當(dāng)前PC08H處執(zhí)行程序 當(dāng)前PC:轉(zhuǎn)移指令緊相鄰的下一條指令的PC值(動(dòng)態(tài)) 1) 源地址(轉(zhuǎn)移指令所在地址) 即: 當(dāng)前PC值 = 源地址 + 轉(zhuǎn)移指令字節(jié)數(shù) 2) 偏移量rel是以補(bǔ)碼表示的單字節(jié)數(shù), 取值范圍 -128+127(即80H7FH), 負(fù)數(shù)表示從當(dāng)前地址向上轉(zhuǎn)移, 正數(shù)表示從當(dāng)前地址向下轉(zhuǎn)移 3)目的地址 = 當(dāng)前PC值 + rel2.1.7. 位尋址 (內(nèi)RAM , SFR)(源,目) 對(duì)位地址中的內(nèi)容作位操作 位操作:位傳送及邏輯操作 (無算術(shù)運(yùn)算) 例如: SETB PSW.3 ; (PSW.3)1位地址表示??jī)?nèi)RAM: 00H7FH (128位,直接位地址)

8、SFR: PSW.5 (符號(hào)位地址)例: MOV C,20H ;20H位內(nèi)容CY (位尋址) MOV A,20H ;內(nèi)RAM中20H單元內(nèi)容A(字節(jié)尋址) 位尋址?字節(jié)尋址?根據(jù)兩操作數(shù)類型一致的原則,由另一個(gè)操作數(shù)決定 指令對(duì)哪個(gè)存儲(chǔ)器空間進(jìn)行操作是由指令 操作碼和尋址方式確定的 源目2.2 數(shù)據(jù)傳送與交換指令2.2.1 傳送類指令 1. 傳送指令MOV(內(nèi)RAM,拷貝) 圖26示意了MOV的操作,圖中表示單向傳送,表示相互傳送,箭頭指向目的操作數(shù)dirRnRi#dataA圖26 MOV指令(1)以A為目的操作數(shù) Rn ;RnA dir ;(dir)A Ri ;(Ri) A #data ;#

9、dataAMOV A,例27 R1=20H,(20H)=55H,指令MOV A, R1 執(zhí)行后,A=55H。 (2) 以Rn為目的操作數(shù) A ; A Rn MOV Rn, dir ;(dir) Rn #data ;#data Rn例28 (40H)30H,指令MOV R7,40H執(zhí)行后,R7=30H。(3) 以DPTR為目的操作數(shù) MOV DPTR, #data16 ;#data16DPTR例: MOV DPTR, #2010H ;#2010HDPTR相當(dāng)于:MOV DPH, #20H MOV DPL, #10H以直接地址為目的操作數(shù) A ;A (dir) Rn ;Rn (dir) MOV d

10、ir, dir1 ;(dir1)(dir) Ri ;(Ri) (dir) #data ;#data(dir) 例210 R0 = 50H,(50H)=10H,指令MOV 35H,R0執(zhí)行后,(35H)10H。這一操作也可以用指令MOV 35H, 50H來完成。 (5)以間接地址為目的操作數(shù) A ;A (Ri) MOV Ri, dir ;(dir) (Ri) #data ; # data (Ri) 2. 非內(nèi)RAM和A之間的傳送A 外部數(shù)據(jù)存儲(chǔ)器程序存儲(chǔ)器 Ri , A DPTR , A A , Ri A , DPTRMOVXMOVCA , A+PCA , A+DPTRMOVXMOVC(1)訪問

11、外RAM指令 (讀/寫,4條)i) MOVX Ri, A ;A(P2 Ri )ii) MOVX DPTR, A ; A(DPTR ) iii) MOVX A, Ri ; (P2 Ri ) A iv) MOVX A, DPTR ;(DPTR) A這組指令:在A與外RAM單元或I/O口之間進(jìn)行數(shù)據(jù)傳送(2)訪問程序存儲(chǔ)器指令 (只讀不寫 2條) MOVC A, A+PC ;(A+PC) A MOVC A, A+DPTR ;(A+DPTR)A 例213 執(zhí)行下列程序后A=? (DB為字節(jié)定義偽指令) MOV A, #02H ;A=02 MOVC A, A+PC ;取完該指令, PC=M1,A+PC=

12、2+M1 M1: RET M2: DB 66H,77H,88H,99H 執(zhí)行MOVC指令后A=77H 例 : MOV A, R0 ;以R0的內(nèi)容為地址 ,把該地址中的內(nèi)容 送到 A中去 A (R0) MOV A, R0 ;將R0的內(nèi)容送到A去 A R0 MOV A, #20H ;A = 20H A的內(nèi)容為20H MOV A, 20H ;A = (20H) A的內(nèi)容為20H中的內(nèi)容 注意以上兩組指令的不同點(diǎn) 傳送類指令 MOV :內(nèi)RAM,SFR MOVX :外RAM,I/O口 MOVC :ROM(內(nèi),外) 3. 堆棧操作 (內(nèi)RAM ,SFR) PUSH dir ;入棧操作,SP+1SP,(d

13、ir)(SP) POP dir ;出棧操作,(SP)(dir),SP-1SP * 1) 堆棧在內(nèi)部RAM中 2) 先進(jìn)后出,字節(jié)操作 3) 初始化SP=07H 4) 直接尋址 例: 進(jìn)入中斷服務(wù)子程序時(shí), 把程序狀態(tài)寄存器PSW、 累加器A、數(shù)據(jù)指針DPTR進(jìn)棧保護(hù)。則程序段 MOV SP,#60H PUSH PSW PUSH ACC PUSH DPL PUSH DPH 執(zhí)行后, SP=? SP=64H2.2.2 交換指令 1.字節(jié)交換指令 XCH A , Rn ; A Rn XCH A , dir ; A (dir) XCH A , Ri ; A (Ri) 將A的內(nèi)容和源操作數(shù)內(nèi)容相互交換(

14、字節(jié))例 A=FFH ,R1=30H,(30H)=87H 執(zhí)行XCH A, R1 后 A=87H,(30H)=FFH, R1=?例:將片內(nèi)RAM 60H單元與61H單元的數(shù)據(jù)交換。 XCH 60H,61H 對(duì)嗎? 2. 低半字節(jié)交換 XCHD A, Ri ;A0-3 (Ri)0-33. A的高、低半字節(jié)交換 SWAP A ;A0-3 A4-7 思考:把內(nèi)RAM50H地址單元中的內(nèi)容與40H地址單元的內(nèi)容互換。 (可用多種方法:堆棧法,字節(jié)交換法,直接地址法等) PSW寄存器注意 1) 當(dāng)A中1的個(gè)數(shù)為奇數(shù),P=1,否則 P=0 2) MOV類,INC,DEC,邏輯運(yùn)算類不影響 CY,OV,AC

15、 3) 加減運(yùn)算影響 P,CY,OV,AC 乘除后 CY=0 乘積255OV=1 除數(shù)=0 OV=12.3 算術(shù)運(yùn)算和邏輯運(yùn)算指令2.3.1 對(duì)標(biāo)志位的影響2.3.2 以A為目的操作數(shù)的算術(shù)運(yùn)算和邏輯運(yùn)算指令 共24條指令加: ADD進(jìn)位加: ADDC借位減: SUBB與: ANL或: ORL異或: XRLA,RidirRn#data 帶進(jìn)位加法指令 ADDC A, Rn ; AA+Rn+Cy * 對(duì)標(biāo)志位的影響與ADD相同; Cy:上一次進(jìn)位標(biāo)志; 用于多字節(jié)加法運(yùn)算 帶借位減法指令 SUBB A, Rn ;AA-Rn-Cy SUBB A, Ri ;AA-(Ri)-Cy SUBB A, di

16、r ;AA-(dir)-Cy SUBB A, data ;AA-#dataCy * 要進(jìn)行不帶借位的減法, 先將Cy清“0” CLR C ; 0CY 2.3.3 以dir為目的操作數(shù)的邏輯運(yùn)算指令與: ANL 或: ORL dir, 異或:XRLA#data : “與” “有0即0,全1為1” : “或” “有1即1,全0為0” : “異或” “相異為1,相同為0” 2.3.4 加1, 減1指令 加1指令 INC A ;AA+1 INC Rn ;Rn Rn +1 INC dir ;(dir)(dir)+1 INC Ri ;(Ri) (Ri) +1 INC DPTR ;DPTRDPTR+1 (唯

17、一16位運(yùn)算指令) 對(duì)標(biāo)志位Cy不產(chǎn)生影響 若: A0FFH , Cy=0 執(zhí)行: INC A 結(jié)果: A00H , Cy=0 減1指令DEC A ;AA1DEC Rn ; Rn Rn 1DEC dir ;(dir)(dir)1DEC Ri ;(Ri)(Ri)1對(duì)標(biāo)志位Cy不產(chǎn)生影響無 DEC DPTR 指令 2.3.5 十進(jìn)制調(diào)整指令 DA A用途:緊跟在加法指令(BCD碼加,不包括減法)之 后,進(jìn)行十進(jìn)制調(diào)整如兩BCD碼加: MOV A, #35H ADD A, #46H ; A=7BH DA A ; A=81H 2.3.6 專對(duì)A的指令 CLR A ; 對(duì)A清“0”(MOV A,#0)

18、CPL A ; 對(duì)A按位取反 RL A ; A的內(nèi)容向左環(huán)移1位 RLC A ; A的內(nèi)容帶進(jìn)位標(biāo)志位向左環(huán)移1位 RR A ; A的內(nèi)容向右環(huán)移1位 RRC A ; A的內(nèi)容帶進(jìn)位標(biāo)志位向右環(huán)移1位 除了RLC A和RRC A影響CY, 其它都不影響Cy, AC, OV等標(biāo)志2.3.7 乘、除法指令1.乘法指令 MUL AB ; ABBA)A、B中都是無符號(hào)整數(shù))如果積大于255,OV1,否則OV0;)乘法后 Cy0 2. 除法指令 DIV AB ; AB 商 A 余數(shù)B)A、B中都是無符號(hào)整數(shù))如果除數(shù)B為“0”,OV1,否則OV0;)除法后 Cy0例215 編程將21H單元的低三位和20

19、H單元中的低五位合并為一個(gè)字送30H單元,要求(21H)的低三位放在高位上。MOV 30H,20H ;(30H)=(20H)ANL 30H,#1FH ;保留低5位MOV A,21H ;A=(21H)SWAP A ;高低4位交換RL A ;低3位變到高3位ANL A,#0E0H ;保留高3位ORL 30H,A ;與(30H)的低5位合并SJMP $ ;動(dòng)態(tài)暫停例216 把在R4和R5中的兩字節(jié)數(shù) 取補(bǔ)(高位在R4中)CRL C ;Cy清零MOV A, R5CPL AADD A, #01H ;低位取反加1 (INC A ?) MOV R5, A MOV A, R4 CPL A ;高位取反 ADDC

20、 A, #00H ;加低位的進(jìn)位 MOV R4, A SJMP $ 例 217 把R7中的無符號(hào)數(shù)擴(kuò)大10倍 MOV A, R7 MOV B, #0AH MUL AB MOV R7, A ;R7存積的低位 MOV R6, B ;R6存積的高位(去掉?) SJMP $例218 把R1R0和R3R2中的兩個(gè)4位BCD數(shù)相加,結(jié)果送R5R4中,如有進(jìn)位則存于進(jìn)位位C中。 CLR C ;清進(jìn)位 MOV A, R0 ADD A, R2 ;低字節(jié)相加(CY=?) DA A ;BCD調(diào)整 MOV R4, A MOV A, R1 ADDC A, R3 ;高字節(jié)相加 DA A ;BCD調(diào)整 MOV R5, A

21、SJMP $2.4 控制轉(zhuǎn)移指令 (強(qiáng)迫改變PC值) 2.4.1 調(diào)用子程序及返回指令 主程序需要使用子程序時(shí)用調(diào)用指令 子程序的最后安排一條返回指令 子程序調(diào)用:長(zhǎng)調(diào)用指令LCALL 短調(diào)用指令A(yù)CALL1. 長(zhǎng)調(diào)用指令 LCALL addr16 ; addr16 PC0-15,三字節(jié) addr16:子程序地址 (目的地址,子程序名) 操作:斷點(diǎn)地址(當(dāng)前PC)計(jì)算, PC+3PC 斷點(diǎn)地址(當(dāng)前PC)入棧,SP+1SP,PC0-7(SP) SP+1SP,PC8-15(SP) 子程序地址PC , 即addr16PC0-151) LCALL可調(diào)用64KB范圍內(nèi)的子程序2) 指令執(zhí)行后不影響任何

22、標(biāo)志3) 機(jī)器碼:12, addr16H, addr16L2. 短調(diào)用指令 (絕對(duì)調(diào)用指令) ACALL addr11 ; addr11PC0-10,二字節(jié) addr11:子程序地址(目的地址,子程序名) 操作: 當(dāng)前PC計(jì)算, PC+2PC 斷點(diǎn)地址(當(dāng)前PC)入棧, SP+1SP,PC0-7(SP) SP+1SP,PC8-15(SP) 子程序地址PC , 即addr11PC0-10,PC11-15不變 當(dāng)前PC 與子程序入口同在一基本2KB地址范圍內(nèi)2) 指令執(zhí)行后不影響任何標(biāo)志3) 機(jī)器碼:a10a9a810001a7a6a5a4a3a2a1a0(二字節(jié))ROM空間32個(gè)基本2K地址(P

23、C11-PC15同)范圍 0000H-07FFH,0800H-0FFFH,1000H-17FFH,1800H-1FFFH 2000H-27FFH,2800H-2FFFH,F800H-FFFFH 例:1) 知MA=07FFH,執(zhí)行指令MA:ACALL 0810H正確否? 知MA=07F0H,執(zhí)行指令MA:ACALL 0810H正確否? 2)知MA=0500H,執(zhí)行指令 MOV SP,#30H MA:LCALL 8192H 堆棧中數(shù)據(jù)如何變化? SP=? PC=?答案:1) , 2)SP=32H,PC=8192H,(31H)=03H,(32H)=05H 3. 子程序返回指令 (程序末尾) RET;

24、(SP)PC8-15,SP-1SP (SP)PC0-7, SP-1SP 恢復(fù)斷點(diǎn), 返回主程序 4. 中斷返回指令 (程序末尾) RETI ;(SP)PC8-15,SP-1SP (SP)PC0-7, SP-1SP 恢復(fù)斷點(diǎn), 返回主程序,清除中斷狀態(tài)標(biāo)志2.4.2 轉(zhuǎn)移指令1、 無條件轉(zhuǎn)移指令(1) 短轉(zhuǎn)移指令 (絕對(duì)轉(zhuǎn)移) AJMP addr11; addr11 PC0-10,二字節(jié) addr11:目的地址(標(biāo)號(hào)) 操作:當(dāng)前PC計(jì)算, PC+2PC 目的地址PC ,即addr11PC0-10 (PC11-15不變)注意:當(dāng)前PC 與目的地址同在一基本2KB地址范圍(轉(zhuǎn)移) 2) 指令執(zhí)行后

25、不影響任何標(biāo)志3) 機(jī)器碼:a10a9a800001a7a6a5a4a3a2a1a0(二字節(jié)) (2) 長(zhǎng)轉(zhuǎn)移指令 LJMP addr16 ;PCaddr16 (64K范圍,3字節(jié))注意:1) 指令執(zhí)行后不影響任何標(biāo)志機(jī)器碼:02, addr16H, addr16L(三字節(jié))例如: 在程序存儲(chǔ)器0000H單元存放一條指令: LJMP 3000H; PC3000H,機(jī)器碼 02 30 00 則上電復(fù)位后程序?qū)⑻?000H 單元去執(zhí)行用戶程序(3) 間接轉(zhuǎn)移指令 JMP A+DPTR ; PCA+DPTR目的地址送入PC不改變A和DPTR的內(nèi)容 (無符號(hào)數(shù))不影響標(biāo)志例2-22: 根據(jù)累加器A的

26、數(shù)值, 轉(zhuǎn)不同處理程序的入口 MOV DPTR, TABLE ; 表首址送DPTR JMP A+DPTR ; 依據(jù)A值轉(zhuǎn)移 TABLE: AJMP PROC0 ; 當(dāng)A=0時(shí)轉(zhuǎn)PROC0執(zhí)行 AJMP PROC1 ; 當(dāng)A=2時(shí)轉(zhuǎn)PROC1執(zhí)行 AJMP PROC2 ; 當(dāng)A=4時(shí)轉(zhuǎn)PROC2執(zhí)行注意:A內(nèi)容為偶數(shù) 將AJMP換為L(zhǎng)JMP,A=? (A=0,1,2,3.必須有A*3)(4)無條件相對(duì)轉(zhuǎn)移(2字節(jié)) SJMP rel; As+2PC當(dāng)前 (當(dāng)前PC) PC當(dāng)前+relPC目的(目的地址) rel:相對(duì)偏移量,為8位補(bǔ)碼 機(jī)器碼:80,rel rel PC目的PC當(dāng)前 (目的地址當(dāng)

27、前PC)補(bǔ)碼 原地踏步指令(動(dòng)態(tài)暫停):HE: SJMP HE 常寫成: SJMP $ (機(jī)器碼80H,FEH)80HrelXXXX SJMP當(dāng)前PC(下一指令)-128+127當(dāng)前PC為基準(zhǔn)特點(diǎn):兩字節(jié)指令本指令PC+2當(dāng)前PC轉(zhuǎn)移范圍: -128+127( -126+129 ) SJMP 轉(zhuǎn)移范圍 XX XX當(dāng)前PC為基準(zhǔn)2. 條件轉(zhuǎn)移指令 (轉(zhuǎn)移范圍有限)累加器判0 轉(zhuǎn)移 (2條,2字節(jié))JZ rel; A=0 轉(zhuǎn)移,去As+2+relPC目的,否則As+2PC當(dāng)前JNZ rel; A0 轉(zhuǎn)移,去As+2+relPC目的,否則As+2PC當(dāng)前 轉(zhuǎn)移范圍:PC當(dāng)前為中心的 256 個(gè)字節(jié)

28、(128 +127)注意: 長(zhǎng)轉(zhuǎn)移: 64KB范圍 短轉(zhuǎn)移: 同一基本2KB范圍 相對(duì)轉(zhuǎn)移:256B范圍 (2) 減 1不為0轉(zhuǎn)移指令 (2條) DJNZRn, rel;2字節(jié)指令,Rn-1Rn, 若Rn0, 轉(zhuǎn)移去As+2+rel PC目的; 若Rn=0,順序執(zhí)行As+2PC當(dāng)前 DJNZ dir, rel;3字節(jié)指令 轉(zhuǎn)移地址的計(jì)算方法同前共性:減1后結(jié)果回傳 例2-23 說明程序運(yùn)行后A=? MOV 23H,#0AH ;(23H)#0AH CLR A ;A0 LOOP: ADD A,23H ;AA+(23H) DJNZ 23H,LOOP ;(23H)-10,轉(zhuǎn)移去LOOP SJMP $

29、;否則順序執(zhí)行 答案:A=10+9+8+7+6+5+4+3+2+1=55=37H DJNZ A,rel ? (3) 比較轉(zhuǎn)移指令 (4條,3字節(jié)) CJNE A, dir, rel ;A-(dir )0CY=0 A-(dir )0CY=1 A(dir),轉(zhuǎn)移(As+3+relPC目的) A=(dir ),順序執(zhí)行(As+3PC當(dāng)前)CJNE A, data, relCJNE Rn, data, relCJNE Ri, data, rel 功能:比大小,判相等,定轉(zhuǎn)移?(相減結(jié)果不回傳,影響CY,不影響操作數(shù)) 例2-24:R756H,指令CJNE R7, #34H, $+08H執(zhí)行后,程序轉(zhuǎn)移

30、到放本條CJNE指令的首地址($)加08H后的地址單元去執(zhí)行。 rel=? rel=($+08H)-($+03H)=05H ? rel=($+08H)-($)=08H ? rel PC目的PC當(dāng)前 (目的地址當(dāng)前PC)補(bǔ)碼2.4.3 空操作指令 NOP ;PCPC+1 , 機(jī)器碼 00 單字節(jié)指令 消耗一個(gè)MC的時(shí)間 不影響標(biāo)志位 2.4.4 指令應(yīng)用舉例例2-28 將累加器的低4位取反4次,高4位不變。每變換一次,從P1輸出。 分析:異或運(yùn)算的規(guī)則是一個(gè)數(shù)與0異或,該數(shù)不變;與1異或,該數(shù)取反;高4位不變,高4位與0異或;低4位取反,低4位與1異或,因此A和0FH異或方法一 加1計(jì)數(shù): MO

31、V R0, #0 LL: XRL A, #0FH INC R0 MOV P1, A CJNE R0, #04, LL RET 方法二 減1計(jì)數(shù): MOV R0, #04H LL: XRL A, #0FH MOV P1, A DJNZ R0, LL RET例2-29 在內(nèi)部RAM 的40H地址單元中,有1字節(jié)符號(hào)數(shù),編寫求其絕對(duì)值后放回原單元的程序。MOV A, 40H ;A(40H)ANL A, #80H ;判斷A中數(shù)為正負(fù)?JNZ NEG ;A0,為負(fù)數(shù)轉(zhuǎn)移SJMP $ ;A=0,為正數(shù),不操作 NEG: MOV A, 40H ;求補(bǔ),取絕對(duì)值CPL A ;取反 INC A ;加1 MOV 40H, A ;(40H)絕對(duì)值 SJMP $ ;暫停 2.5 位操作指令 表 1 位 操 作 指 令 指令中位地址表達(dá): (1) 直接地址方式: 如 D4H; (2) . 操作符方式: 如PSW.4; (3)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(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)論