




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、彭周華12.1 2.1 尋址方式尋址方式2.2 2.2 數據傳送與交換指令數據傳送與交換指令2.3 2.3 算術運算和邏輯運算指令算術運算和邏輯運算指令2.4 2.4 控制轉移指令控制轉移指令2.5 2.5 位操作指令位操作指令2.6 2.6 小小 結結2能為能為CPUCPU識別并執行的指令的集合。識別并執行的指令的集合。n5151系列單片機的指令系統包括以下幾類系列單片機的指令系統包括以下幾類數據傳送交換類數據傳送交換類算術運算算術運算邏輯運算邏輯運算循環類循環類控制轉移類控制轉移類位操作類位操作類3n51單片機指令系統具有以下3個特點: 執行速度快大多數指令為單機器周期指令,少數(大多數指
2、令為單機器周期指令,少數(4545條)為雙條)為雙機器周期指令,機器周期指令,2 2條四機器周期指令(乘,除)條四機器周期指令(乘,除) 指令短大多數為大多數為1-21-2字節,少數為字節,少數為3 3字節字節 豐富的位操作指令對內部對內部RAMRAM寄存器和特殊功能寄存器可進行位尋址。寄存器和特殊功能寄存器可進行位尋址。以上特點使之具有以上特點使之具有實時控制實時控制和和數據運算數據運算的功能。的功能。4nMCS-51MCS-51單片機匯編語言單片機匯編語言: : 操作符操作符 目的操作數,源操作數目的操作數,源操作數 MOV A, B MOV A, B操作符操作符- -指明該指令完成什么操
3、作;指明該指令完成什么操作;操作數操作數- -是指明該指令的操作對象。是指明該指令的操作對象。5 Rn:Rn: n=(0 n=(07 7),當前工作寄存器),當前工作寄存器R0R0R7R7中的一個中的一個 RiRi: i=(0: i=(0、1 1),),R0R0和和R1R1寄存器中的一個,用作間接尋址寄存器中的一個,用作間接尋址寄存器寄存器 dir:dir: 8 8 位直接字節地址(片內位直接字節地址(片內 RAM RAM 和和 SFR SFR ) #data#data: 8: 8位立即數,即位立即數,即8 8位常數。可以為位常數。可以為2 2進制進制(B)(B)、1010進進制(制(D D)
4、、)、 1616進制進制(H)(H)、 字符(字符( ) #data16#data16: : 表示表示1616位立即數,即位立即數,即1616位常數。位常數。6addr16 addr16 : : 表示表示1616位地址位地址 addr11addr11 : : 表示表示1111位地址位地址relrel : : 相對偏移量(為一字節補碼),用于相對轉相對偏移量(為一字節補碼),用于相對轉移指令中移指令中bitbit : : 位地址(在位地址空間中)位地址(在位地址空間中)$ $: : 表示當前指令的地址表示當前指令的地址11.11.():():表示存儲器單元的內容表示存儲器單元的內容7n尋址方式尋
5、址方式是指提供操作數的形式,即尋找操作數或操作數所在地址的方式。n為了區別指令中操作數的地址空間,對于不同的存儲器中的數據采用不同的尋址方式。RAM區SFR區外部ROM區內部ROM區(EA=1)0000H0FFFHFFFFH外部RAM區0000HFFFFH00H7FHFFH80H1000H40H8n在 MCS -51單片機指令系統中, 有以下7種尋址方式: (1) 立即尋址;(2) 直接尋址;(3) 寄存器尋址;(4) 寄存器間接尋址;(5) 變址尋址;(6) 位尋址;(7) 相對尋址。 9n 立即尋址方式是指操作數包含在指令字節中。 跟在指令操作碼后面, 該操作數稱為立即數。 立即數有一字節
6、和二字節兩種可能。例例: : MOV A, 80H ;A #80, MC=7480 MOV DPTR, 2000H;DPTR 2000H,MC=902000注意:立即數前面加前綴“#”,若立即數的首位為A-F,前面要加0 10n在指令中直接給出操作數地址的尋址方式。n在MCS -51 單片機指令系統中, 直接尋址方式中可以訪問 3 種存儲器空間: (1) 內部RAM區(00H-7FH)。(2) SFR區(80H-FFH)。(3) 位地址空間。 例例: : MOV A, 25H ;A (25H) MC:E525 MOV P0, #45H ;P0 45H MC:758045 MOV 30H, 20
7、H ;(30H) (20H) MC:852030注意:特殊功能寄存器可以用它的地址,也可以用它的寄存器名。 MOV A, P0等價于 MOV A, 80H11指令中以指令中以通用寄存器的內容通用寄存器的內容作為操作數的尋址方式作為操作數的尋址方式n操作數存放在通用寄存器中。n通用寄存器通用寄存器包括包括:A,B, R0R7, DPTR 。A寄存器可以寄存器尋址,也可以直接尋址(ACC)B寄存器在乘除法中寄存器尋址,其它指令中為直接尋址。注意:直接尋址與寄存器尋址的差別在于:直接尋址是操作數所在的地址出現在指令碼中,寄存器尋址是寄存器編碼出現在指令碼中。例例: : MOV A,25H ;(25H
8、)A, MC:E525注意:注意:寄存器尋址的特點是指令代碼短,執行快。12例例: : MOV A,R0 ;R0A, MC:E8MUL AB ;A*B BA, MC:A4MOV B, R0 ;R0 B, MC:88F0PUSH ACC ; A的內容壓入堆棧 MC:C0E0ADD A, ACC ; ADD A, A?13n指令中以寄存器中的內容為地址,將地址所對應的內容作為操作數的尋址方式。操作數存放在以寄存器內容為地址的單元中。尋址寄存器:R0,R1,DPTR 。間接尋址前面加表示。如R0,R1,DPTR尋址區域:內部數據存儲器和外部數據存儲器如何間接尋址64K空間? 低地址由R0或R1提供,
9、高地址由P2口提供 以DPTR寄存器內容作為16為地址14注意: 分別采用指令MOV,MOVX區別是對內部RAM還是對外部RAM進行尋址。 對外部RAM的操作只有數據傳送類指令。例例: : MOV A,#0F0HMOV R0,#20HMOV R0,A ;A(20H) 功能:累加器內容送至地址為功能:累加器內容送至地址為20H20H的內部的內部RAMRAM中中。 1500000000111111110000000000HR0FFHA02H111100001111000000000010例例: : MOV A,#0F0HMOV R0,#02HMOV R0,A16例例: : MOV P2, #3FH
10、MOV R1,#21HMOVX A,R1;外部外部RAMRAM(地址為(地址為R1R1中的內容)中的內容)A A0000000011110111000000000000HR1FFFFHA3F21H11110111001000010000000000111111P217例例: : MOV DPTR, #3F21H,MOVX DPTR,A;A A以以DPTRDPTR內容為地址的外部內容為地址的外部RAMRAM0000000011111111111101110000HFFFFH3F21H001000010000000000111111DPTR11110111A18n以DPTR或PC寄存器內容為基地址
11、,和A的內容相加形成操作數的地址。例例: : MOVC A, A+DPTR ; (A+DPTR) AMOVC A,A+PC ; (A+PC) A注意: 變址尋址只能對程序存儲器進行尋址操作 變址尋址只有讀操作,而沒有寫操作 采用MOVC指令19例例: : MOV DPTR,#0200HMOV A, #03HMOVC A, A+DPTR ; (A+DPTR) A0000000000011111000000000000HFFFFH0203H000000000000000000000010A0000001100011111DPTR20例例: : MOVC A, A+PC ; (A+PC) A 000
12、0100000001111000000010000HFFFFH0409H00000100A00001111PCMOVC A+PC, A ;指令功能?21對位地址中的內容進行位操作的尋址方式對位地址中的內容進行位操作的尋址方式n 位尋址只對片內RAM中20H2FH中的128個位地址及SFR中的可位尋址單元進行尋址操作例例: : SETBSETB 20H 20H ; 1 120H20H位位MOVMOV 32H 32H,C C ; CyCy32H32H位位ORL ORL C, 5AH C, 5AH ;22n以程序計數器PC的內容作為基值,加上指令所給出的偏移量(補碼) ,形成目標地址(新的PC值),
13、稱為相對尋址。例例: SJMP 08H(目的地址,通常用符號表示目的地址,通常用符號表示)PCPC+08H當前當前PC內容為當前指令地址內容為當前指令地址+2PC轉移到轉移到$+02H+08H;相對尋址只修改PC值,主要用于程序的跳轉23注意:n指令中根據操作數所在的存儲器空間不同而采用不同的尋址方式。n特殊功能寄存器中的操作數常使用符號字節地址和符號位地址的形式進行操作,而不直接使用字節地址和位地址。(PSW, TMOD, P0, IE,) 符號地址( C, RS0, EA, P1.1)位地址24n立即尋址-立即數(#)n直接尋址-直接給出地址n寄存器尋址-編碼(A,B,R0-R7,DPTR
14、)n間接尋址-寄存器的內容作為地址(R0,R1,DPTR).數據空間,片內用MOV,片外用MOVXn變址尋址-基地址(PC,DPTR)+變址(A). 程序空間,片內與片外都用MOVCn位尋址-位地址n相對尋址-PC+偏移量,只修改PC的值思考題1, 3,425nMCS-51單片機的數據傳送和交換類指令共有28條,分為:1.內部數據傳送指令2.外部數據傳送指令3.堆棧指令4.數據交換指令26n在MCS-51單片機中,數據傳送是最基本和最主要操作指令。n 數據傳送操作可以在片內RAM和SFR內進行,也可以在累加器A和片外存儲器之間進行。n 指令中必須指定傳送數據的源地址和目的地址,以便機器執行指令
15、時把源地址中內容傳送到目的地址中,但不改變源地址中內容。27n指令通式指令通式為:為: MOV MOV , 其中,其中, 為源字節,為源字節, 為目的字節為目的字節指令功能指令功能是把源地址內容送到目的地址單元中,是把源地址內容送到目的地址單元中,源地址單元中的內容不變。源地址單元中的內容不變。n這類指令的源操作數和目的操作數地址都在單片這類指令的源操作數和目的操作數地址都在單片機內部,可以是片內機內部,可以是片內RAMRAM的地址,也可以是特殊的地址,也可以是特殊功能寄存器功能寄存器SFRSFR的地址。的地址。28n按照尋址方式,內部數據傳送指令又可以分為立即型、直接型、寄存器型和寄存器間址
16、型等四類。n立即尋址型傳送指令的特點是源操作數是立即數,處在指令碼的第二字節或第三字節位置上,如:29例:已知:R0=20H,試問如下指令執行后累加器A、R7、20H和21H單元中內容是什么?MOV A, #18HMOV R7, #28HMOV R0, #08HMOV 21H, #48HA=18H,R7=28H,(20H)=08H, (21H)=48H。30n直接尋址型傳送指令的特點是指令碼中至少含有一個源操作數或目的操作數的直接地址,直接地址處在指令的第二字節或第三字節位置上。如:31例:已知:R132H、(30H)=AAH、(31H)=BBH、(32H)=CCH,試問如下指令執行后累加器A
17、、50H、 R6、32H和P1口中的內容是什么。MOV A, 30HMOV 50H,AMOV R6 , 31HMOV R1, 30HMOV P1, 32H A=AAH (50H)=AAH R6=BBH (32H)=AAH P1 =AAH32n寄存器尋址型傳送指令的特點是目的地址或源地址含有寄存器尋址的通用寄存器(A,B,R0-R7,DPTR)n第一條指令和第二條指令屬于同一種類型,用于累加器和工作寄存器之間的數據傳送,n第三條指令是把工作寄存器Rn中內容傳送到以direct為地址的RAM單元。MOV A, Rn ;A RnMOV Rn, A ; A RnMOV direct, Rn ;Rn (
18、direct)33MOV A, Ri ;A (Ri)MOV Ri, A ;A (Ri)MOV direct,Ri ; (Ri) (direct)n這三條指令的共同特點是Ri中存放的不是操作數本身,而是操作數所在存儲單元的地址。n n n特點特點特點是含有間接尋址寄存器是含有間接尋址寄存器是含有間接尋址寄存器 RiRiRi34例:例:已知:(40H)=11H、(41H) =22H、R0=40H和R141H,試問如下指令執行后累加器A、40H、41H和42H單元中內容是什么。 MOV A, R0 MOV R1,A MOV 42H,R1 A=11HA=11H,(40H)=11H(40H)=11H,(
19、41H)=11H(41H)=11H,(42H)=11H(42H)=11H351.內部RAM、SFR之間的數據傳送MOV dirRi Rn#dataAMOV A, Rn #data dir RiMOV dir,A RnRi #data dir MOV Rn, A dir #dataMOV Ri,Adir #data36特別注意不存在下列指令nMOV Rn, RinMOV Ri, RnnMOV Rn, RnnMOV Ri, Ri37EP1: R1=20H,(20H)=55HMOV A, R1MOV 30H, R1 EP2: (40H)=30H, MOV R7,40HMOV R7,40H A=55H
20、, (30H)=55H EP3: MOV DPTR,0A213H R7=30H, R7=40H DPTR=A213H 38EP:Q:(1) MOV A,R3 MOV R1,A(2) MOV 20H,R3 MOV R1,20H39A 外部數據存外部數據存儲器儲器程序存儲器程序存儲器 Ri , A DPTR , A A , Ri A , DPTRMOVXMOVCA , A+PCA , A+DPTRMOVXMOVC40例:實現片外數據存儲器數據傳送(2000H)(2100H)片 外RAM地 址內 容2000HXDPTR2100Hx41MOV DPTR,#2000H ; DPTR= 2000HMOVX
21、 A,DPTR ; AXMOV DPTR,#2100H ; DPTR= 2100HMOVX DPTR,A ; (2100H)X如何實現數據交換?如何實現數據交換?例:實現片外數據存儲器數據傳(2000H)(2100H)。使用P2口和8位寄存器Ri間址.42MOV P2,#20H ;高位地址MOV R0,#00 ;低位地址MOVX A, R0 ;讀片外RAMMOV P2,#21H ;改變高位地址MOVX R0,A ;寫片外RAM8位間址注:注: n只能從程序存儲器讀取數據到A累加器。n只能使用變址尋址方式,多用于常數查表程序。MOVC A,A+DPTR ;A(A+DPTR) 查表范圍為64KB程
22、序存儲器任意空間。MOVC A,A+PC ;A(A+PC) 改變改變A A的值;的值; A A的內容為無符號數,只能在查表指令后的內容為無符號數,只能在查表指令后256B 256B 范圍。范圍。43例:分析下列程序執行后,A=?MOV DPTR,#M2 ;M2M2的地址送的地址送DPTRDPTRMOV A,#01H ;A=01HA=01H;A=A=(A+DPTRA+DPTR)= =(1+M21+M2)M1: RET ;子程序結束子程序結束M2: DB 66H,77H,88H,99H ;常數表格常數表格MOV A,#02H ;A=02HA=02H;PC=M1, A=PC=M1, A=(A+PCA
23、+PC)= =(2+M12+M1)M1: RET ;單字節;44PCn初始化是SP指向07H, 數據從08H單元開始壓入。n堆棧按字節數據操作,每次壓入和彈出一個8位數。nSP指向棧頂,按地址增加方向生長。先加后壓,先彈后減。45 :PUSHPUSH dir ;SP+1 SP, (dir) (SP) :POPPOP dir ;(SP)(dir),SP-1 SP46MOV A,#90H; MOV SP,#15H;PUSH ACC; POP 20H; 堆棧操作示意圖堆棧操作示意圖SP90HSP=16H,(16H)=90H(20H)=90H, SP=15H47:設 A=02H,(20H)=56H,執
24、行下列指令后,SP,A,(20H)=?SBR: MOV SP,#30H ;設棧底 PUSH ACC ;保護現場 PUSH 20H MOV A,#0 MOV 20H,#01 ;A=0 POP ACC ; POP 20H ;片內 RAM 34H 33H 32H 31H 30H 堆棧操作示意圖堆棧操作示意圖SP0256P7,P8n 實現片內RAM區的數據雙向傳送(3類):設設A= 29HA= 29H,(,(2AH ) 2AH ) 28H 28H XCHXCH A A,2AH 2AH ;A=A=?(2AH)=(2AH)=?XCH 60HXCH 60H,61H ?61H ?A48 XCHD A,Ri ;
25、A03 (Ri)03:A=34H (50H)=96HMOV R1, #50HXCHD A,R1 ;A? (50H)? n(Ri)A 49 n(Ri)A eXCHange DigitA=36H,(50H)=94H SWAP A;A47 A03:A=0FH 執行 SWAP A 50 AA A=F0H:將片內RAM2AH和 2BH單元中的ASCII碼轉換成壓縮式BCD碼存入20H單元.片內 RAM地址內容2BH35H2AH38H20H51MOVMOV R0 R0,#2AH#2AHMOVMOV R1 R1,#2BH#2BHXCHDXCHD A A,R0 R0 ;低4位交換A=X8HSWAPSWAP A
26、 A ;A=8XHXCHD AXCHD A,R1 R1 ;低4位交換,A=85HXCHXCHA A,20H 20H ;(20H)=85H85Hn51單片機算術運算指令有加, 進位加, 借位減,加1,減1,乘除指令。針對8位二進制。執行的結果對Cy,Ac,Ov位有影響,但加1減1不影響。n邏輯運算指令有與,或,異或指令。522.3.1 算術運算和邏輯運算對標志位的影響53n凡是對A 操作指令(包括傳送指令)都將A中1個的奇偶反映到PSW的P標志位上。即A中奇數個“1”,P=1;偶數個“1”,P=0。n傳送指令、加1、減1指令、邏輯運算指令不影響Cy、OV、AC 標志位。n加、減運算指令影響P、C
27、y、 OV、AC標志位, 乘除指令使OV=0,當乘積大于255,或除數為0時,OV置1。n對進位位Cy(指令中用C表示)進行操作的指令和大環移指令,顯然會影響Cy。標志位的狀態是控制轉移指令的條件2.3.2以A為目的操作數的算術、邏輯運算指令(24條) dirRi Rn#dataAADDADDADDCADDCSUBBSUBBANLANLORLORLXRLXRLA ,Rn,Ri#datadir加加進位加進位加借位減借位減與與或或異或異或54ADD ADD with with C CarryarrySubSubtract with tract with B Borrow orrow E Ex xc
28、lusive-Oclusive-OR R L Logicogic55:判斷下列指令執行后A=?,Cy=?, OV?,P=? MOV A,#9BH ;10011011ADD A, #9BH; A=36H,Cy=1,AC=1,OV=1,P=0:判斷下列指令執行后A=?,Cy=?, OV?,P=? CLR CMOV A,#97H ;10010111ADDC A, #95H; 10010101A=2DH,Cy=1,AC=0,OV=1,P=056:判斷標志位Cy, OV,A?MOV A, #56H ;01010110ADD A, #74H ;01110100ADD A,ACC ; 01010110 01
29、110100 11001010 Cy=0,OV=1,A=CAH 11001010110010100 Cy=1,OV=0,A=94H2.3.3 以dir為目的操作數邏輯運算指令(6條)A#data dirANLANLORLORLXRLXRLdir ,#dataA57與或異或n算術類與邏輯運算指令的操作意義非常明確注意:(1)減指令只有帶借位減,因此在多字節減法中,最低字節作減法時,注意先清CY。(2)邏輯運算是按位進行的,兩數運算的運算法則是:與:有“0”則“0”;與與0 0相與,其值全為相與,其值全為0 0,與,與1 1相與,其值不變相與,其值不變或:有“1”則“1”與與0 0相或,其值不變,
30、與相或,其值不變,與1 1相或,其值全為相或,其值全為1 1異或:相同為“0” , 相異為“1”;與與“0”0”異或異或, ,值不變值不變; ;與與“1”1”異或異或, ,值變反。值變反。5859 10000110 10001111A=8FH 10000110 10001001A89Hn加1指令(IncIncrementrement)A ARnRidirDPTRINCINC;A+1A+1A A;Rn+1Rn;(Ri)+1(Ri);(dir)+1(dir);DPTR+1DPTRn減1指令(Decrement)DECDECARnRidir;A-1A;Rn-1Rn;(Ri)-1(Ri);(dir)-
31、1(dir)60加1減1不影響標志位61:分析下列指令執行結果MOV 20H,#55HINC 20HMOV R7, #81HDEC R7n計算機完成二進制加法,其結果為二進制,如果是十進制相加(即BCD碼相加)想得到十進制的結果,就必須進行十進制調整(即BCD 碼調整)。調整指令: DA A ;將A中二進制相加和調整成BCD碼。調整方法:和低4位大于9或有半進位(AC),則低4位加6; 和的高4位大于9或有進位(CY),則高4位加6。62u指令根據相加和及標志自行進行判斷,因此該指令應緊跟在加指令之后,至少在加指令和該指令之間不能有影響標志的指令。uDA A指令只對一個字節和調整,如為多字節相
32、加必須進行多次調整。u此指令不能對減法結果進行調整。完成56+17的編程。(56和17用BCD碼表示) MOV A,#56H ;A存放BCD碼56H MOV B,#17H ;B存放BCD碼17H ADD A, B ;A=6dH DA A ;A=73H SJMP $5 6 H1 7 H6 d H+67 3 H動態停機6364(1)A取反CPL A ; C Comomplplementement(2)A清零CLR A ;CLEAR 0A(3)A右循環RR A;Rotate Right0100101110010110A(4)A左循環RL A ;Rotate Left00111101651001111
33、0(5)A右大循環RRC ACY110010110(6)A左大循環RLC ACY66100101101100101111001011111P9P9(1)乘法指令(Multiply)MUL AB ; AxB BA,實現8位無符號數乘法 (2)除法指令(Divide)DIV AB ; AB 商在A中,余數在B中67P6P6例1:將21H單元的低三位和20H單元低五位合并為一個字節,并送至30H單元,要求(21H)的低三位放在高位。6800001111111100010010111120H21H30HACy6911110001R411110011R57000010001R7Any other sol
34、utions?Any other solutions?71P11,P14P11,P14:改變指令的執行順序,轉到指令指示的新的:改變指令的執行順序,轉到指令指示的新的PCPC地址執行。地址執行。nMCS-51MCS-51單片機的控制轉移指令有以下類型:單片機的控制轉移指令有以下類型: 無條件轉移無條件轉移:無需判斷,執行該指令就轉移到目的地址。:無需判斷,執行該指令就轉移到目的地址。 條件轉移條件轉移:需判斷:需判斷標志位標志位是否滿足條件,滿足條件轉移是否滿足條件,滿足條件轉移到目的地址,否則順序執行。到目的地址,否則順序執行。 絕對轉移絕對轉移:轉移的目的地址用絕對地址指示,通常為無:轉移
35、的目的地址用絕對地址指示,通常為無條件轉移。條件轉移。 相對轉移相對轉移:轉移的:轉移的目的地址用相對于當前目的地址用相對于當前PCPC的偏差的偏差(偏(偏移量)指示,通常為條件轉移。移量)指示,通常為條件轉移。 長轉移或長調用長轉移或長調用:目的地址距當前:目的地址距當前PC 64KBPC 64KB地址范圍地址范圍 短轉移或短調用短轉移或短調用:目的地址距當前:目的地址距當前PC 2KBPC 2KB地址范圍。地址范圍。72說明:說明:n該該指令功能指令功能是是保護斷點保護斷點,即將當前,即將當前PCPC(下一條指令的首地址)壓入堆棧。(下一條指令的首地址)壓入堆棧。子程序的入口地址子程序的入
36、口地址 addr16 addr16 送送PCPC,轉子程序執行。,轉子程序執行。n本指令為本指令為64KB64KB地址范圍內的調子程序指令,子程序可在地址范圍內的調子程序指令,子程序可在64KB64KB地址空間的任一處。地址空間的任一處。n本指令的機器碼為三字節本指令的機器碼為三字節: 12 addr16: 12 addr16。LCALLLCALL addr16 addr16 ;addr16addr16PC0PC015 15 73A Absolute bsolute CallCall說明:說明:n該該指令功能指令功能是是保護斷點保護斷點,即當前,即當前PCPC壓入堆棧。壓入堆棧。addr11P
37、C0addr11PC01010, ,而而PC11PC111515保持原值不變。保持原值不變。n本指令為本指令為2KB2KB地址范圍的調子程序指令,子程序入口距當地址范圍的調子程序指令,子程序入口距當前前PCPC不得超過不得超過2KB2KB地址范圍。地址范圍。n本指令的機器碼為本指令的機器碼為二字節二字節,設,設addr11addr11的各位是的各位是a10a9a8a2a1a0a10a9a8a2a1a0,則,則ACALLACALL指令指令機器碼機器碼a10a9a8a10a9a81000110001a7a6a5a4a3a2a1a0a7a6a5a4a3a2a1a0,其中其中1000110001是是A
38、CALLACALL指令的操作碼。指令的操作碼。 ACALLACALL addr11 ;addr11 addr11 ;addr11PC0PC0101074例:例:子程序調用指令子程序調用指令ACALLACALL在程序存儲器中的首地址為在程序存儲器中的首地址為0100H0100H,子程序入口地址為,子程序入口地址為0250H0250H。試確定能否使用試確定能否使用ACALLACALL指令實現調用?如果能使用,確定該指令的機指令實現調用?如果能使用,確定該指令的機器碼。器碼。75解解: : 因為因為ACALLACALL指令首地址在指令首地址在0100H0100H,而,而ACALLACALL是是2 2
39、字節指令,字節指令,所以下一條指令的首地址在所以下一條指令的首地址在0102H0102H。0102H0102H和和0250H0250H在同一在同一2KB2KB地址范圍內,故地址范圍內,故可用可用ACALLACALL調用調用。調用入口地址為。調用入口地址為0250H0250H,ACALLACALL指令的機器碼形式為:指令的機器碼形式為: 0100101 1 00010001 0101 0000B=5150H 0101 0000B=5150HRET RET ( (RetReturn)urn) ;從調用子程序返回。;從調用子程序返回。功能:功能:從棧頂彈出斷點到從棧頂彈出斷點到PCPC,從子程序返回
40、到主程序。,從子程序返回到主程序。RETIRETI ( (RetReturn urn I Interrupt)nterrupt); 從中斷服務程序返回。從中斷服務程序返回。功能功能:從棧頂彈出斷點到:從棧頂彈出斷點到PCPC,并恢復中斷優先級狀態,并恢復中斷優先級狀態觸發器,從中斷服務程序返回到主程序。觸發器,從中斷服務程序返回到主程序。 76(1 1)短轉移)短轉移( (A Absolute bsolute J Ju umpmp) )說明:說明:n轉移范圍轉移范圍:本指令為:本指令為2KB2KB地址范圍內的轉移指令。對地址范圍內的轉移指令。對轉移目的地址的要求與轉移目的地址的要求與ACALL
41、ACALL指令對子程序入口地指令對子程序入口地址的要求相同。址的要求相同。n機器碼形式機器碼形式:本指令為:本指令為2 2字節指令。設字節指令。設addr11addr11的各位的各位是是a10a9a8a2a1a0,a10a9a8a2a1a0,則指令的機器碼為:則指令的機器碼為:a10a9a8a10a9a80000100001a7a6a5a4a3a2a1a0a7a6a5a4a3a2a1a0。 AJMP AJMP addr11 addr11 ;addr11addr11PC0PC0101077(2)長轉移(Long Jump)說明:n本指令為64KB程序存儲空間的全范圍轉移指令。轉移地址可為16位地
42、址中的任意值。n本指令為3字節指令,機器碼:02 addr16。(3)間接轉移 LJMP LJMP addr16 addr16 ;addr16addr16PC0PC01515 JMP JMP A+DPTR A+DPTR ;A+DPTRA+DPTRPC PC 例:A=02H,DPTR=2000H,指令JMPA+DPTR執行后,PC=2002H。即程序轉移到2002H地址單元去執行。78例例:分析下面一段程序:分析下面一段程序: MOV MOV A, #02h;A, #02h; MOV MOV DPTRDPTR,#TABLE#TABLE JMP JMP A+DPTRA+DPTR TABLE TAB
43、LE: AJMP AJMP PROC0 PROC0 AJMPAJMP PROC1 PROC1 AJMPAJMP PROC2 PROC2 AJMP AJMP PROC3 PROC3 根據根據JMP A+DPTRJMP A+DPTR指令的操作可知,指令的操作可知,當當A=00HA=00H時,程序轉入到地址時,程序轉入到地址 PROC0 PROC0 處執行;處執行;當當A=02HA=02H時,轉到時,轉到PROC1PROC1處執行處執行可見這是一段多路轉移程序,進入的路數由可見這是一段多路轉移程序,進入的路數由A A確定。確定。因為因為AJMPAJMP指令指令是是2 2字節指令,所以字節指令,所以A
44、 A必須為偶數。必須為偶數。79(4)無條件相對轉移(Short Jump)機器碼為機器碼為80 80 relrel說明:說明:n$ $為源地址(本指令的首地址),該指令為為源地址(本指令的首地址),該指令為2 2字節指令,字節指令,執行本指令時,當前執行本指令時,當前PCPC$+2$+2; $ $2 2relPCrelPCnrelrel 為轉移的偏移量,轉移可以向前轉,也可以向后轉,為轉移的偏移量,轉移可以向前轉,也可以向后轉,因此偏移量因此偏移量relrel 是是1 1 字節有符號數字節有符號數,用補碼表示(,用補碼表示(128128127127),所以指令轉移范圍在離源地址),所以指令轉
45、移范圍在離源地址$ $的的126126129129字節之間。字節之間。 SJMP rel;PC+relPC,80(1 1)短轉移)短轉移AJMPAJMP addr11 addr11(2 2)長轉移)長轉移LJMPLJMP addr16 addr16(3 3)間接轉移)間接轉移JMPJMP A+DPTR A+DPTR(4 4)無條件相對轉移)無條件相對轉移SJMPSJMP relrel81(1 1)累加器為零(非零)轉移)累加器為零(非零)轉移( (J Jump if ump if Z Zero)ero)nA=0 A=0 則轉移(則轉移($+2+relPC$+2+relPC)nA0 A0 程序順
46、序執行。程序順序執行。( (J Jump if ump if N Not ot Z Zero)ero)nA0 A0 則轉移(則轉移($+2+relPC$+2+relPC)nA=0 A=0 程序順序執行,程序順序執行, JZ JZ rel rel ;機器碼為;機器碼為60 rel60 rel JNZ JNZ rel rel ;機器碼為;機器碼為70 rel70 rel82(2 2)減)減 1 1 不等于零轉移不等于零轉移nRn-1RnRn-1Rn,RnRn=0=0順序執行;順序執行;nRn0Rn0,則轉移到(,則轉移到($+2+rel PC$+2+rel PC)n(dir)-1(dir), (d
47、ir)=0 (dir)-1(dir), (dir)=0 順序執行;順序執行;n(dir)0(dir)0,則轉移到(,則轉移到($+3$+3+rel PC+rel PC)本指令有自動減本指令有自動減 1 1 功能。功能。 DJNZ Rn , rel ; Decrement Jump if Not Zero DJNZDJNZ dir , rel dir , rel 83例:試分析以下程序運行后A中的結果。 MOV 23H,#0AH CLR A LP: ADD A,23H DJNZ 23H,LP SJMP $ A =10+9+8+7+6+5+4+3+2+1=55 =37H84P16P16(3 3)比
48、較轉移指令)比較轉移指令( (C Compare ompare J Jump if ump if N Not ot E Equal)qual)說明:說明: n CJNECJNE指令都是指令都是3 3字節指令,作減操作,字節指令,作減操作,影響影響CYCY標志,但不標志,但不回送結果。回送結果。n 若第一操作數大于或等于第二操作數,則標志若第一操作數大于或等于第二操作數,則標志CY=0CY=0。若。若第一操作數小于第二操作數,則第一操作數小于第二操作數,則CY=1CY=1。n 除實現兩操作數相等與否的判斷外,利用對除實現兩操作數相等與否的判斷外,利用對CYCY的判斷的判斷(位操作指令),可以完成
49、兩數大小的比較(位操作指令),可以完成兩數大小的比較。CJNECJNE A, dir , rel A, dir , relCJNECJNE A , #data , rel A , #data , relCJNECJNE Rn , #data , rel Rn , #data , relCJNECJNE Ri , #data , rel Ri , #data , rel;不相等,則轉移, 執行(As+3+rel)PC;相等,順序執行。85(1)累加器為零(非零)轉移JZ rel JNZ relDJNZ Rn , rel DJNZ dir , rel(2)減1不等于零轉移(3)比較轉移指令CJNE
50、 A,dir , relCJNE A , #data , relCJNE Rn , #data , relCJNE Ri , #data , rel dirRiRiRnRn#data#dataADJNZ、CJNE指令示意圖86例:例:編寫程序,要求讀編寫程序,要求讀P1 端口上的信息,若不為端口上的信息,若不為55H,則程序等待,直到,則程序等待,直到P1端口為端口為55H時,程序時,程序才往下順序執行。才往下順序執行。程序:程序:MOV A,#55H ;A55HCJNE A,P1,$ ;P155H,則程序循環執行本指令則程序循環執行本指令 在實際編程中,轉移的在實際編程中,轉移的目的地址目的
51、地址不管是不管是addr11addr11、addr16addr16、還是還是relrel , ,均是一均是一符號地址符號地址表示的表示的( (如如SJMP ABCSJMP ABC,AJMP AJMP LOOPLOOP),轉移的類型是通過指令的操作符來決定的。),轉移的類型是通過指令的操作符來決定的。87n在相對轉移中,在相對轉移中,relrel 是是1 1字節補碼。轉移指令中首地址字節補碼。轉移指令中首地址和轉移的目的地址已知,在填機器碼時,需計算和轉移的目的地址已知,在填機器碼時,需計算relrel。計算計算relrel 的方法的方法: :設本條轉移指令的首地址為設本條轉移指令的首地址為As
52、As源地址,指令字節數源地址,指令字節數為為BnBn(2/32/3)字節,當前)字節,當前PC= As+ PC= As+ BnBn;要轉移的目標地;要轉移的目標地址為址為Ad-Ad-目的地址目的地址。AdAd= =當前當前PC+relPC+rel補補= =As+Bn+relAs+Bn+rel補補relrel=(Ad-As-=(Ad-As-BnBn) )補補n這就是在已知源地址,目的地址和指令的長度時,計這就是在已知源地址,目的地址和指令的長度時,計算算relrel 的公式。的公式。88例:例:MCS-51MCS-51單片機指令系統中,沒有停機指令,通單片機指令系統中,沒有停機指令,通常用短轉移
53、指令常用短轉移指令SJMP $ ($SJMP $ ($為本指令的首地址為本指令的首地址) )來實現來實現動態停機的操作,試寫出這條指令中機器碼。動態停機的操作,試寫出這條指令中機器碼。解:解:查附錄查附錄A A ,SJMPSJMP relrel 的指令碼為的指令碼為80rel 80rel 據題意:本條指令的據題意:本條指令的首地址首地址 As=$As=$,轉移的目的地址是本條指令地址,即轉移的目的地址是本條指令地址,即Ad=$Ad=$,該指令為兩字節,即該指令為兩字節,即BnBn=2=2,relrel= Ad-As-= Ad-As-BnBn 補補= $= $ $22補補= =(2 2)補)補=
54、FEH=FEH所以所以SJMP $SJMP $指令的指令的機器碼是機器碼是80FEH80FEH。89例:計算下面程序中CJNE指令的偏移量。LOOP:MOV A,P1 ; 2字節CJNE A,#55H,LOOP ; 3字節解:目的地址: Ad=LOOPCJNE指令的首地址 : As=LOOP+2CJNE是3字節指令: Bn=3 rel=LOOP-(LOOP+2)-3補=-5補=FBH據附錄A:CJNE A,#55H,LOOP的機器碼B4 data rel指令碼:B455FBH。90n該指令經取指,譯碼后,不進行任何操作(空操作),n常用于產生一個機器周期的延時,或上機修改程序時作填充指令,以方
55、便增減指令。NOP ; 機器碼 00 ,1 MC91例:例: 將將A A累加器的低累加器的低4 4位取反四次、高位取反四次、高4 4位不變。每變位不變。每變換一次,從換一次,從P1P1輸出。輸出。解:解:方法一方法一 加加 1 1 計數計數 MOV MOV R0 R0,#0 ;#0 ;計數器初值送計數器初值送0 0LLLL: XRL XRL A A,#0FH ;#0FH ;高高4 4位不變,低位不變,低4 4位取反位取反 MOV MOV P1P1,A ;A ;從從P1P1輸出輸出 INC INC R0 ; R0 ;計數加計數加1 1 CJNECJNE R0 R0,#04#04,LL ;LL ;
56、不滿不滿4 4次循環次循環 RET RET 方法二方法二 減減1 1計數計數 MOVMOV R0,#04H ; R0,#04H ; 計數初值送計數初值送4 4LL: LL: XRLXRL A A,#0FH#0FH MOVMOV P1 P1,A A DJNZDJNZ R0 R0,LL ;LL ;次數減次數減1 1不等于不等于0 0循環循環 RETRET92例:例:內部內部RAMRAM的的40H40H地址單元中,有地址單元中,有1 1字節符號數,編字節符號數,編寫求其絕對值后放回原單元的程序。寫求其絕對值后放回原單元的程序。解:解:程序如下:程序如下:MOV MOV A A,40H40HANLANL A A,#80H#80HJNZ JNZ NEG ;NEG ;負數轉移負數轉移SJMP
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 高效內容編碼與傳輸-洞察闡釋
- 新工科背景下智能紡織品設計課程建設探索
- 2025至2030年中國電子復印白板行業投資前景及策略咨詢報告
- 2025至2030年中國球型鉸鏈行業投資前景及策略咨詢報告
- 2025至2030年中國特大黑色透明鋼纜行業投資前景及策略咨詢報告
- 2025至2030年中國淋浴水龍頭行業投資前景及策略咨詢報告
- 2025至2030年中國洗瓶機旋轉噴沖裝置行業投資前景及策略咨詢報告
- 2025至2030年中國氨基透明烘干漆行業投資前景及策略咨詢報告
- 高中地理學科整合的背景與跨學科教育的必要性
- 2025至2030年中國機灌設備行業投資前景及策略咨詢報告
- 電梯維修報價表格
- 醫技科室交接班記錄-影像科(本)
- 礦區專項邊坡治理方案設計
- 破產管理人工作履職報告(優選.)
- 養老服務禮儀與實務全書ppt完整版課件最全電子教案正本書教學教程
- 公路段橋梁應急搶險演練腳本
- 集裝箱碼頭堆場優化問題
- 《redis講解》PPT課件
- 風機基礎施工強條執行記錄表
- (完整版)澳洲不隨行父母同意函
- 模具報價表精簡模板
評論
0/150
提交評論