《單片機(jī)指令系統(tǒng)》PPT課件.ppt
《《單片機(jī)指令系統(tǒng)》PPT課件.ppt》由會員分享,可在線閱讀,更多相關(guān)《《單片機(jī)指令系統(tǒng)》PPT課件.ppt(60頁珍藏版)》請在裝配圖網(wǎng)上搜索。
第三章 MCS-51單片機(jī)指令系統(tǒng),3-1 指令格式,3-2 指令尋址方式,3-3 MCS-51指令系統(tǒng),指令的表示形式,指令:是控制計算機(jī)各功能部件完成某一指定動作的指示和命令 表示形式: 二進(jìn)制 十六進(jìn)制 助記符 機(jī)器碼 :指令的二進(jìn)制形式是一種可以直接為計算機(jī)識別和執(zhí)行的形式,稱為指令的機(jī)器碼。 匯編語言指令:用助記符形式表示的機(jī)器指令,是一種由英文單詞或縮寫字母形象表征指令功能形式。 MCS-51 指令111條,可以實現(xiàn)51種基本操作 指令的分類: 按指令周期數(shù)分: 單周期指令(57) 雙周期指令(52) 四周期(2) 按字節(jié)數(shù): 單字節(jié)(49) 雙字節(jié)(46) 三字節(jié)(16) 按功能分類: 數(shù)據(jù)傳送指令(28) 算術(shù)運(yùn)算指令(24) 邏輯操作指令 (25) 控制轉(zhuǎn)移指令(17) 位操作指令(17),一. 匯編語言指令格式 標(biāo)號:操作碼 操作數(shù)1,操作數(shù)2 ;注釋 換行表示一條指令結(jié)束。 例: LOOP: MOV A,#40H ;取參數(shù),1.標(biāo)號:指令的符號地址 2.操作碼:指明指令功能,指示何種操作。,3.操作數(shù):指令操作對象 數(shù)據(jù)、地址、寄存器名及約定符號。 4.注釋行:說明指令在程序中的作用。 操作碼和操作數(shù)是指令主體。,MOV_move傳送 XCH_exchange交換 ANL_and logic與邏輯運(yùn)算 XRL_exclusive or異或運(yùn)算 MUL_Multiply乘法 RR_rotate right右循環(huán) SJMP_short jump短跳轉(zhuǎn) RET_return 子程序返回,3-1 指令格式,二. 機(jī)器語言指令格式,操作碼 操作數(shù)1 操作數(shù)2 有單字節(jié)、雙字節(jié)和三字節(jié)指令。,匯編語言指令中操作碼和操作數(shù)是指令主體,稱為指令可執(zhí)行部分,指令表中可查出對應(yīng)指令代碼。P444,舉例: 匯編語言: 機(jī)器語言: MOV A,R0 E8H MOV R6,#32H 7E 32H MOV 40H,#100 75 40 64H,11101000,3-2 指令尋址方式 CPU尋找操作數(shù)的方法叫尋址方式,3-2-1 操作數(shù)類型 位(b) 位尋址區(qū)中的一位二進(jìn)制數(shù)據(jù) 字節(jié)(B) 8位二進(jìn)制數(shù)據(jù),3-2-2 尋址方式 (七種) 一.立即尋址方式 指令中給出實際操作數(shù)據(jù)(立即數(shù)),一般用于為寄存器或存儲器賦常數(shù)初值。 舉例: 機(jī)器碼 8位立即數(shù): MOV A,#3AH ;A3AH 743A 16位立即數(shù): MOV DPTR,#2100H ;DPTR2100H 902100,二.直接尋址方式,指令操作數(shù)是存儲器單元地址,數(shù)據(jù)在存儲器單元中。 指令碼中含有操作數(shù)的地址 MOV A,40H ;A(40H) 機(jī)器碼 E540,直接尋址方式對數(shù)據(jù)操作時,地址是固定值,而地址所指定的單元內(nèi)容為變量形式。 INC 0E0H;以字母AF開頭的十六進(jìn)制需前面加0) INC ACC,56H,例:設(shè)存儲器兩個單元的內(nèi)容如圖所示, 執(zhí)行指令 MOV A,40H后 A = ?,適于:1.片內(nèi)RAM低128字節(jié) 2.SFR(可以是物理地址。也可以是特殊功能寄存器名稱) 3.位地址空間(SFR 82個,RAM位地址),三.寄存器尋址方式 指令操作數(shù)為寄存器名,數(shù)據(jù)在寄存器中。 例: MOV A,R0 ;AR0 設(shè)指令執(zhí)行前 A=20H,R0=40H, 執(zhí)行指令后,A= ?,R0= ?,40H,40H,0100 0000,A,0010 0000,R0,0100 0000,以下寄存器可使用:1.R0R7 2. A B DPTR C 如:INC A,MOV A, R0; AR0,四.寄存器間接尋址方式,指令的操作數(shù)為寄存器名,寄存器中為數(shù)據(jù)地址。 存放地址的寄存器稱為間址寄存器或數(shù)據(jù)指針。 例: MOV A,R0 ;A(R0) 設(shè)指令執(zhí)行前 A=20H,R0=40H,地址為40H存儲器單元內(nèi)容如圖所示。執(zhí)行指令后, A= ? ,R0 = ? , (40H)= ?,34H,40H,34H,R0,MOV A, R0,寄存器間址可訪問內(nèi)、外RAM,但不可訪問SFR,五.變址間接尋址方式 數(shù)據(jù)在存儲器中,指令給出的寄存器中為數(shù)據(jù)的基地址和偏移量。 數(shù)據(jù)地址 = 基地址 + 偏移量。 基地址寄存器(DPTR/PC)中的基地址常是表格的起始地址,累加器A中 存放地址偏移量rel(8位無符號數(shù):00H-FFH),例: MOVC A,A+DPTR ;A(A+DPTR) 設(shè)指令執(zhí)行前 A=02H,DPTR=2000H,存儲器單元內(nèi)容如圖所示。執(zhí)行指令后,A= ? DPTR= ?,12H,2000H,六.相對尋址方式 用于相對轉(zhuǎn)移指令 轉(zhuǎn)移地址 = PC當(dāng)前值 + 偏移量。 偏移量(rel):8位帶符號數(shù)(補(bǔ)碼:-128到+127),例: 2000H 8054H SJMP rel;PC(PC+2+rel),七.位尋址方式,指令給出位地址。 指令碼中含有位地址 位地址用bit表示 表示方法: 1 直接采用位地址: SETB 07H 2 采用第幾個單元第幾位: MOV 20H.0, C 3 寄存器名位數(shù): MOV ACC.7, C 4 用偽指令定義的字符名稱: SETB LED1 例: MOV C,40H ;Cy(位地址40H) 設(shè)指令執(zhí)行前 Cy=1,位地址40H存儲器單元如圖,執(zhí)行指令后,Cy= ? 40H對應(yīng)28H.0(57頁圖),0,3-3 MCS-51指令系統(tǒng),指令功能分類: 數(shù)據(jù)傳送、數(shù)據(jù)操作、布爾處理、程序控制。,3-3-1 數(shù)據(jù)傳送指令 實現(xiàn)寄存器、存儲器之間的數(shù)據(jù)傳送。 一. 內(nèi)部傳送指令: 片內(nèi)數(shù)據(jù)存儲器數(shù)據(jù)傳送。 二. 外部傳送指令: 片外數(shù)據(jù)存儲器數(shù)據(jù)傳送。 三. 交換指令: 片內(nèi)數(shù)據(jù)存儲器數(shù)據(jù)傳送。 四. 堆棧操作指令: 片內(nèi)數(shù)據(jù)存儲器數(shù)據(jù)傳送。 五. 查表指令: 程序存儲器數(shù)據(jù)傳送。,(一)內(nèi)部傳送指令:實現(xiàn)片內(nèi)數(shù)據(jù)存儲器中數(shù)據(jù)傳送。 指令格式: MOV 目的操作數(shù),源操作數(shù) 尋址方式:立即尋址、直接尋址、寄存器尋址、寄存器間址。,指令機(jī)器碼: 11101rrr E8EF 11100101 n E5 n 1110011i E6、E7 01110100 d 74 d 10101rrr n 1010011i n 85 direct1 direct2 90 d1 d2,MOV A,Rn ;ARn,Rn=R0R7 MOV A,direct ;A(direct) MOV A,Ri ;A(Ri),Ri=R0、R1 MOV A,#d ;Ad, MOV Rn,direct ;Rn(direct) MOV Ri,n ;(Ri)(direct) MOV direct1,direct2;direct2(direct2),MOV DPTR,#d1d2 ;DPTRd1d2,(1) 立即尋址,在該尋址方式下, 內(nèi)部RAM區(qū)數(shù)據(jù)傳送指令有如下5條指令。,MOV A, data ; A data , 74 data MOV direct, data ; direct data , 75 direct data MOV Ri, data ; (Ri) data , 7677 data MOV Rn, data ; Rn data , 787F data MOV DPTR, data16 ; (DPTR) data16 , 90 data158data70,MOV A,#70H,MOV DPTR,#1600H ;DPTR1600H,MOV 30H,#40H ;30H單元40H,(2)直接尋址。,在該尋址方式下, 內(nèi)部RAM區(qū)數(shù)據(jù)傳送指令有如下5條指令: MOV A, direct ; A (direct) , E5 direct MOV Rn, direct ; Rn (direct) , A8AF direct MOV Ri, direct ; (Ri) (direct) , A6A7 direct MOV direct2, direct1; direct2 (direct1) , 85 direct1 direct2 MOV direct ,A ; direct A,這組指令將直接地址所規(guī)定的內(nèi)部RAM單元(片內(nèi)RAM的00H7FH, SFR的80HFFH單元)內(nèi)容傳送到累加器A , 寄存器Rn, 并能實現(xiàn)內(nèi)部數(shù)據(jù)寄存器RAM之間、 特殊功能寄存器SFR之間或SFR與內(nèi)部RAM之間的直接數(shù)據(jù)傳遞。 直接傳遞不需要通過累加器A或者工作寄存器來間接傳送, 從而提高了數(shù)據(jù)傳送的效率,例如:MOV A,30H ;A30H內(nèi)部RAM單元中的內(nèi)容,30H為直接給出的內(nèi)部RAM地址,(3)寄存器尋址,MOV A, Rn MOV Rn , A MOV direct, Rn 特點: 指令碼中含有Rn的寄存器號 寄存器號隱藏在操作碼字段,MOV A,Rn ;ARn,Rn=R0R7,11101rrr E8EF,(4) 寄存器間接尋址。,在該尋址方式下, 內(nèi)部RAM區(qū)數(shù)據(jù)傳送指令有以下三條: MOV A, Ri ; A (Ri) , E6E7 MOV direct, Ri ; direct (Ri) , 8687 direct MOV Ri , A 前兩條指令把以Ri的內(nèi)容作為地址進(jìn)行尋址所得到單元的內(nèi)容, 傳送到累加器A或direct指定的片內(nèi)RAM區(qū)單元。,能用于寄存器間接尋址的寄存器有R0,R1,DPTR,SP。 其中R0、R1必須是工作寄存器組中的寄存器。SP僅用于堆棧操作。,例:順序執(zhí)行下列指令序列,求每一步執(zhí)行結(jié)果。,MOV A,#30H MOV 4FH,A MOV R0,#20H MOV R0,4FH MOV 21H,20H,習(xí)題:用兩種尋址方式實現(xiàn),將片內(nèi)RAM 60H單元的數(shù)據(jù)傳送給累加器A。,解: MOV A,#60H ,MOV R0,#60H MOV A,R0,;A= 30H ;(4FH)= 30H ;R0= 20H ;(20H)= 30H ;(21H)= 30H,MOV R0,60H MOV A,R0,解: MOV A,60H,說明:,只有指令表中的指令才有對應(yīng)指令代碼,計算機(jī)才能執(zhí)行。編程時,不能隨意創(chuàng)造發(fā)明指令。,1. 一條指令中不能同時出現(xiàn)兩個工作寄存器: 非法指令: MOV R1,R2 MOV R2,R0,2. 間址寄存器只能使用 R0、R1。 非法指令:MOV A,R2,3. SFR區(qū)只能直接尋址,不能用寄存器間接尋址。 非法指令:MOV R0,#80H MOV A,R0,(二) 外部傳送指令 實現(xiàn)片外數(shù)據(jù)存儲器和A累加器之間的數(shù)據(jù)傳送。,指令格式:MOVX 目的操作數(shù),源操作數(shù) 尋址方式:片外數(shù)據(jù)存儲器用寄存器間址方式。 1. DPTR作16位數(shù)據(jù)指針,尋址64KB片外RAM空間 MOVX A,DPTR ;A(DPTR) MOVX DPTR,A ;(DPTR)A 2. Ri作8位數(shù)據(jù)指針,尋址256B片外RAM空間 MOVX A,Ri ;A(Ri) MOVX Ri,A ;(Ri)A,例: 實現(xiàn)片外數(shù)據(jù)存儲器數(shù)據(jù)傳送(2000H)(2100H)。,MOV DPTR,#2000H MOVX A,DPTR MOV DPTR,#2100H MOVX DPTR,A,習(xí)題:將片外RAM 0000H單元的數(shù)據(jù)傳送到片內(nèi)RAM的 60H單元。,; DPTR= 2000H ; A= X ; DPTR= 2100H ;(2100H)= X,片外數(shù)據(jù)存儲器不能直接尋址。下列為非法指令: MOVX A,2000H MOVX 2100H,2000H,(三)堆棧操作指令 入棧指令:PUSH n ;SPSP+1,(SP)(n) 出棧指令:POP n ;(n)(SP),SPSP-1 1 雙字節(jié)指令,Rn 和A不可直接放在本指令中, 2 Rn必用物理地址 A必用ACC或物理地址 3 一般在60H單元以上,用 MOV SP,#60H,例:設(shè) A=02,B=56H,執(zhí)行下列指令后,SP= ?,A= ? ,B= ?, SP ,02H,A,56H,SBR: MOV SP,#30H ;設(shè)棧底 PUSH ACC PUSH B POP ACC POP B,B,(四) 交換指令 實現(xiàn)片內(nèi)RAM區(qū)的數(shù)據(jù)雙向傳送。 本指令會影響PSW,1. 字節(jié)交換指令 XCH A,Rn ;A Rn XCH A,Ri;A (Ri) XCH A,direct ;A direct,習(xí)題4:將片內(nèi)RAM60H單元與61H單元的數(shù)據(jù)交換。,例:設(shè)A= 29H,執(zhí)行指令 XCH A,2AH后,A= ? (2AH)= ?,38H,29H,XCH 60H,61H 對嗎?,29 H,2. 半字節(jié)交換指令,XCHD A,Ri ;A03 (Ri)03 SWAP A ;A47 A03,習(xí)題:交換片內(nèi)RAM 40H單元和 41H單元的低半字節(jié)。,(五) 查表指令 實現(xiàn)從程序存儲器讀取數(shù)據(jù)到A累加器,只能使用變址間接尋址方式。 多用于查常數(shù)表程序,可直接求取常數(shù)表中的函數(shù)值。,1DPTR為基址寄存器,A內(nèi)為無符號整數(shù) MOVC A,A+DPTR ;A(A+DPTR) 查表范圍為 64KB 程序存儲器任意空間,稱為遠(yuǎn)程查表指令 。 指令執(zhí)行結(jié)果只和DPTR和A內(nèi)容有關(guān),與表格地址無關(guān)。一個表格可為多個程序塊共用。 2PC為基址寄存器, A內(nèi)為無符號整數(shù) MOVC A,A+PC ;PCPC+1,A(A+PC) 常數(shù)表只能在查表指令后256B范圍內(nèi),稱為近程查表指令。本指令只有一個字節(jié)。 優(yōu)點:不改變特殊功能寄存器及PC的狀態(tài),A中數(shù)據(jù)可取出表中常數(shù) 缺點:表格只能存放在該條查表指令的后面的256個單元內(nèi),表格大小受到限制,而且表格只能被一段程序利用,例:查表法求Y=X2。設(shè)X(0X15)在片內(nèi)RAM的20H單元中,要求將查表求Y,存入片內(nèi)RAM21H單元。,1) ORG 1000H SQU: MOV DPTR,#TAB ;確定表首地址(基地址) MOV A,20H ;取X(偏移量) MOVC A,A+DPTR ;查表求Y=X2 MOV 21H,A ;保存Y RET ;子程序結(jié)束 ;其它程序段 ORG 3000H ;常數(shù)表格首地址 TAB: DB 00,01,04,09,225 ;平方表,2)指令地址 源程序 ORG 1000H ;程序起始地址 1000H SQU: MOV A,20H ;取X 1002H ADD A,#3 ;修正偏移量 1004H MOVC A,A+PC ;查表求Y=X2 1005H MOV 21H,A;2 P450;存結(jié)果 1007H RET ;1 ;子程序結(jié)束 1008H TAB: DB 00,01,04 ;平方表 100BH DB 09,225,例:查表法求Y=X2。設(shè)X(0X15)在片內(nèi)RAM的20H單元中,要求將查表求Y,存入片內(nèi)RAM21H單元。,習(xí)題:找出指令錯誤并改正:,1MOV A,#1000H ;A1000H 2MOVX A,1000H ;A(1000H)片外RAM 3. MOVC A,1000H ;A(1000H)片外ROM 4MOVX 60H,A ;片外RAM(60H)A 5MOV R0,60H ;片內(nèi)RAM:(61H)(60H) MOV 61H,R0 6. XCH R1,R2 ;R1R2 7. MOVX DPTR,#2000H;DPTR2000H 8. MOVX 60H,DPTR ;片內(nèi)RAM片外RAM,3-3-2 算術(shù)運(yùn)算指令,與數(shù)據(jù)傳送指令不同,多數(shù)算術(shù)運(yùn)算指令會影響標(biāo)志位的狀態(tài),即CPU執(zhí)行算術(shù)運(yùn)算指令后,根據(jù)數(shù)據(jù)操作情況自動設(shè)置標(biāo)志位的狀態(tài)。,狀態(tài)標(biāo)志,MCS-51 的程序狀態(tài)字寄存器 PSW 為標(biāo)志寄存器。其格式如下:,1標(biāo)志位(自動設(shè)置狀態(tài)),1)Cy:進(jìn)位標(biāo)志位 保存運(yùn)算后最高位的進(jìn)位/借位狀態(tài),當(dāng)有進(jìn)位/借位,Cy=1,否則Cy=0。 2)AC:輔助進(jìn)位標(biāo)志位 保存低半字節(jié)的進(jìn)位/借位狀態(tài),當(dāng)D3產(chǎn)生進(jìn)位/借位,AC=1,否則AC=0。用于十進(jìn)制調(diào)整。 3)OV:溢出標(biāo)志位 OV=Cy7Cy6,補(bǔ)碼運(yùn)算產(chǎn)生溢出OV=1,否則OV=0。 4)P:奇偶標(biāo)志位 反映累加器A中數(shù)據(jù)的奇偶性。當(dāng)1的個數(shù)為奇數(shù),P=1,否則P=0。,2用戶選擇位(編程設(shè)置狀態(tài)),1)F0:用戶自定義標(biāo)志位。 2)RS1、RS0: 工作寄存器區(qū)選擇位。 復(fù)位時,PSW=00H,例:復(fù)位后,設(shè)置使用工作寄存器3區(qū),其余標(biāo)志位不變。,解: MOV PSW,#,18H,算術(shù)運(yùn)算指令 完成片內(nèi) RAM(Rn,direct,Ri,#data) 和 A 中數(shù)據(jù)的加減乘除運(yùn)算。,一加減指令 1.加法指令,0011 1011 + 0011 1011 0111 0110,76H 0 0 1 1,1)不帶進(jìn)位加法:ADD A,源操作數(shù) ADD A,R2 ;AA+R2,影響Cy、OV、AC、P 例1:A=3BH,PSW=0,執(zhí)行指令 ADD A,#3BH 求:A= ,Cy= ,OV= ,AC= ,P= , PSW= ?,01000001= 41H,1001 1010 1110 0011 + 0 1 0111 1101,2)帶進(jìn)位加法: ADDC A,源操作數(shù) ADDC A,R2 ;AA+R2+Cy,影響Cy、OV、AC、P,7DH 1 1 0 0,例2:A= 9AH,R2= E3H,PSW= 0,執(zhí)行指令 ADDC A,R2 后求: A= ,Cy= ,OV= ,AC= ,P= , PSW= ?,10000100 = 84H,帶進(jìn)位加法指令A(yù)DDC用于多字節(jié)運(yùn)算,例:設(shè)雙字節(jié)數(shù) X 存在片內(nèi)RAM 41H、40H單元,Y存在42H、43H單元,編程求 Z=X+Y,并存入片內(nèi)RAM單元44H、45H、46H。,ADDS:MOV A,40H ADD A,42H MOV 44H,A MOV A,41H ADDC A,43H MOV 45H,A MOV A,#0 ADDC A,#0 MOV 46H,A RET,;取被加數(shù)低字節(jié) ;加上加數(shù)低字節(jié) ;保存和的低字節(jié) ;取被加數(shù)高字節(jié) ;加上加數(shù)高字節(jié) ;保存和的高字節(jié) ;求高字節(jié)進(jìn)位 ;子程序結(jié)束,;低字節(jié)相加 ;高字節(jié)相加 ;計算高字節(jié)進(jìn)位 ;子程序結(jié)束,十進(jìn)制加法指令: ADD A,源操作數(shù) DA A 帶進(jìn)位十進(jìn)制加法指令: ADDC A,源操作數(shù) DA A,BCD調(diào)整指令: DA A ; 對 A 中加法結(jié)果進(jìn)行調(diào)整,2減法指令 SUBB A,源操作數(shù) ;帶借位減法指令,SUBB A,R2 ;AA-R2-Cy, ;影響Cy、OV、AC、P,00 0 0 0 0,習(xí)題:編程求雙字節(jié)減法。設(shè)X、Y存在片內(nèi) RAM 60H起始單元,計算 Z=X-Y 。,例:A= 5AH,R2= 5AH,Cy= 0,執(zhí)行下列指令 SUBB A,R2 求: A= ,Cy= ,OV= ,P= ,AC= ?,3. 增量、減量指令 (與加法指令不同:只有INC A 影響奇偶標(biāo)志位P,其余不影響),INC 單操作數(shù) 如: INC R2 ;R2R2+1 DEC 單操作數(shù) 如: DEC R2 ;R2R2-1 INC DPTR ;DPTRDPTR+1 不影響標(biāo)志位狀態(tài)。,注意:沒有指令 DEC DPTR 可用指令 DEC DPL 代替,4.乘除指令,MUL AB ;BAAB,Cy0, ;當(dāng)積高字節(jié)B=0,OV0;B0,則OV1,例:A= 96(60H), B= 192(C0H),執(zhí)行指令 MUL AB 后, 求:A= ,B= ,Cy= ,OV= ,P= ? 解: 96 192 = 18432(4800H),00H 48H 0 1 0,例:A= 246(F6H),B= 13(0DH),執(zhí)行指令 DIV AB 后求:A=12H ,B=0CH ,Cy=0 ,OV= 0 ,P= 0 ? 解: 246 13 = 18(12H),余數(shù)= 12(0CH)。,DIV AB ;AB,A商,B余數(shù),Cy0, ;當(dāng)除數(shù)B=0,OV1;B0,則OV0,3-3-3 邏輯運(yùn)算指令,一.單操作數(shù)指令(A累加器為操作數(shù)) 1. A清0指令: CLR A ;A0 2. A取反指令:CPL A ;A/A,3. 循環(huán)移位指令: 1)8位循環(huán)指令: RL A ;A循環(huán)左移一位 RR A ;A循環(huán)右移一位,2)9位循環(huán)指令: RLC A;帶Cy循環(huán)左移一位 RRC A;帶Cy循環(huán)右移一位,例:設(shè) A= 11000101 ,Cy= 0,分別執(zhí)行下列單條指令: CPL A 求:A= ,Cy= RL A RLC A,00111010 0,10001011 0,10001010 1,用9位循環(huán)指令實現(xiàn)多字節(jié)移位 例:編程將寄存器 R6R5 中的雙字節(jié)數(shù)X左移一位。,CLR C MOV A,R5 RLC A MOV R5,A MOV A,R6 RLC A MOV R6,A,;Cy=0, 設(shè) R6= 55H ,R5= AAH,;R6=01010101,R5=10101010,Cy=0,;R6=01010101,R5=01010100,Cy=1,;R6=10101011,R5=01010100,Cy=0,思考題:如何將寄存器R6R5中的雙字節(jié)數(shù)X右移一位。,(二)雙操作數(shù)邏輯運(yùn)算指令(對位邏輯運(yùn)算): ANL、ORL、XRL,ANL A, Rn; AARn ANL A, direct; AA(direct) ANL A, Ri; AA(Ri) ANL direct ,A; direct A(direct) ANL direct,#data; Adata(direct) ANL A, #data; AAdata,習(xí)題1:如何將累加器A中的數(shù)據(jù)高4位清0,低位不變? 習(xí)題2:如何將寄存器R2中的數(shù)據(jù)奇數(shù)位取反,偶數(shù)位不變?,例 A=01B,表示隨機(jī)狀態(tài),為1或0,執(zhí)行下述一組指令執(zhí)行后A的值如何? XRL A,#0C0H ;將累加器A的內(nèi)容D7、D6取反 ORL A,#03H ;將累加器A的內(nèi)容D1、D0置1 ANL A,#0E7H ;將累加器A的內(nèi)容D4、D3清0 解 :執(zhí)行上述指令后,A=100011B。,3-3-4 布爾變量操作指令 對片內(nèi)RAM中位尋址區(qū)操作。位累加器Cy和位地址bit。,一位傳送 MOV C,bit ;Cy(bit) MOV bit,C ;(bit)Cy,例:將位地址20H的一位數(shù)傳送到位地址30H中: MOV C,20H MOV 30H,C 二位清0、置1、取反:CLR、SETB、CPL: CLR C ;Cy0, CLR bit ; 例: CLR 40H; 位地址40H 0,三邏輯運(yùn)算:ANL、ORL: ANL C,40H ;CC(40H) ANL C,/40H ;CC/(40H),例:設(shè) Cy=1,(位地址40H)=1,執(zhí)行指令 ANL C,/40H 后, Cy= ? , (位地址40H)= ?,位地址表示法: 位地址 40H,位寄存器 F0,字節(jié)加位 ACC.0,0,習(xí)題:設(shè)累加器A(字節(jié)地址E0H)中數(shù)據(jù)為 29H,Cy=0,執(zhí)行指令 ORL C,0E3H 后,Cy= ?,1,3-3-5 控制轉(zhuǎn)移指令 轉(zhuǎn)移指令通過改寫PC的當(dāng)前值,從而改變CPU執(zhí)行程序的順序,使程序發(fā)生跳轉(zhuǎn)。,按轉(zhuǎn)移條件分類: 1)無條件轉(zhuǎn)移: 執(zhí)行無條件轉(zhuǎn)移指令,程序無條件轉(zhuǎn)移到指定處。 2)條件轉(zhuǎn)移: 指令中給出轉(zhuǎn)移條件,執(zhí)行指令時,先測試條件,若滿足條件,則程序發(fā)生轉(zhuǎn)移,否則,仍順序執(zhí)行程序。,按轉(zhuǎn)移方式分類:,1)絕對轉(zhuǎn)移:指令給出轉(zhuǎn)移目的的絕對地址 addr16,執(zhí)行指令后,PCaddr16,2)相對轉(zhuǎn)移:指令給出轉(zhuǎn)移目的與轉(zhuǎn)移指令的相對偏移量rel,執(zhí)行指令后,PCPC + rel 。,例: 地址 源程序 1000H LJMP 2000H 1003H 2000H ;轉(zhuǎn)移目的指令,例: 地址 源程序 1000H SJMP 02 1004H ;轉(zhuǎn)移目的指令,一.無條件轉(zhuǎn)移指令 1.長轉(zhuǎn)移指令: (3字節(jié)雙周期) LJMP addr16 ;PC addr16(常用符號地址表示) 指令機(jī)器碼: 02 addrH addrL 指令轉(zhuǎn)移范圍:64KB LJMP 0A80H;,2.絕對(短)轉(zhuǎn)移指令:(2字節(jié)雙周期) AJMP addr11 ;PCPC+2 ;PC100addr100 ;PC1511不變 指令機(jī)器碼:addr11108 00001,addr1170 指令轉(zhuǎn)移范圍:2KB (操作碼) 轉(zhuǎn)移時要求轉(zhuǎn)移前后保持 PC1511不變,PC100 addr11,相對偏移量 rel 的計算式: rel = 目的指令地址 -(轉(zhuǎn)移指令地址+指令字節(jié)數(shù)) = 目的地址 - PC當(dāng)前值,3.短轉(zhuǎn)移指令: (2字節(jié)雙周期) SJMP rel ;PCPC+2,PCPC+rel 指令機(jī)器碼: 80H,rel 相對偏移量 rel為8位補(bǔ)碼。 指令轉(zhuǎn)移范圍:前128后127字節(jié)(126129),編程時,用標(biāo)號代替轉(zhuǎn)移目的地址,轉(zhuǎn)移指令的操作數(shù)交給匯編程序計算。 LJMP NEXT AJMP NEXT SJMP NEXT NEXT: NEXT: NEXT:,例1:計算轉(zhuǎn)移指令的相對偏移量 rel,并判斷是否超出轉(zhuǎn)移范圍。,例2:求原地踏步指令的指令代碼 HERE: SJMP HERE HERE: SJMP $,求出指令代碼為:80 FE H,相對偏移量 = 2150H -(2130H+2)= 001EH, 只取低8位:rel = 1EH 指令機(jī)器碼:80 1E H,習(xí)題:計算程序中轉(zhuǎn)移指令的相對偏移量 rel ,并判斷是否超出轉(zhuǎn)移范圍。 地址 源程序 2130H LOOP: 21B0H SJMP LOOP,指令地址 源程序 2130H SJMP NEXT 2150H NEXT:MOV A,R2,4變址(間接)轉(zhuǎn)移指令(多分支轉(zhuǎn)移指令) JMP A+DPTR. ;PCA+DPTR 指令機(jī)器碼 73H,指令轉(zhuǎn)移范圍64KB。,KEY: MOV DPTR,#KTAB MOV A,40H ADD A,40H JMP A+DPTR KTAB: AJMP FUNC0;2字節(jié) AJMP FUNC1 FUNC0: FUNC1: ,應(yīng)用:處理功能鍵。 要求不同功能鍵執(zhí)行不同程序段。設(shè)每個功能鍵對應(yīng)一個鍵值 X(0XFH)。 設(shè)X已存入片內(nèi)RAM的40H單元中。 若X=0,則執(zhí)行程序段FUNC0 若X=1,則執(zhí)行程序段FUNC1 。,二條件轉(zhuǎn)移指令,1. A判零轉(zhuǎn)移指令 JZ rel ;PCPC+2, ;若A=00H,PCPC+rel(轉(zhuǎn)移), ;若A00H,PC不變(不轉(zhuǎn)移),條件轉(zhuǎn)移指令形成程序的分支,賦予計算機(jī)判斷決策能力 轉(zhuǎn)移條件:1)標(biāo)志位的狀態(tài) 2)位地址中的狀態(tài),JNZ rel ;PCPC+2, ;若A00H, PCPC+ rel(轉(zhuǎn)移) ;若A=00H,PC不變(不轉(zhuǎn)移),2.判Cy轉(zhuǎn)移指令 JC rel ;Cy=1則轉(zhuǎn)移,Cy=0不轉(zhuǎn)移 JNC rel ;Cy=0則轉(zhuǎn)移,Cy=1不轉(zhuǎn)移,3.判位轉(zhuǎn)移指令 JB bit,rel ;(bit)=1轉(zhuǎn)移,否則不轉(zhuǎn)移 JNB bit,rel ;(bit)=0轉(zhuǎn)移,否則不轉(zhuǎn)移,4. 判位清0轉(zhuǎn)移指令: JBC bit,rel;(b)=1轉(zhuǎn)移,且(b)0,否則不轉(zhuǎn)移,5. 比較不相等轉(zhuǎn)移指令: CJNE 操作數(shù)1,操作數(shù)2,rel,CJNE A,data,rel ;PCPC+3 ;若Adata,則PCPC+rel ;且當(dāng)Adata,Cy=0,當(dāng)Adata,Cy=1; ;若A =data,PC不變,且Cy=0。,相當(dāng)于兩個操作數(shù)相減,僅影響標(biāo)志狀態(tài),不保存結(jié)果 CJNE A,direct ;CJNE Rn,#data; CJNE Ri,data,6循環(huán)轉(zhuǎn)移指令:減一條件轉(zhuǎn)移 DJNZ 操作數(shù),rel DJNZ R2,rel ;PCPC+2,R2R2-1 ;若R20,PCPC+rel, ;若R2=0,PC不變。 DJNZ direct, rel,例:用于循環(huán)結(jié)構(gòu)程序。設(shè)要求程序循環(huán)執(zhí)行100次 MOV R2,#100 ;設(shè)循環(huán)計數(shù)器初值 LOOP: ;多次循環(huán)程序段 DJNZ R2,LOOP ;循環(huán)控制 ;循環(huán)結(jié)束,習(xí)題:當(dāng)循環(huán)計數(shù)器初值為0,循環(huán)次數(shù)有多少?,3-3-6 子程序調(diào)用和返回指令,子程序調(diào)用和返回指令也使程序發(fā)生轉(zhuǎn)移。,一長調(diào)用指令 LCALL addr16 ;PCPC+3,SPSP+1,(SP)PC70 ;SPSP+1,(SP)PC158, ; PCaddr16 addr為子程序起始地址,編程時可用標(biāo)號代替。 指令機(jī)器碼:12 addrH addrL 指令調(diào)用范圍:64KB,子程序調(diào)用過程:,與轉(zhuǎn)移指令不同:轉(zhuǎn)移時,先用堆棧保存當(dāng)前地址,二絕對調(diào)用指令 ACALL addr11 ;PC PC+2,SPSP+1,(SP)PC70 ;SP SP+1,(SP) PC158,PC100addr11 addr11為子程序首地址 指令機(jī)器碼:addr1110810001,addr1170 指令調(diào)用范圍 2KB。,三子程序返回指令 RET ;PCH(SP),SPSP-1,PCL(SP),SPSP-1 指令機(jī)器碼:22H RET指令從堆棧彈出保存的PC地址,實現(xiàn)子程序返回。 RETI;PC158(SP),SPSP-1 ;PC70 (SP),SPSP-1 用于中斷子程序末尾,清除優(yōu)先級狀態(tài)位,20H 92H,21H 53H,SP,SP,SP,SP,SP,PC,2000H,208FH,2092H,2100H,2150H,2153H,2200H,2250H,2251H,2153H,2092H,21FFH,2200H,SP,SP,SP,SP,SP,SP,SP,SP,MAIN:MOV SP,#30H;設(shè)置棧底 LCALL SUB ;調(diào)用子程序 SUB: ;子程序段 RET ;返回主程序,例:子程序嵌套,注意:1.子程序起始指令要使用標(biāo)號,用作子程序名。 2. 執(zhí)行返回指令RET之前,保證棧頂內(nèi)容為主程序返回地址,以便正確返回主程序。,常用格式: MAIN: ;主程序 LCALL SUBR ;調(diào)用SUBR SUBR: ;子程序首地址 RET ;子程序返回,NOP空操作指令,NOP ; PCPC+1 常用在延時子程序中,延時一個機(jī)器周期,作業(yè),3.8 (1) 3.9 3.11 (1)3.12(1)3.13(1)3.14(1) 3.19 (1) 3.20(2) 3.22(1) 3.24 3.25,- 1.請仔細(xì)閱讀文檔,確保文檔完整性,對于不預(yù)覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
14.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計者僅對作品中獨創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 單片機(jī)指令系統(tǒng) 單片機(jī) 指令系統(tǒng) PPT 課件
鏈接地址:http://m.appdesigncorp.com/p-2742416.html