版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第3章 指令系統(tǒng),Exit,,,熟悉89C51匯編語(yǔ)言指令的格式;掌握89C51的7種尋址方式,并能實(shí)際應(yīng)用,學(xué)會(huì)計(jì)算目標(biāo)地址或偏移量;熟記89C51的111條匯編指令,并會(huì)根據(jù)題目要求編制匯編語(yǔ)言程序;熟記指令的功能、操作的對(duì)象和結(jié)果以及指令執(zhí)行后對(duì)PSW各位的影響。,§3.3 89C51指令系統(tǒng),§3.1 匯編語(yǔ)言,§3.2 尋址方式,§3.1 匯編語(yǔ)言,§
2、3.1.1 指令和程序設(shè)計(jì)語(yǔ)言§3.1.2 指令格式,BACK,,,§3.1.1 指令和程序設(shè)計(jì)語(yǔ)言,指令:是CPU根據(jù)人的意圖來(lái)執(zhí)行某種操作的命令。,程序設(shè)計(jì)語(yǔ)言:是實(shí)現(xiàn)人機(jī)交換信息的基本工具,分為機(jī)器語(yǔ)言、匯編語(yǔ)言和高級(jí)語(yǔ)言。,機(jī)器語(yǔ)言:用二進(jìn)制編碼表示每條指令,是計(jì)算機(jī)能直接識(shí)別和執(zhí)行的語(yǔ)言。,匯編語(yǔ)言:是用助記符、符號(hào)和數(shù)字等來(lái)表示指令的程序設(shè)計(jì)語(yǔ)言。它與機(jī)器語(yǔ)言指令是一一對(duì)應(yīng)的。,程序:根據(jù)人的要求
3、編排的指令序列稱為程序。,§3.1.2 指令格式,89C51匯編語(yǔ)言指令格式操作碼 [目的操作數(shù)][,源操作數(shù)][;注釋]匯編語(yǔ)言指令對(duì)應(yīng)的二進(jìn)制代碼格式單字節(jié)指令雙字節(jié)指令三字節(jié)指令,,,單字節(jié)指令(49條),1、指令碼中隱含著對(duì)某一種寄存器的操作如:指令“INC DPTR”的指令代碼格式為:A3H= 1 0 1 0 0 0 1 12、由指令中的rrr三位的不同編碼指定某一寄存器如:指令“MOV A
4、,Rn”的指令代碼格式為:1 1 1 0 1 r r r,雙字節(jié)指令(45條),用一個(gè)字節(jié)表示操作碼,另一個(gè)字節(jié)表示操作數(shù)或操作數(shù)所在的地址。格式為:,,,BACK,三字節(jié)指令(17條),一個(gè)字節(jié)操作碼,兩個(gè)字節(jié)操作數(shù)。格式為:,§3.2 尋址方式,尋址方式:尋找操作數(shù)所在地址的存儲(chǔ)空間,并把操作數(shù)提取出來(lái)的方法( 指定操作數(shù)存放位置的方法)。 1、7種尋址方式
5、 2、尋址空間及符號(hào)注釋,符號(hào)注釋,Rn(n=0~7):當(dāng)前選中的工作寄存器組R0~R7。Ri(i=0,1):作為地址指針的兩個(gè)工作寄存器R0,R1。#data:8位立即數(shù)。#data16:16位立即數(shù)。direct:8位片內(nèi)RAM單元(包括SFR)的直接地址。addr11:11位目的地址,用于ACALL和AJMP指令中。addr16:16位目的地址。用于LCALL和LJMP指令中。rel:補(bǔ)碼表示的8位地址偏移量。
6、范圍:-128~+127D。bit:片內(nèi)RAM或SFR的直接尋址位地址。@:間接寄存器的符號(hào)。/:位操作指令中對(duì)該位先取反再參與操作,不影響原值。(×):×中的內(nèi)容。((×)):×指出的地址單元中的內(nèi)容?!褐噶畈僮髁鞒谭较颉?1. 7種尋址方式:,1)寄存器尋址2)直接尋址3)立即數(shù)尋址4)寄存器間接尋址 5)變址尋址6)相對(duì)尋址 7)位尋址,(1)寄存器尋址,寄存器尋
7、址:由指令指出寄存器組R0~R7中的某一個(gè)或其他寄存器(A,B,DPTR等)的內(nèi)容作為操作數(shù)。例如:MOV A,R0 ;(R0)→A MOV P1,A ;(A)→P1口 ADD A,R0 ;(A)+(R0)→A,(2)直接尋址,直接尋址方式:在指令中直接給出操作數(shù)所在存儲(chǔ)單元的地址。指令中操作數(shù)部分是操作數(shù)所在地址。 直接
8、尋址方式可訪問(wèn)片內(nèi)RAM的 128個(gè)單元以及所有的SFR。對(duì)于SFR,既可以使用它們的地址,也可以使用它們的名字。例如:MOV A,3AH ;(3AH) →A MOV A,P1 ;(P1口) →A 或: MOV A,90H ; 90H是P1口的地址,(3)立即數(shù)尋址,立即數(shù)尋址:指令操作碼后面緊跟的是一字節(jié)或兩字節(jié)操作數(shù),用“#
9、”號(hào)表示,以區(qū)別直接地址。例如:MOV A,3AH ;(3AH)→AMOV A,#3AH ; 3AH→AMOV DPTR,#2000H ;2000H→DPTR ;(DPH)=20H ;(DPL)=00H,(4
10、)寄存器間接尋址,寄存器間接尋址:操作數(shù)的地址事先存放在某個(gè)寄存器中,寄存器間接尋址是把指定寄存器的內(nèi)容作為地址,由該地址所指定的單元內(nèi)容作為操作數(shù)。 89C51規(guī)定R0或R1為間接尋址寄存器,它可尋址內(nèi)部地址RAM低位的128B單元內(nèi)容。還可采用DPTR作為間接尋址寄存器,尋址外部數(shù)據(jù)存儲(chǔ)器的64KB空間。 但不能用這種尋址方式尋址特殊功能寄存器。,例如:將片內(nèi)RAM 65H單元內(nèi)容47H送A,可執(zhí)行指令
11、“MOV A,@R0”。其中R0內(nèi)容為65H。如圖所示:,65H,47H,R0,A,數(shù)據(jù)存儲(chǔ)器,地址,┋,┋,65H,,①,②,以指令中所指定的R0內(nèi)容(65H)為指針,將片內(nèi)RAM 65H單元內(nèi)容47H送A,(5)變址尋址(基址寄存器+變址寄存器間接尋址),變址尋址:以某個(gè)寄存器的內(nèi)容為基地址,在這個(gè)基地址的基礎(chǔ)上加上地址偏移量形成真正的操作數(shù)地址。89C51中采用DPTR或PC為變址寄存器,A的內(nèi)容為地址偏移量。變址尋址只能
12、訪問(wèn)程序存儲(chǔ)器(只能讀不能寫(xiě)),訪問(wèn)范圍為64KB。這種尋址方式多用于查表。例如,例如:MOVC A,@A+DPTR ;((A)+(DPTR))→A,(6)相對(duì)尋址,相對(duì)尋址:是以當(dāng)前的PC值加上指令中規(guī)定的偏移量rel而形成實(shí)際的轉(zhuǎn)移地址。 相對(duì)尋址只出現(xiàn)在相對(duì)轉(zhuǎn)移指令中。 當(dāng)前的PC值是指執(zhí)行完相對(duì)指令后的PC值;相對(duì)轉(zhuǎn)移指令操作碼所在地址稱為源
13、地址;轉(zhuǎn)移后的地址稱為目的地址。目的地址=源地址+2(相對(duì)轉(zhuǎn)移指令字節(jié)數(shù))+rel rel為補(bǔ)碼表示的有符號(hào)數(shù)。 相對(duì)轉(zhuǎn)移分正向跳轉(zhuǎn)和反向跳轉(zhuǎn):,正向跳轉(zhuǎn)時(shí):rel=目的地址-源地址-2 =地址差-2,反向跳轉(zhuǎn)時(shí): rel=(目的地址-(源地址+2)) =FFH-(源地址+2-目的
14、地址)+1 =100H- (源地址+2-目的地址) =FEH-|地址差|,(7)位尋址,位尋址:采用位尋址方式的指令的操作數(shù)是8位二進(jìn)制數(shù)中的某一位,指令中給出的是位地址。位地址在指令中用bit表示。 例如:CLR bit;位地址的兩種表示方法:直接使用位地址,如D3H;直接用寄存器名字加位數(shù),如PSW.3。位尋址區(qū)域:
15、片內(nèi)RAM的20H-2FH的16個(gè)單元中的128位;字節(jié)地址能被8整除的SFR。,2、尋址空間及符號(hào)注釋,(1)尋址空間:見(jiàn)表3-2(2)符號(hào)注釋:,表3-2 操作數(shù)尋址方式和有關(guān)空間,符號(hào)注釋,Rn(n=0~7):當(dāng)前選中的工作寄存器組R0~R7。Ri(i=0,1):作為地址指針的兩個(gè)工作寄存器R0,R1。#data:8位立即數(shù)。#data16:16位立即數(shù)。direct:8位片內(nèi)RAM單元(包括SFR)的直接地址。a
16、ddr11:11位目的地址,用于ACALL和AJMP指令中。addr16:16位目的地址。用于LCALL和LJMP指令中。rel:補(bǔ)碼表示的8位地址偏移量。范圍:-128~+127D。bit:片內(nèi)RAM或SFR的直接尋址位地址。@:間接寄存器的符號(hào)。/:位操作指令中對(duì)該位先取反再參與操作,不影響原值。(×):×中的內(nèi)容。((×)):×指出的地址單元中的內(nèi)容?!褐噶畈僮髁鞒谭较?。,
17、概述: 89C51指令系統(tǒng)由111條指令組成。其中,單字節(jié)指令49條,雙字節(jié)指令45條,三字節(jié)指令17條。 從指令執(zhí)行時(shí)間看,單周期指令64條,雙周期45條,只有乘、除指令為4個(gè)周期。,§3.3 89C51指令系統(tǒng),89C51 指令系統(tǒng)可分為五大類,?[1] 數(shù)據(jù)傳送指令:28條?[2] 算術(shù)運(yùn)算指令:24條?[3] 邏輯運(yùn)算及移位指令:25條?[4] 控制轉(zhuǎn)移指令:17條?[5]
18、 位操作指令(布爾操作):17條,Back,,,,§3.3.1 數(shù)據(jù)傳送指令,◆以累加器A為目的操作數(shù)的指令(4條,即4種尋址方式)2. ◆以寄存器Rn為目的操作數(shù)的指令(3條)3. ◆以直接地址為目的操作數(shù)的指令(5條)4. ◆以間接地址為目的操作數(shù)的指令(3條)5. ◆十六位數(shù)據(jù)傳送指令(1條)6. ◆查表指令(2條)7. ◆累加器A與片外RAM傳送指令(4條)8. ◆棧操作指令(2條)9. ◆交換指令(4
19、條),1 .以累加器A為目的操作數(shù)的指令(4條,即4種尋址方式),例:,,MOV A,#30H ;(A)=30H MOV A, 30H ;(A)=11H MOV A,@R1 ;(A)=11H MOV A,R1 ;(A)=30H,,,例:30H單元內(nèi)容為11H,R1中為30H,Back,2 、以寄存器Rn為目的操作數(shù)的指令(3條),這組指令的功能是把源操作數(shù)所指定的內(nèi)容送到當(dāng)前工作寄存器
20、組R0-R7中的某個(gè)寄存器。源操作數(shù)有寄存器尋址、直接尋址和立即數(shù)尋址三種方式。,如:(A)=78H,(R5)=47H,(70H)=F2H, 執(zhí)行指令:,MOV R5,A ;(A)→R5,(R5)=78HMOV R5,70H ;(70H)→R5,(R5)=F2HMOV R5,#A3H ; A3H→R5,(R5)=A3H?注意: 在89C51指令系統(tǒng)中沒(méi)有“MOV Rn,Rn”傳送指令。,3
21、 、以直接地址為目的操作數(shù)的指令(5條),,這組指令的功能是把源操作數(shù)所指定的內(nèi)容送入由直接地址direct所指出的片內(nèi)存儲(chǔ)單元中。源操作數(shù)有寄存器尋址,直接尋址,寄存器間接尋址和立即尋址等方式。,4 、以間接地址為目的操作數(shù)的指令(3條),(Ri)表示Ri中的內(nèi)容為指定的RAM單元。,匯編格式 機(jī)器碼 操 作 注 釋,MOV @Ri,A ;
22、 1111 011i (A)→(Ri) 將累加器A中內(nèi)容傳送到 間接尋址(Ri為R0或R1)
23、 所得的片內(nèi)RAM單元中。,MOV @Ri,direct ; 0101 011i (direct)→(Ri) 將直接尋址得的片內(nèi)RAM direct單元內(nèi)容或特殊功能
24、 寄存器中內(nèi)容傳送到間接尋 址(Ri為R0或R1)所得的
25、 片內(nèi)RAM單元中。,MOV @Ri,#data; 0111 011i #data→(Ri) 將立即數(shù)傳送到間接尋 data 址
26、(Ri為R0或R1)所得 的片內(nèi)RAM單元中。,MOV指令在片內(nèi)存儲(chǔ)器的操作功能如圖3.2-1示。,圖3.2-1 傳送指令在片內(nèi)存儲(chǔ)器的操作功能,5、 十六位數(shù)據(jù)傳送指令(1條),這條指令的功能是把16位常數(shù)送入DPTR。DPTR由DPH和DPL組成。,例:MOV DP
27、TR #1000H; (DPTR)=1000H, (DPH)=10H, (DPL)=00H,6 、查表指令(2條),例如,上述兩條指令的操作過(guò)程如圖3.2-2所示。,基地址寄存器+變址寄存器間接尋址@PC+A(程序存儲(chǔ)器0-64K),基地址寄存器+變址寄存 器間接尋址@DPTR+A(程序存儲(chǔ)
28、器0-64K),A寄存器,,,圖3.2-2 程序存貯器傳送,,,Back,,,執(zhí)行下面程序段后結(jié)果如何?,MOV DPTR, #2000H ;(DPTR)=2000HMOV A , #0AH ;(A)=0AHMOVC A, @A+DPTR ;(A)=(200AH)=11H,例1:若ROM 內(nèi)容為:2000H 00H2001H 01H2002H 09H2003H 04H2004H 06H2005H
29、 08H2006H FFH2007H 66H2008H 45H2009H ABH200AH 11H,Back,例2 : 若ROM內(nèi)容為: 100FH01H1010H 02H1011H 03H1012H 04H,所以,最后結(jié)果為:(A)=02H (R0)=02H (PC)=1004H,,,,,執(zhí)行下面程序后的結(jié)果如何? 1000H 74 0D
30、 MOV A, #0DH ;(A)=0DH1002H 83 MOVC A, @A+PC ;(PC)=1002+1=1003H, (A)=((A)+(PC))
31、 =(0D+1003) =(1010H) (A)=02H1003H
32、F8 MOV R0, A ; (R0)=(A)=02H,7、 累加器A與片外RAM傳送指令(4條),在89C51指令系統(tǒng)中,CPU對(duì)片外RAM的訪問(wèn)只能用寄存器間接尋址的方式,且僅有四條指令:,第2,4兩條指令以DPTR為片外數(shù)據(jù)存儲(chǔ)器16位地址指針,尋址范圍達(dá)64KB。其功能是DPTR所指定的片外數(shù)據(jù)存儲(chǔ)器與累加器A之間傳送數(shù)據(jù)。第1,3兩條指令是用R0或R1作低8位地址指針,由
33、P0口送出,尋址范圍是256字節(jié)。這兩條指令完成以R0或R1為地址指針的片外數(shù)據(jù)存儲(chǔ)器與累加器A之間的傳送數(shù)據(jù)。上述四條指令的操作如 圖3.2-3所示 :例如,,若片外數(shù)據(jù)存儲(chǔ)器的地址空間上有片外I/O接口芯片,則上述指令就是89C51的輸入/輸出指令。,例: 若片內(nèi)RAM (30H)=01H,片外RAM (30H)=02H, 執(zhí)行下面程序段后的結(jié)果如何。,MOV R1, #30H ;(R1)=30HM
34、OVX A, @R1 ;(A)=02HMOV R0, A ;(R0)=(A)=02HMOV A,@R1 ;(A)=((R1))=01HMOV R2, A ;(R2)=(A)=01H,8 、棧操作指令(2條),在89C51片內(nèi)的128字節(jié)單元中,可設(shè)定一個(gè)區(qū)域作為堆棧(一般可設(shè)在30H~7FH單元中),棧頂有堆棧指針SP指出,89C51復(fù)位后為07H,若要更改,需重新賦值。,注:PUSH和P
35、OP操作不影響標(biāo)志位。,例:MOV SP, #18H; (SP)=18HMOV A, #30H; (A)=30HMOV DPTR, #1000H; (DPTR)=1000HPUSH A; (SP)=19H(19H)=30HPUSH DPH; (SP)=1AH(1AH)=10HPUSH DPL; (SP)=1BH(1BH)=00H POP DPL; (DPL)=00H
36、 (SP)=1AHPOP DPH; (DPH)=10H (SP)=19HPOP A ; (A)=30H (SP)=18H,9、 交換指令(4條),(1)字節(jié)交換指令,例:初始時(shí):(A)=34H,(30H)=11HXCH A, 30H ;(A)=11H,(30H)=34HMOV R1, #30H ;(R1)=30HXCH A, @R1 ;(A
37、)=34H,(30H)=11H,(2) 半字節(jié)交換指令,第一條指令為低半字節(jié)交換指令。該指令將累加器A的低4位與R0或R1所指出的片內(nèi)RAM單元的低4位數(shù)據(jù)相互交換,各自的高4位不變,其操作表示為:,如:(R1)=30H,(30H)=11H,(A)=34H則:XCHD A, @R1 ; (A)=31H ; (30H)=14H SWAP A ; (A)=13H,第二條指令為A的低四位與高四位
38、交換指令。該指令將累加器A的低4位與A的高4位數(shù)據(jù)相互交換。,§3.3.2 算術(shù)運(yùn)算指令,1 .不帶進(jìn)位加法指令(4條)2 .帶進(jìn)位加法指令(4條)3 .帶借位減法指令(4條)4 .乘法指令(1條)5、除法指令(1條)6、加1指令(5條)7、減1指令(4條)8、十進(jìn)制調(diào)整指令(1條),1.不帶進(jìn)位加法指令(4條),說(shuō)明:上述指令的執(zhí)行將影響標(biāo)志位AC,Cy,OV,P。當(dāng)“和”的第3位或第7位有進(jìn)位時(shí),分別將A
39、C,CY標(biāo)志位置1,否則為0。溢出標(biāo)志位OV=C7 + C6(異或),該標(biāo)志位只有帶符號(hào)數(shù)運(yùn)算時(shí)才有用。,,例:若:(A)=78H ,(R0)=64H執(zhí)行ADD A,R0 后,結(jié)果及PSW=? (A):78H= 0111 1000 B +(R0):64H= 0110 0100 B (A):DCH= 1101 1100 B標(biāo)志位:CY=0, AC=0, OV=1, P=1
40、, 即: PSW=05H 結(jié)果: (A)=DCH (R0)=64H,2.帶進(jìn)位加法指令(4條),說(shuō)明:本組指令的功能是同時(shí)把源操作數(shù)所指出的內(nèi)容和進(jìn)位標(biāo)志未CY都加到累加器A中,結(jié)果存放到A中,其余的功能和上面的ADD指令相同。本組指令常用于多字節(jié)加法。,例:設(shè)(A)=0C3H,(R0)=0AAH, (CY)=1。執(zhí)行指令“ADDC A,R0”后的結(jié)果及標(biāo)志位如何?解: (A)
41、: C3H=1100 0011 + (CY): 1=0000 0001 1100 0100 + (R0): AAH=1010 1010 (A): 6EH=0110 1110 標(biāo)志位:CY=1,OV=1,AC=0, 結(jié)果:(A)=6EH,(R0)=0AAH。,例:編程,將(30H),(31H)單元中的
42、數(shù)與(40H),(41H)單元中的數(shù)相加,結(jié)果存于(30H),(31H)單元中。,解:MOV A, 30HADD A, 40HMOV 30H, AMOV A, 31HADDC A, 41HMOV 31H, A,3、帶借位減法指令(4條),,說(shuō)明:這組指令的功能是從累加器A中減去源操作數(shù)所指出的數(shù)及進(jìn)位位CY的值,差保留在累加器A中。 由于89C51指令系統(tǒng)中沒(méi)有不帶借位的減法指令,如需要的
43、話,可以在“SUBB”指令前用“CLR C”指令將Cy清0,這一點(diǎn)必須注意。,例:設(shè)(A)=0C9H,(R2)=54H,Cy=1。 執(zhí)行指令“SUBB A, R2”的結(jié)果如何?,解:(A)=0C9H= 11001001 B- ) Cy= 1 = 00000001 B 11001000 B -) (R2)=54H = 01010
44、100 B (A)=74H = 01110100 B結(jié)果為:(A)=74H標(biāo)志位為:Cy=0 AC=0 OV=1 P=0,4、 乘法指令(1條),該指令若乘積大于0FFH,則OV置1,否則OV清0。Cy位總是被清0。,該指令將累加器A和寄存器B中兩個(gè)無(wú)符號(hào)數(shù)相乘,所得16位積的低字節(jié)存放在A中,高字節(jié)存放中B中。,例:(A)=4EH,(B)=5DH,執(zhí)行指令“MUL AB”后結(jié)果如何?,解
45、: 結(jié)果為:(B)=1CH, (A)=56H, 表示積(BA)=1C56H,OV=1,CY=0。,5、除法指令(1條),例:(A)=BFH,(B)=32H。 執(zhí)行指令“DIV AB”后: 結(jié)果為(A)=03H,(B)=29H; 標(biāo)志位 CY=0,OV=0。,該指令執(zhí)行后,CY和OV均被清0。若原(B)=00H,則結(jié)果無(wú)法確定,用OV=1表示,
46、CY仍為0。,6、加1指令(5條),該組指令的操作不影響PSW。若原單元內(nèi)容為FFH,加1后溢出為00H,也不影響PSW標(biāo)志。,例:比較指令“INC A”和“ADD A,#01H”的結(jié)果。解:“INC A”指令只將A的內(nèi)容加1,標(biāo)志位沒(méi)有變化。而“ADD A,#01H”指令不僅將A的內(nèi)容加1,還影響標(biāo)志位變化。,例: 若:(R1)=30H ,(30H)=11H 求執(zhí)行下面指令后的結(jié)果。INC @R1
47、 ; (30H)=12HINC R1 ; (R1)=31H,解:結(jié)果為:(30H)=12H,(R1)=31H。 不影響PSW.,7、減1指令(4條),,,該組指令的操作不影響PSW。,Back,8、十進(jìn)制調(diào)整指令(1條),☆ 該指令調(diào)整累加器內(nèi)容為BCD碼?!?這條指令跟在ADD或ADDC指令后,準(zhǔn)確地說(shuō)是十進(jìn)制加法調(diào)整指令,將相加后存放在累加器中的結(jié)果進(jìn)行十進(jìn)制調(diào)整,完成十進(jìn)制加法運(yùn)算
48、功能?!?必須注意,本指令不能簡(jiǎn)單地把累加器A的16進(jìn)制數(shù)變換成BCD碼,也不能用于十進(jìn)制減法的調(diào)整。,例: 設(shè)累加器A內(nèi)容為:01010110B(即為56的BCD碼),寄存器R3的內(nèi)容為01100111B(即67的BCD碼),CY內(nèi)容為1。求執(zhí)行下列指令后的結(jié)果。 ADDC A,R3;DA A;,解:先執(zhí)行 ADDC A,R3; (A): 0101 0110 BCD:56
49、 (R3): 0110 0111 BCD:67 (+)(CY): 0000 0001 BCD:01 和 : 1011 1110即(A)=1011 1110 且影響標(biāo)志位 CY=0,AC=0;,再執(zhí)行DA A; 因?yàn)锳中的高四位值為11,大于9,低四位值為14,也大于9,所以內(nèi)部調(diào)整自動(dòng)進(jìn)行加66H的操作: 1011 1110 調(diào)整+) 0110 0110
50、 1 0010 0100 BCD:124 即(A)=0010 0100=24BCD,CY=1;AC=1。,§3.3.3 邏輯操作指令,,,邏輯操作指令包括:與、或、異或、清除、求反、移位等操作。該指令組全部操作數(shù)都是8位25條指令。,? 1.簡(jiǎn)單操作指令(2條)? 2.移位指令(4條)? 3.邏輯“與”指令(6條)? 4. 邏輯“或”
51、指令(6條)? 5. 邏輯“異或”指令(6條),Back,1 .簡(jiǎn)單操作指令(2條),2 .移位指令(4條),我們通常用RLC A指令將累加器A的內(nèi)容做乘2運(yùn)算。,例如:無(wú)符號(hào)8位二進(jìn)制數(shù) (A)=10111101B=BDH,(CY)=0。 將(A)乘2,執(zhí)行指令 “RLC A”后結(jié)果:(A)=0111 1010B=7AH,(CY)=1,而7AH正是BDH的2倍。,3. 邏輯“與”指令(6條),這組指令中前四條指令
52、是將累加器A的內(nèi)容和操作數(shù)所指出的內(nèi)容按位進(jìn)行邏輯“與”,結(jié)果存放在A中。 后兩條指令是將直接地址單元中的內(nèi)容和操作數(shù)所指出的單元的內(nèi)容按位進(jìn)行邏輯“與”,結(jié)果存入直接地址單元中。若直接地址正好是I/O端口,則為“讀——改——寫(xiě)”操作。,4. 邏輯“或”指令(6條),這組指令的功能是將兩個(gè)指定的操作數(shù)按位進(jìn)行邏輯“或”,前四條指令的操作結(jié)果存放在累加器A中,后兩條指令的操作結(jié)果存放在直接地址單元中(讀—修改—寫(xiě)功能)。,5 .邏輯
53、“異或”指令(6條),這組指令的功能是將兩個(gè)指定的操作數(shù)按位進(jìn)行“異或”,前四條指令的結(jié)果存放在累加器A中,后兩條指令的操作結(jié)果存放在直接地址單元中(讀—修改—寫(xiě)功能)。這類指令的操作均只影響標(biāo)志位P。,§3.3.4 控制程序轉(zhuǎn)移類指令,? 1 . 無(wú)條件轉(zhuǎn)移指令(4條)? 2 . 空操作指令(1條)? 3 . 條件轉(zhuǎn)移指令(8條)? 4 . 調(diào)用和返回指令(4條),89C51單片機(jī)有豐富的轉(zhuǎn)移類指令(17條
54、),包括無(wú)條件轉(zhuǎn)移、條件轉(zhuǎn)移和調(diào)用指令及返回指令等。所有這些指令的目標(biāo)地址都是在64K字節(jié)程序存儲(chǔ)器地址空間范圍內(nèi)。,1、無(wú)條件轉(zhuǎn)移指令(4條),無(wú)條件轉(zhuǎn)移指令是當(dāng)程序執(zhí)行到該指令時(shí),程序無(wú)條件的轉(zhuǎn)移到指令所提供的地址處執(zhí)行。無(wú)條件轉(zhuǎn)移指令有長(zhǎng)轉(zhuǎn)移、短轉(zhuǎn)移、相對(duì)轉(zhuǎn)移和間接轉(zhuǎn)移4條指令。,(1) 長(zhǎng)轉(zhuǎn)移指令,指令提供16位目標(biāo)地址,將指令的第二、第三字節(jié)地址碼分別裝入PC的高8位和低8位中,程序無(wú)條件轉(zhuǎn)向指定的目標(biāo)地址去執(zhí)行。由于直接提供
55、16位目標(biāo)地址,所以程序可轉(zhuǎn)向64K程序存儲(chǔ)器地址空間的任何單元。,19:58,例:若程序存儲(chǔ)器中,指令 LJMP LOOP 的首地址為1000H,其轉(zhuǎn)向的目標(biāo)地址為1234H,執(zhí)行下列程序:ORG 1000H LJMP LOOP ┇ ORG 1234H
56、 LOOP: MOV A, R2 ┇此時(shí)指令 機(jī)器碼為: 02H 12H 34H,(2) 短轉(zhuǎn)移指令(絕對(duì)轉(zhuǎn)移),這條指令提供了11位地址,可在2K范圍內(nèi)無(wú)條件轉(zhuǎn)移到由a10-a0所指出的地址單元中。 因?yàn)橹噶钪惶峁┑?1位地址,高5位為原PC11-15位值不變,因此,轉(zhuǎn)移的目標(biāo)地址必須在
57、AJMP指令后面指令的第一個(gè)字節(jié)開(kāi)始的同一2K字節(jié)范圍內(nèi)。,19:58,例1: ORG0500H 0500H: AJMP0703H 分析: 0703H=0000 0111 0000 0011 B Addr11= 111 0000 0011 B 指令地址PC=0500H
58、 即:PC =0000 0101 0000 0000B 該指令為二字節(jié)指令在執(zhí)行時(shí)先PC+2,(PC=0502H=0000 0101 0000 0010B,PC的高五位為:0000 0B,與0703H的高五位相同,在同一個(gè)2k范圍內(nèi)。)然后將Addr11送PC的低11位: PC= 0000 0 111 0000 0011 B.指令
59、的機(jī)器碼:a10 a9 a8 0 0001 =1110 0001= E1H a7 -a0 =0000 0011= 03H,例2: ORG 0700H 0700H: AJMP 0832H 分析:0832H=0000 1000
60、0011 0010 B Addr11= 000 0011 0010 B 指令地址PC=0700H 即:PC =0000 0111 0000 0000B 該指令為二字節(jié)指令在執(zhí)行時(shí)先PC+2,(PC=0702H=0000 0111 0000 0010B,PC的高五位為:0000 0B ,與0832H的高五位不同,不在同一個(gè)2k范圍內(nèi)。)該指令跨越2k的范圍,錯(cuò)誤。,(3)
61、相對(duì) 轉(zhuǎn)移(短轉(zhuǎn)移)指令,指令的操作數(shù)是相對(duì)地址,rel是一個(gè)帶符號(hào)的偏移字節(jié)數(shù)(補(bǔ)碼表示),其范圍為-128~+127,負(fù)數(shù)表示反向轉(zhuǎn)移,正數(shù)表示正向轉(zhuǎn)移。該指令為二字節(jié),執(zhí)行時(shí)先將PC內(nèi)容加2,再加相對(duì)地址,就得到了轉(zhuǎn)移目標(biāo)地址。,例1:1000H SJMP 55H其轉(zhuǎn)移目的地址=?解:∵rel=55H=0101 0101B,為正數(shù)。∴目的 PC=1000H+2+rel =1002H+55H
62、 =1057H,例2:1000H SJMP F6H; 其轉(zhuǎn)移目的地址=?解:∵rel=F6H=1111 0110B為負(fù)數(shù),表示向低地址方向轉(zhuǎn)移。 ∴目的 PC=1000H+2+rel=1002H+F6H 不能直接相加, 要先計(jì)算出F6H的真值。即: F6H=1111 0110B取反加1后為:0000 1010B=0AH ∴目的 PC=1002H+
63、(F6H)真 =1002H-0AH =0FF8H,例3 指令碼 源程序ORG1000H1000H:E4HCLRA1001H:78H 30HMOVR0, #30H1003H:C3HCLRC1004H:36HLOOP:ADDC A, @R01005H:F6HMOV@R0,A1006H:08H
64、INCR01007H: 02H 10H 04HLJMPLOOP (1007H: 01H 04H)(AJMP LOOP)(1007H: 80H FBH)(SJMP LOOP),AJMP LOOP 指令的機(jī)器碼:Addr11=000 0000 01000000 0001 =01H0000 0100 =04H,SJMP LOOP 指令的機(jī)器碼: 80H relrel=目的地址-(源地址+2)=10
65、04H-(1007H+2)=FBH,(4)間接 轉(zhuǎn)移指令(散轉(zhuǎn)),該指令的轉(zhuǎn)移地址由數(shù)據(jù)指針DPTR的16位數(shù)和累加器A的8位數(shù)作無(wú)符號(hào)數(shù)相加形成,并直接送入。指令執(zhí)行過(guò)程對(duì)DPTR、A和標(biāo)志位均無(wú)影響。這條指令可代替眾多的判別跳轉(zhuǎn)指令,具有散轉(zhuǎn)功能。,例如:根據(jù)累加器A中命令鍵鍵值,設(shè)計(jì)命令鍵操作程序入口跳轉(zhuǎn)表: CLR C
66、 ;清進(jìn)位 RLC A ;鍵值乘2 MOV DPTR,#JPTAB ;指向命令鍵跳轉(zhuǎn)表首址 JMP @A+DPTR ;散轉(zhuǎn)到命令鍵入口JPTAB:AJMP CCS0 ;雙字節(jié)指令 AJMP CCS1
67、 AJMP CCS2 ┇,從程序中看出,當(dāng)(A)=00H時(shí),散轉(zhuǎn)到CCS0;當(dāng)(A)=01H時(shí),散轉(zhuǎn)到CCS1;……。由于AJMP是雙字節(jié)指令,散轉(zhuǎn)前中的鍵值應(yīng)乘2。,,,2、空操作指令(1條),這是一條單字節(jié)指令,除PC加1外,不影響其它寄存器和標(biāo)志位。“NOP”指令常用于產(chǎn)生一個(gè)機(jī)器周期的延遲。,Back,3 、條件轉(zhuǎn)移指令(8條),(1) 判零轉(zhuǎn)移指
68、令(2條),JZ和JNZ指令分別對(duì)累加器A的內(nèi)容為全零和不為零進(jìn)行檢測(cè)并轉(zhuǎn)移,當(dāng)不滿足各自的條件時(shí),程序繼續(xù)往下執(zhí)行,當(dāng)各自的條件滿足時(shí),則程序轉(zhuǎn)向指定的目標(biāo)地址。其目標(biāo)地址是以下一條指令第一個(gè)字節(jié)的地址為基礎(chǔ)加上指令的第二各字節(jié)中的相對(duì)偏移量。相對(duì)偏移量為一個(gè)帶符號(hào)的8位數(shù),偏移范圍為-128—+127字節(jié),在指令匯編和手工匯編時(shí)被確定,它是目標(biāo)地址于下條指令地址之差。本指令不改變累加器A內(nèi)容和影響任何標(biāo)志位。,(2)比較轉(zhuǎn)移指令(4
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 第3章 指令系統(tǒng)
- 第3章 指令系統(tǒng)
- 第3章-指令系統(tǒng)
- 第3章 指令系統(tǒng).PDF
- 第3章 指令系統(tǒng).PDF
- 第3章-尋址方式指令系統(tǒng)
- 第5章 指令系統(tǒng)
- 第5章 指令系統(tǒng)
- 第3章 指令系統(tǒng).ppt.convertor
- 第3章單片機(jī)指令系統(tǒng)
- 第3章arm微處理器的指令系統(tǒng)
- 第3章 mcs-51 的指令系統(tǒng)new1
- 3指令系統(tǒng)
- (第3章_arm尋址方式與指令系統(tǒng))_9_10節(jié)-
- 指令系統(tǒng)
- 第三章 指令系統(tǒng)
- 單片機(jī)指令系統(tǒng)3
- 第五章 指令系統(tǒng)習(xí)題
- 考點(diǎn)指令系統(tǒng)
- 指令系統(tǒng)74755
評(píng)論
0/150
提交評(píng)論