版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、2. 計(jì)算機(jī)指令系統(tǒng),2.1 指令格式,2.2 指令尋址方式,2.3 指令系統(tǒng),一. 匯編語(yǔ)言指令格式 標(biāo)號(hào):操作碼 操作數(shù)1,操作數(shù)2;注釋 換行表示一條指令結(jié)束。 例: LOOP: MOV A,#40H ;取參數(shù),1.標(biāo)號(hào):指令的符號(hào)地址 2.操作碼:指明指令功能。,3.操作數(shù):指令操作對(duì)象 數(shù)據(jù)、地址、寄存器名及約定符號(hào)。 4.注釋行:說明指令在程序中的作用。 操作碼和操作數(shù)是指令主體。,MOV_move傳送 XCH_exchange交換 ANL_and logic與邏輯運(yùn)算 XRL_exclusive or異或運(yùn)算 MUL_Multiply乘法 RR_rotate right右循環(huán) S
2、JMP_short jump短跳轉(zhuǎn) RET_return 子程序返回,2.1 指令格式,偽指令只對(duì)匯編程序提供必要的控制信息,從不產(chǎn)生任何指令代碼。,(1) ORG:起始地址偽指令。 定義程序、數(shù)據(jù)匯編存放時(shí)的起始地址。 (2) EQU:標(biāo)號(hào)或變量賦值偽指令。 用來將表達(dá)式的值賦給EQU左面的標(biāo)號(hào)或變量。 (3) END:匯編語(yǔ)言程序結(jié)束偽指令。 一般用在程序的末尾,表示程序結(jié)束。 (4) DB num: 定義字節(jié)單元偽指令 (5) DW num: 定義字單元偽指令,二. 機(jī)器語(yǔ)言指令格式,操作碼 操作數(shù)1 操作數(shù)2 有單字節(jié)、雙字節(jié)和三字節(jié)指令。,匯編語(yǔ)言指令中操作碼和操作數(shù)是指令主體,稱為
3、指令可執(zhí)行部分,指令表中可查出對(duì)應(yīng)指令代碼。,舉例: 匯編語(yǔ)言:機(jī)器語(yǔ)言: MOV A,R0E8H MOV R6,#32H7E 32H MOV 40H,#10075 40 64H,11101000,2.2 指令尋址方式,2.2.1 操作數(shù)類型 位(b) 位尋址區(qū)中的一位二進(jìn)制數(shù)據(jù) 字節(jié)(B) 8位二進(jìn)制數(shù)據(jù) 字(W) 16位雙字節(jié)數(shù)據(jù),2.2.2 尋址方式 一.立即尋址方式 指令中給出實(shí)際操作數(shù)據(jù)(立即數(shù)),一般用于為寄存器或存儲(chǔ)器賦常數(shù)初值。 舉例: 8位立即數(shù): MOV A,#40H ;A40H 16位立即數(shù): MOV DPTR,#2100H ;DPTR2100H,二.直接尋址方式,指令操
4、作數(shù)是存儲(chǔ)器單元地址,數(shù)據(jù)在存儲(chǔ)器單元中。 MOV A,40H;A(40H),直接尋址方式對(duì)數(shù)據(jù)操作時(shí),地址是固定值,而地址所指定的單元內(nèi)容為變量形式。,56H,例:設(shè)存儲(chǔ)器兩個(gè)單元的內(nèi)容如圖所示, 執(zhí)行指令 MOV A,40H后 A = ?,思考題:直接尋址方式指令和立即尋址方式指令的形式有什么不同?,指令操作數(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,三.寄存器尋址方式,四.寄存器間接尋址方式,指令的操作數(shù)為寄存器名,
5、寄存器中為數(shù)據(jù)地址。 存放地址的寄存器稱為間址寄存器或數(shù)據(jù)指針。 例:MOV A,R0;A(R0) 設(shè)指令執(zhí)行前 A=20H,R0=40H,地址為40H存儲(chǔ)器單元內(nèi)容如圖所示。執(zhí)行指令后, A= ? ,R0 = ? , (40H)= ?,34H,40H,34H,五.變址間接尋址方式 數(shù)據(jù)在存儲(chǔ)器中,指令給出的寄存器中為數(shù)據(jù)的基地址和偏移量。數(shù)據(jù)地址 = 基地址 + 偏移量。,MOVC A,A+DPTR;A(A+DPTR) 例:設(shè)指令執(zhí)行前 A=09H,DPTR=2000H,存儲(chǔ)器單元內(nèi)容如圖所示。 執(zhí)行指令后,A= ? DPTR= ?,12H,2000H,六 相對(duì)尋址 相對(duì)尋址是以當(dāng)前程序計(jì)數(shù)
6、器PC值加上指令規(guī)定的偏移量rel , 而構(gòu)成實(shí)際操作數(shù)地址的尋址方法。 它用于訪問程序存儲(chǔ)器, 常出現(xiàn)在相對(duì)轉(zhuǎn)移指令中。 在使用相對(duì)尋址時(shí)要注意以下兩點(diǎn): 第一, 當(dāng)前PC值是指相對(duì)轉(zhuǎn)移指令所在地址(一般稱為源地址)加上轉(zhuǎn)移指令字節(jié)數(shù)。 即: 當(dāng)前PC值 = 源地址 + 轉(zhuǎn)移指令字節(jié)數(shù)。 例如: JZ rel 是一條累加器A為零就轉(zhuǎn)移的雙字節(jié)指令。 若該指令地址(源地址)為2050H, 則執(zhí)行該指令時(shí)的當(dāng)前PC值即為2052H。,第二, 偏移量rel是有符號(hào)的單字節(jié)數(shù), 以補(bǔ)碼表示,其相對(duì)值的范圍是-128+127(即00HFFH), 負(fù)數(shù)表示從當(dāng)前地址向上轉(zhuǎn)移, 正數(shù)表示從當(dāng)前地址向下轉(zhuǎn)移
7、。 所以, 相對(duì)轉(zhuǎn)移指令滿足條件后, 轉(zhuǎn)移的地址(一般稱為目的地址)應(yīng)為: 目的地址 = 當(dāng)前PC值 + rel = 源地址 + 轉(zhuǎn)移指令字節(jié)數(shù) + rel例如: 指令JZ 08H和JZ 0F4H 表示累加器A為零條件滿足后, 從源地址(2050H)分別向下、 向上轉(zhuǎn)移10個(gè)單元。 其相對(duì)尋址示意如圖33(a)、 (b)所示。 這兩條指令均為雙字節(jié)指令, 機(jī)器代碼分別為: 60H 08H和60H F4H。,相對(duì)尋址示意圖 (a)指令JZ 08H尋址示意圖; (b)指令JZ F4H尋址示意圖,指令給出位地址。一位數(shù)據(jù)在存儲(chǔ)器位尋址區(qū)。 例: MOV C,40H;Cy(位地址40H) 設(shè)指令執(zhí)行前
8、 Cy=1,位地址40H存儲(chǔ)器單元如圖,執(zhí)行指令后,Cy= ?,七.位尋址方式,0,2.4XC866指令系統(tǒng)分析,指令功能分類: 數(shù)據(jù)傳送、數(shù)據(jù)操作、布爾處理、程序控制。,2.3.1 數(shù)據(jù)傳送指令 實(shí)現(xiàn)寄存器、存儲(chǔ)器之間的數(shù)據(jù)傳送。 一. 內(nèi)部傳送指令:片內(nèi)數(shù)據(jù)存儲(chǔ)器數(shù)據(jù)傳送。 二. 外部傳送指令:片外數(shù)據(jù)存儲(chǔ)器數(shù)據(jù)傳送。 三. 交換指令: 片內(nèi)數(shù)據(jù)存儲(chǔ)器數(shù)據(jù)傳送。 四. 堆棧操作指令:片內(nèi)數(shù)據(jù)存儲(chǔ)器數(shù)據(jù)傳送。 五. 查表指令: 程序存儲(chǔ)器數(shù)據(jù)傳送。,(一)內(nèi)部傳送指令:實(shí)現(xiàn)片內(nèi)數(shù)據(jù)存儲(chǔ)器中數(shù)據(jù)傳送。指令格式: MOV 目的操作數(shù),源操作數(shù) 尋址方式:立即尋址、直接尋址、寄存器尋址、寄存器間址
9、。,指令機(jī)器碼: 11101rrr E8EF 11100101 n E5 n 1110011i E6、E7 01110100 d 74 d 10101rrr n 1010011i n 85 n1 n2 90 d1 d2,MOV A,Rn ;ARn,Rn=R0R7 MOV A,n ;A(n),MOV A,Ri ;A(Ri),Ri=R0、R1 MOV A,#d ;Ad,MOV Rn,direct ;Rn(direct)MOV Ri,direct;(Ri)(direct) MOV direct1,direct2 ;(direct1)(direct2)MOV DPTR,#d1d2 ;DPTRd1d2,
10、例2.3.1:順序執(zhí)行下列指令序列,求每一步執(zhí)行結(jié)果。,MOV A,#30H MOV 4FH,A MOV R0,#20H MOV R0,4FH MOV 21H,20H,習(xí)題2:用兩種尋址方式實(shí)現(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,說明:,只有指令表中的指令才有對(duì)應(yīng)指令代碼,計(jì)算機(jī)才能執(zhí)行。編程時(shí),不能隨意創(chuàng)造發(fā)明指令。,1. 一條指令中不能同
11、時(shí)出現(xiàn)兩個(gè)工作寄存器:非法指令:MOV R1,R2MOV R2,R0,2. 間址寄存器只能使用 R0、R1。 非法指令:MOV A,R2,3. SFR區(qū)只能直接尋址,不能用寄存器間接尋址。非法指令:MOV R0,#80H(不能尋址80H-FFH)MOV A,R0,4. 指令表:B:指令字節(jié)數(shù),M:機(jī)器周期數(shù),(二) 外部傳送指令實(shí)現(xiàn)片外數(shù)據(jù)存儲(chǔ)器和A累加器之間的數(shù)據(jù)傳送。,指令格式:MOVX 目的操作數(shù),源操作數(shù) 尋址方式:片外數(shù)據(jù)存儲(chǔ)器用寄存器間址方式。 1. DPTR作16位數(shù)據(jù)指針,尋址64KB片外RAM空間MOVX A,DPTR;A(DPTR) MOVX DPTR,A;(DPTR)A
12、2. Ri作8位數(shù)據(jù)指針,尋址256B片外RAM空間 MOVXA,Ri;A(Ri) MOVXRi,A ;(Ri)A,例3.4.2:實(shí)現(xiàn)片外數(shù)據(jù)存儲(chǔ)器數(shù)據(jù)傳送(2000H)(2100H)。,MOV DPTR,#2000H MOVX A,DPTR MOV DPTR,#2100H MOVX DPTR,A,; DPTR= 2000H ; A= X ; DPTR= 2100H ;(2100H)= X,片外數(shù)據(jù)存儲(chǔ)器不能直接尋址。下列為非法指令: MOVX A,2000H MOVX 2100H,2000H,思考題: 1.為什么對(duì)DPTR的數(shù)據(jù)傳送使用內(nèi)部傳送指令? 2.將片外RAM 0000H單元的數(shù)據(jù)傳
13、送到片內(nèi)RAM的 60H單元。,(三) 交換指令 實(shí)現(xiàn)片內(nèi)RAM區(qū)的數(shù)據(jù)雙向傳送。,1. 字節(jié)交換指令 XCH A,Rn ;A Rn XCH A,Ri;A (Ri) XCH A,n ;A (n),習(xí)題4:將片內(nèi)RAM60H單元與61H單元的數(shù)據(jù)交換。,例:設(shè)A= 29H,執(zhí)行指令 XCH A,2AH后,A= ?(2AH)= ?,38H,29H,XCH 60H,61H 對(duì)嗎?,29 H,XCHD A,Ri ;A03 (Ri)03 SWAP A ;A47 A03,2. 半字節(jié)交換指令,例2-3-3:將片內(nèi)RAM 2AH和2BH單元中的ASCII碼轉(zhuǎn)換成壓縮式BCD碼存入20H單元。,0000000
14、0,10000101,08H,80H,85H,MOV A,#0,MOV R0,#2AH,MOV R1,#2BH,XCHD A,R0,SWAP A,XCHD A,R1,XCH A,20H,00110101,00,00111000,85H,R1,R0,習(xí)題:交換片內(nèi)RAM 40H單元和 41H單元的低半字節(jié)。,10000000,00001000,(四)堆棧操作指令 進(jìn)棧操作只能以直接尋址方式來取得操作數(shù) 入棧指令:PUSH direct ;SPSP+1,(SP)(direct) 出棧指令:POP direct ;(direct)(SP),SPSP-1,例:設(shè) A=02,B=56H,執(zhí)行下列指令后,
15、SP= ?,A= ? ,B= ?,ORG 0000H JMP START ORG2000H START :MOV A,#02H MOV B,#56H MOV SP,#30H PUSH ACC PUSH B MOV A,#0H MOV B,#01H POP ACC POP B END,30H 56H 02H,(五) 查表指令 實(shí)現(xiàn)從程序存儲(chǔ)器讀取數(shù)據(jù)到A累加器,只能使用變址間接尋址方式。 多用于查常數(shù)表程序,可直接求取常數(shù)表中的函數(shù)值。,1DPTR為基址寄存器 MOVCA,A+DPTR ;A(A+DPTR) 查表范圍為 64KB 程序存儲(chǔ)器任意空間,稱為遠(yuǎn)程查表指令 。 2PC為基址寄存器 MO
16、VCA,A+PC;A(A+PC) 常數(shù)表只能在查表指令后256B范圍內(nèi)。,例:查表法求Y=X2。設(shè)X(0X15)在片內(nèi)RAM的20H單元中,要求將查表求Y,存入片內(nèi)RAM21H單元。,1)ORG 0000H 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
17、;取X 1002H ADD A,#3 ;修正偏移量 1004H MOVC A,A+PC ;查表求Y=X2 1005H MOV 21H,A;存結(jié)果 1007H RET ;子程序結(jié)束 1008H TAB: DB 00,01,04 ;平方表 100BH DB 09,225,思考題:當(dāng)0X255時(shí),如何用查表法編程求Y=X2。,例:查表法求Y=X2。設(shè)X(0X15)在片內(nèi)RAM的20H單元中,要求將查表求Y,存入片內(nèi)RAM21H單元。,2-3-2算術(shù)運(yùn)算指令,與數(shù)據(jù)傳送指令不同,多數(shù)算術(shù)運(yùn)算指令會(huì)影響標(biāo)志位的狀態(tài),即CPU執(zhí)行算術(shù)運(yùn)算指令后,根據(jù)數(shù)據(jù)操作情況自動(dòng)設(shè)置標(biāo)志位的狀態(tài)。,XC866的程序狀態(tài)
18、字寄存器 PSW 的格式如下:,1標(biāo)志位(自動(dòng)設(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)志位 對(duì)于一個(gè)字節(jié)的有符號(hào)數(shù),如果運(yùn)算結(jié)果超出了 -128+127這個(gè)數(shù)值范圍,就會(huì)發(fā)生溢出,OV1,否則無(wú)溢出, OV0。 4)P:奇偶標(biāo)志位 反映累加器A中數(shù)據(jù)的奇偶性。當(dāng)1的個(gè)數(shù)為奇數(shù),P=1,否則P=0。,2用戶選擇位(編程設(shè)置狀態(tài)),1)F0:用戶自定義標(biāo)志位。2)RS1、RS0: 工作寄存器區(qū)選
19、擇位。復(fù)位時(shí),PSW=00H,例:復(fù)位后,設(shè)置使用工作寄存器2區(qū),其余標(biāo)志位不變。,解: MOV PSW,#,10H(10000),2-3-2 算術(shù)運(yùn)算指令完成片內(nèi) RAM 和 A 中數(shù)據(jù)的加減乘除運(yùn)算。,一加減指令 1.加法指令,例1:A=3BH,PSW=0,執(zhí)行指令 ADD A,#3BH 求:A= ,Cy= ,OV= ,AC= ,P= , PSW= ?,0011 1011 + 0011 1011 0111 0110,76H 0 0 1 1,01000001= 41H,2)帶進(jìn)位加法: ADDC A,源操作數(shù) 影響標(biāo)志位:Cy、OV、AC、P,例2:A= 9AH,R2= E3H,PSW= 0
20、,執(zhí)行指令 ADDC A,R2 后求: A= ,Cy= ,OV= ,AC= ,P= , PSW= ?,7DH 1 1 0 0,1001 1010 1110 0011 + 0 1 0111 1101,10000100 = 84H,;低字節(jié)相加 ;高字節(jié)相加 ;計(jì)算高字節(jié)進(jìn)位 ;子程序結(jié)束,帶進(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
21、,A MOV A,#0 ADDC A,#0 MOV 46H,A RET,2減法指令SUBB A,源操作數(shù);帶借位減法指令,例:A= 5AH,R2= 5AH,Cy= 0,執(zhí)行下列指令 SUBB A,R2 求:A= ,Cy= ,OV= ,P= ,AC= ?,00 0 0 0 0,思考題:如果需要做不帶位的減法指令(在做第一次相減時(shí)),應(yīng)該怎樣實(shí)現(xiàn)?,3. 增量、減量指令,如:INC R2 ;R2R2+1 INC DPTR;DPTRDPTR+1 和 ADD A,#1比較: 1、單字節(jié),單周期指令 2、不影響標(biāo)志位狀態(tài)。,如: DEC R2 ;R2R2-1,注意:沒有指令 DEC DPTR 可用指令
22、DEC DPL 代替,4.十進(jìn)制調(diào)整指令,DAA; 執(zhí)行該指令時(shí),判斷A中的低4位是否大于9,若滿足大于則低4位做加6操作;同樣,A中的高4位大于9則高4位加6操作。 例如:有兩個(gè)BCD數(shù)36與45相加,結(jié)果應(yīng)為BCD碼81,程序如下:MOV A,#36H ADD A,#45H DA A 得結(jié)果7BH;第三條指令對(duì)累加器A進(jìn)行十進(jìn)制調(diào)整,低4位(為0BH)大于9,因此要加6,最后得到調(diào)整的BCD碼81。,4.乘除指令,MUL AB;BAAB,Cy0, ;當(dāng)積高字節(jié)B=0,OV0;B0,則OV1,例:A= 96(60H), B= 192(C0H),執(zhí)行指令 MUL AB 后,求:A= ,B= ,
23、Cy= ,OV= ,P= ? 解: 96 192 = 18432(4800H) (高8位存于B,低8位存于A),00H 48H 0 1 0,在乘法運(yùn)算中,OV1表示乘積超過255,DIV AB ;AB,A商,B余數(shù),Cy0, ;當(dāng)除數(shù)B=0,OV1;B0,則OV0 在除法運(yùn)算中,OV1表示除數(shù)為0。,DIV,例:A= 156(F6H),B= 13(0DH),執(zhí)行指令 DIV AB 后 求:A= ,B= ,Cy= ,OV= ,P= ? 解: 156 13 = 18(12H),余數(shù)= 12(0CH)。,12H 0CH 0 0 0,算術(shù)運(yùn)算類指令,2.3.2 邏輯運(yùn)算指令,一.單操作數(shù)指令(A累加器
24、為操作數(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)右移一位,例2-3-7:設(shè) A= 11000101 ,Cy= 0,分別執(zhí)行下列單條指令: CPL A RL A RLC A,00111010 0,10001011 0,10001010 1,A= ,Cy=,A= ,Cy=,A= ,Cy=,例:編程將寄存器 R6R5 中的雙字節(jié)數(shù)X左移一位。,CLR C MOV A,R5 RLC A M
25、OV R5,A MOV A,R6 RLC A MOV R6,A,用9位循環(huán)指令實(shí)現(xiàn)多字節(jié)移位,一個(gè)暗點(diǎn)流動(dòng)的例子,ORG 0000H LJMP START ORG 30H START: MOV SP,#5FH MOV A,#80H LOOP: MOV P1,A RL A LCALL DELAY LJMP LOOP,delay: mov r7,#255 d1: mov r6,#255 d2: nop nop nop nop djnz r6,d2 djnz r7,d1 ret END,問題: 如何實(shí)現(xiàn)亮點(diǎn)流動(dòng)? 如何改變流動(dòng)的方向?,答案: 1、將A中的初始值改為7FH即可。 2、將RL A改為R
26、R A即可。,(二)雙操作數(shù)邏輯運(yùn)算指令(對(duì)應(yīng)位的邏輯運(yùn)算):ANL、ORL、XRL,思考題1:如何將累加器A中的數(shù)據(jù)高4位清0,低位不變?思考題2:如何將寄存器R2中的數(shù)據(jù)奇數(shù)位取反,偶數(shù)位不變?,例3-5-8 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置1ANL A,#0E7H;將累加器A的內(nèi)容D4、D3清0 解 :執(zhí)行上述指令后,A=100011B。,2.3.4 布爾變量操作指令 對(duì)片內(nèi)RAM中位尋址區(qū)操作。位累加器Cy和位地址b。,一位傳送 MOV C,
27、b ;Cy(b) MOV b,C ;(b)Cy,二位清0、置1、取反:CLR、SETB、CPL: CLR C ;Cy0, CLR 40H;(位地址40H) 0,例:將位地址20H的一位數(shù)傳送到位地址30H中: MOV C,20HMOV 30H,C,三邏輯運(yùn)算:ANL、ORL、CPL: ANL C,40H ;CC(40H)ANL C,/40H ;CC/(40H),例:設(shè) Cy=1,(位地址40H)=1,執(zhí)行指令 ANL C,/40H 后, Cy= ? , (位地址40H)= ?,位地址表示法:位地址 40H,位寄存器 F0(PSW里的位),字節(jié)加位 ACC.0,0,1,習(xí)題:設(shè)累加器A中數(shù)據(jù)為
28、29H,Cy=0,執(zhí)行指令 ORL C,0E3H 后,Cy= ?,2.4.1 轉(zhuǎn)移指令轉(zhuǎn)移指令通過改寫PC的當(dāng)前值,從而改變CPU執(zhí)行程序的順序,使程序發(fā)生跳轉(zhuǎn)。,按轉(zhuǎn)移條件分類: 1)無(wú)條件轉(zhuǎn)移: 執(zhí)行無(wú)條件轉(zhuǎn)移指令,程序無(wú)條件轉(zhuǎn)移到指定處。 2)條件轉(zhuǎn)移: 指令中給出轉(zhuǎn)移條件,執(zhí)行指令時(shí),先測(cè)試條件,若滿足條件,則程序發(fā)生轉(zhuǎn)移,否則,仍順序執(zhí)行程序。,一.無(wú)條件轉(zhuǎn)移指令 1.長(zhǎng)轉(zhuǎn)移指令:LJMP nn ;PC nn 指令轉(zhuǎn)移范圍:64KB,2.絕對(duì)轉(zhuǎn)移指令: AJMP pn;PCPC+2;PC100pn100 ;PC1511不變 指令轉(zhuǎn)移范圍:2KB 轉(zhuǎn)移時(shí)要求轉(zhuǎn)移前后保持 PC1511不
29、變。,3.短轉(zhuǎn)移指令: SJMP rel ;PCPC+2,PCPC+e 指令機(jī)器碼: 80H,e 相對(duì)偏移量 e為8位補(bǔ)碼。 指令轉(zhuǎn)移范圍:前128后127字節(jié),編程時(shí),用標(biāo)號(hào)代替轉(zhuǎn)移目的地址,轉(zhuǎn)移指令的操作數(shù)交給匯編程序計(jì)算。LJMP NEXT (AJMP NEXT ; SJMP NEXT) NEXT:,4間接轉(zhuǎn)移指令(多分支轉(zhuǎn)移指令) JMP A+DPTR. ;PCA+DPTR 指令機(jī)器碼 73H,指令轉(zhuǎn)移范圍64KB。,KEY: MOV DPTR,#KTAB MOV A,40H JMP A+DPTR KTAB: AJMP FUNC0 AJMP FUNC1 FUNC0: FUNC1: ,應(yīng)
30、用:處理功能鍵。 要求不同功能鍵執(zhí)行不同程序段。設(shè)每個(gè)功能鍵對(duì)應(yīng)一個(gè)鍵值 X(0XFH)。 設(shè)X已存入片內(nèi)RAM的40H單元中。 若X=0,則執(zhí)行程序段FUNC0 若X=1,則執(zhí)行程序段FUNC1 。,二條件轉(zhuǎn)移指令,1. 判零轉(zhuǎn)移指令JZ rel ;PCPC+2, ;若A=00H,PCPC+e(轉(zhuǎn)移), ;若A00H,PC不變(不轉(zhuǎn)移),條件轉(zhuǎn)移指令形成程序的分支,賦予計(jì)算機(jī)判斷決策能力轉(zhuǎn)移條件:1)標(biāo)志位的狀態(tài) 2)位地址中的狀態(tài),JNZ rel ;PCPC+2,若A00H, ;PCPC+ e(轉(zhuǎn)移) ;若A=00H,PC不變(不轉(zhuǎn)移),2.判Cy轉(zhuǎn)移指令JC rel ;Cy=1則轉(zhuǎn)移,C
31、y=0不轉(zhuǎn)移 JNC rel ;Cy=0則轉(zhuǎn)移,Cy=1不轉(zhuǎn)移,3.判位轉(zhuǎn)移指令 JB bit,e ;(b)=1轉(zhuǎn)移,否則不轉(zhuǎn)移JNB bit,e ;(b)=0轉(zhuǎn)移,否則不轉(zhuǎn)移,4. 判位清0轉(zhuǎn)移指令:JBC bit,e ;(b)=1轉(zhuǎn)移,(b)0,否則不轉(zhuǎn)移,5. 比較不相等轉(zhuǎn)移指令: CJNE 操作數(shù)1,操作數(shù)2,e,CJNE A,n,e ;PCPC+3 ;若A(n),則PCPC+e ;且當(dāng)A(n),Cy=0,當(dāng)A(n),Cy=1; ;若A =(n),PC不變,且Cy=0。,相當(dāng)于兩個(gè)操作數(shù)相減,僅影響標(biāo)志狀態(tài),不保存結(jié)果,例題:,已知VAR單元內(nèi)有一自變量X,請(qǐng)按如下條件編出求函數(shù)值Y并
32、將它存入FUNC單元的程序。 當(dāng)X大于0時(shí),Y=1; 當(dāng)X等于0時(shí),Y=0; 當(dāng)X小于0時(shí),Y=-1;,ORG0100H VARDATA30H FUNCDATA31H MOVA,VAR JZDONE;若X=0,轉(zhuǎn)到DONE JNBACC.7,POSI;若X0,轉(zhuǎn)到POSI MOVA,#0FFH;若X0,則A=-1 SJMPDONE POSI:MOVA,#01H;A=1 DONE:MOVFUNC,A;存Y值 SJMP$ END,6循環(huán)轉(zhuǎn)移指令: DJNZ 操作數(shù),e DJNZ R2,e ;PCPC+2,R2R2-1 ;若R20,PCPC+e, ;若R2=0,PC不變。,例:用于循環(huán)結(jié)構(gòu)程序。設(shè)要
33、求程序循環(huán)執(zhí)行100次 MOV R2,#100 ;設(shè)循環(huán)計(jì)數(shù)器初值 LOOP: ;多次循環(huán)程序段 DJNZ R2,LOOP;循環(huán)控制 ;循環(huán)結(jié)束,思考:當(dāng)循環(huán)計(jì)數(shù)器初值為0,循環(huán)次數(shù)有多少?,例題:,已知延時(shí)程序?yàn)椋?DELAY:MOVR2,#064H L1:MOVR3,#064H L2:DJNZR3,L2 DJNZR2,L1 RET 若系統(tǒng)的晶體振蕩頻率為12MHz,求該延時(shí)子程序的延時(shí)?,2.6.3 子程序調(diào)用和返回指令,子程序調(diào)用和返回指令也使程序發(fā)生轉(zhuǎn)移。,子程序調(diào)用過程:,與轉(zhuǎn)移指令不同:轉(zhuǎn)移時(shí),先用堆棧保存當(dāng)前 地址,三子程序返回指令 RET 指令從堆棧彈出保存的PC地址,實(shí)現(xiàn)子程
34、序返回。,一長(zhǎng)調(diào)用指令指令調(diào)用范圍:64KB LCALL nn 二絕對(duì)調(diào)用指令指令調(diào)用范圍 2KB。 ACALL pn,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)號(hào),用作子程序名。 2. 執(zhí)行返回指令
35、RET之前,保證棧頂內(nèi)容為主程序返回地址,以便正確返回主程序。,常用格式: MAIN:;主程序 LCALL SUBR;調(diào)用SUBR SUBR:;子程序首地址 RET;子程序返回,下述程序執(zhí)行后,SP= ? A= ? B= ?,ORG 0000H JMP START ORG2000H START:MOVSP, #40H; MOVA,#30H; LCALL2500H ADDA,#10H; MOVB,A L1:SJMPL1 ORG2500H; MOVDPTR,#200AH; PUSHDPL; PUSHDPH; RET,下述程序執(zhí)行后,SP= 42H? A= 40H? B= 40H?,ORG2000H
36、 2000H:MOVSP, #40H;設(shè)堆棧指針為40H 2003H:MOVA,#30H; 2005H: LCALL2500H ; 41HSP,08(41H), 42HSP, ; 20H(42H),2500HPC 2008H: ADDA,#10H; 200AH: MOVB,A 200CH: L1:SJMPL1 ORG2500H; 2500H: MOVDPTR,#200AH;SP+1SP,0AH(43H) 2503H: PUSHDPL;SP+1SP,20H(44H) 2505H: PUSHDPH;2008HPC,SP=42H 2507H: RET,Xc866特有的兩條指令,MOVC(DPTR+),A 功能:將A累加器的內(nèi)容送到以DPTR為地址的程序存儲(chǔ)器單元,并將DPTR的值加1。 TRAP 功能:軟件斷點(diǎn)指令,CPU切換到調(diào)試模式,執(zhí)行斷點(diǎn)操作。,雙字節(jié)與單字節(jié)無(wú)符號(hào)數(shù)相乘,設(shè)被乘數(shù)存于41H,40H單元中,乘數(shù)存于R4單元中,乘積存于52H、51H、50H單元中(前者為高字節(jié),后者為低字節(jié))。請(qǐng)編寫此乘法程序段,MOVB,40H MOVAR4 MULAB MOV50H,A MOV40H,B MOVB,41H MOVAR4 MULAB MOV51H,A MOV52H,B,MOVA,40H CLRC AD
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度物流園區(qū)裝卸搬運(yùn)服務(wù)合作協(xié)議范本
- 2025年度跟崗實(shí)習(xí)教師教育實(shí)習(xí)基地建設(shè)與運(yùn)營(yíng)合作協(xié)議
- 二零二五年度解除合同終止合同模板:人工智能輔助醫(yī)療合同終止協(xié)議
- 二零二五年度自媒體賬號(hào)內(nèi)容孵化與投資合作協(xié)議
- 二零二五年度研學(xué)旅行住宿服務(wù)合作協(xié)議
- 二零二五年度房屋買賣合同簽訂中的合同效力與法律適用
- 2025年度環(huán)保材料生產(chǎn)加工項(xiàng)目合同
- 二零二五年度KTV裝修合同-音樂燈光設(shè)計(jì)
- 2025年度私人公司股權(quán)轉(zhuǎn)讓與知識(shí)產(chǎn)權(quán)保護(hù)合同
- 預(yù)處理線性代數(shù)
- 物流無(wú)人機(jī)垂直起降場(chǎng)選址與建設(shè)規(guī)范
- 肺炎臨床路徑
- 外科手術(shù)鋪巾順序
- 創(chuàng)新者的窘境讀書課件
- 綜合素質(zhì)提升培訓(xùn)全面提升個(gè)人綜合素質(zhì)
- 如何克服高中生的社交恐懼癥
- 聚焦任務(wù)的學(xué)習(xí)設(shè)計(jì)作業(yè)改革新視角
- 移動(dòng)商務(wù)內(nèi)容運(yùn)營(yíng)(吳洪貴)任務(wù)三 APP的品牌建立與價(jià)值提供
- 電子競(jìng)技范文10篇
- 食堂服務(wù)質(zhì)量控制方案與保障措施
- VI設(shè)計(jì)輔助圖形設(shè)計(jì)(2022版)
評(píng)論
0/150
提交評(píng)論