![第3章指令系統[上new]_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/7/76c2ee28-5cde-4223-9006-8c1f4ef86b20/76c2ee28-5cde-4223-9006-8c1f4ef86b201.gif)
![第3章指令系統[上new]_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/7/76c2ee28-5cde-4223-9006-8c1f4ef86b20/76c2ee28-5cde-4223-9006-8c1f4ef86b202.gif)
![第3章指令系統[上new]_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/7/76c2ee28-5cde-4223-9006-8c1f4ef86b20/76c2ee28-5cde-4223-9006-8c1f4ef86b203.gif)
![第3章指令系統[上new]_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/7/76c2ee28-5cde-4223-9006-8c1f4ef86b20/76c2ee28-5cde-4223-9006-8c1f4ef86b204.gif)
![第3章指令系統[上new]_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/7/76c2ee28-5cde-4223-9006-8c1f4ef86b20/76c2ee28-5cde-4223-9006-8c1f4ef86b205.gif)
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、l3.1 .1 匯編語言匯編語言l匯編語言是用助記符、符號和數字等來表示指令的程序語言。匯編語言是用助記符、符號和數字等來表示指令的程序語言。l機器語言是用二進制編碼來表示的。機器語言是用二進制編碼來表示的。l89C51單片機是單片機是8位機,其機器語言以位機,其機器語言以8位二進制碼為單位位二進制碼為單位(一個字節)。(一個字節)。89C51指令有:單字節、雙字節或三字節指指令有:單字節、雙字節或三字節指令。令。例:“10+20”匯編語言程序 機器語言程序MOV A,#0AH 74 0AHADD A,#14H 24 14H機器語言程序(機器碼,或稱為機器語言程序(機器碼,或稱為“代碼代碼”)
2、通過某種方法)通過某種方法存放在存放在ROM中。中。l89C51匯編語言指令組成:匯編語言指令組成:操作碼操作碼 +操作數操作數l格式:格式: 操作碼操作碼目的操作數目的操作數 ,源操作數,源操作數l例:例: MOV A,#13H 標號段標號段-由用戶定義的符號組。標號段可有可無。若一條指令中由用戶定義的符號組。標號段可有可無。若一條指令中 有標號段,標號代表該指令的第有標號段,標號代表該指令的第1個字節所存放的存儲個字節所存放的存儲 器單元的地址,故標號又稱為符號地址,在匯編時,把器單元的地址,故標號又稱為符號地址,在匯編時,把 該地址賦值給標號。該地址賦值給標號。 操作碼操作碼-規定指令所
3、實現的操作功能,由規定指令所實現的操作功能,由25個英文字母表示。個英文字母表示。操作數操作數-指出了參與操作的數據來源和操作結果存放的目的單元。指出了參與操作的數據來源和操作結果存放的目的單元。 操作數可以是:一個常數(立即數);一個數據所在的操作數可以是:一個常數(立即數);一個數據所在的地址,即在執行指令時從指定的地址中取出操作數。地址,即在執行指令時從指定的地址中取出操作數。 操作碼和操作數都有相對應的二進制代碼(即機器碼)。指令操作碼和操作數都有相對應的二進制代碼(即機器碼)。指令代碼由若干字節組成。代碼由若干字節組成。l注釋段注釋段-可有可無。加入注釋段的目的是便于閱讀。在閱可有可
4、無。加入注釋段的目的是便于閱讀。在閱讀讀 程序,尤其是在調試程序時會帶來很多方便。程序,尤其是在調試程序時會帶來很多方便。l不同的指令,指令的字節數也不同。在不同的指令,指令的字節數也不同。在89C5189C51指令指令系統中,有系統中,有單字節(一字節)、雙字節或單字節(一字節)、雙字節或3 3字節指字節指令令。第一個字節第一個字節第二個字節第二個字節第三個字節第三個字節單字節指令單字節指令操作碼操作碼雙字節指令雙字節指令操作碼操作碼操作數操作數三字節指令三字節指令操作碼操作碼操作數操作數操作數操作數1. 單字節(一字節)指令單字節(一字節)指令單字節指令中的單字節指令中的8位二進制代碼既包
5、含操作碼的信息,也包含位二進制代碼既包含操作碼的信息,也包含操作數的信息。操作數的信息。 單字節指令又有二種情況:單字節指令又有二種情況:記住:一字節記住:一字節=8位二進制數位二進制數1). 指令碼中隱含著對某一個寄存器的操作指令碼中隱含著對某一個寄存器的操作例如,指令:例如,指令:INC DPTR“DPTR”是是“數據指針數據指針”,屬于,屬于“特殊功能寄存器特殊功能寄存器”。該條指令翻譯成機器碼為:該條指令翻譯成機器碼為:A3H。二進制數為:。二進制數為:1010 0011B。該機器碼是人為(芯片發明者)規定的,該機器碼是人為(芯片發明者)規定的,INTEL 51系列單片機系列單片機的指
6、令參見教材附錄的指令參見教材附錄A、B。2). 由指令碼中的由指令碼中的rrr三位的不同編碼指定某一個寄存器三位的不同編碼指定某一個寄存器例如,工作寄存器向累加器例如,工作寄存器向累加器A傳送數據指令:傳送數據指令:MOV A,Rn其指令格式(機器碼)為:其指令格式(機器碼)為:1110 1rrr2. 雙字節指令雙字節指令用一字節表示操作碼,另一字節表示操作數或操作數所在的地址。用一字節表示操作碼,另一字節表示操作數或操作數所在的地址。其格式為:其格式為:如:如:ADD A,#45H機器碼:機器碼:24H 45H問:該條指令占用問:該條指令占用ROM中幾個單元?中幾個單元?3. 3字節指令字節
7、指令一字節表示操作碼,另兩個字節為操作數。其格式為:一字節表示操作碼,另兩個字節為操作數。其格式為:如:如:MOV DPTR,#2100H機器碼:機器碼:90H 21H 00H尋址尋址-就是尋找就是尋找(或確定)(或確定)指令中指令中操作數操作數或或操作數所在的地址操作數所在的地址。尋址方式尋址方式-就是如何找到存放操作數的地址,并把操作數提就是如何找到存放操作數的地址,并把操作數提 取出來的方法。取出來的方法。尋址方式越多,計算機尋址能力越強,但指令系統也就越復雜。尋址方式分為以下七種:尋址方式分為以下七種: 按功能分為以下五種:按功能分為以下五種:1 1、立即數尋址、立即數尋址 1 1、數
8、據傳送指令、數據傳送指令2 2、直接尋址、直接尋址 2 2、算術運算指令、算術運算指令3 3、寄存器尋址、寄存器尋址 3 3、邏輯運算指令、邏輯運算指令4 4、寄存器間接尋址、寄存器間接尋址 4 4、控制轉移類指令、控制轉移類指令5 5、相對尋址、相對尋址 5 5、位操作指令位操作指令6 6、變址尋址、變址尋址7 7、位尋址、位尋址l指令中常用符號說明指令中常用符號說明(P56P56)Rn當前寄存器區的8個工作寄存器R0R7(n07);Ri當前寄存器區可作地址寄存器的2個工作寄存器R0和R1(i0,1);direct8位內部RAM單元的地址(即字節地址)及特殊功能寄存器的地址;#data表示8
9、位常數(立即數);#datal6表示16位常數;addr16表示16位地址;addrll表示11位地址;rel8位帶符號的地址偏移量。偏移范圍為-128+127。bit表示位地址;間接尋址寄存器或基址寄存器的前綴; / 位操作指令中,該位求反后參與操作,不影響該位;X 片內RAM的直接地址或寄存器;(X) 相應地址單元中的內容;(X)表示X地址單元中的內容; :箭頭左邊的內容送入箭頭右邊的單元內1、寄存器尋址、寄存器尋址 由指令指出寄存器組由指令指出寄存器組R0R7中某一個或其他寄存器中某一個或其他寄存器的內容作為操作數。的內容作為操作數。 如:1)、MOV A, R0 ;(R0) A 2)、
10、ADD A,R1 ;(A)+(R1) A 3)、MOV P1,A ;(A) P1口 操作數在寄存器中,如R0R7,A、B、Cy(位)、DPTR等。 在此寄存器中存放著在此寄存器中存放著真正的被操作對象真正的被操作對象。l例:例:“INC Rn” 指令的機器為:指令的機器為:0000 1rrr。 若若Rn為為R 3 時,即時,即 INC R3 ,則其機器碼為,則其機器碼為0000 1011。2、直接尋址直接尋址 指令中直接給出的操作數是片內指令中直接給出的操作數是片內RAM單元的的地單元的的地址。址。 如:MOV A,40H ;(40H) A ,即片內即片內RAM40H單元的內容送入單元的內容送
11、入A中中 使用使用 直接尋址方式可訪問片內直接尋址方式可訪問片內RAM的低的低128個單元及特殊個單元及特殊功能寄存器(功能寄存器(SFR)。)。 對對SFR,既可使用其字節地址,也可使用其名字。,既可使用其字節地址,也可使用其名字。 如:如: MOV A , P0 ; (P0) A P0口的字節地址為口的字節地址為80H,故上條指令又可寫成:,故上條指令又可寫成: MOV A, 80H ; (80H) A 3、立即數尋址、立即數尋址 操作碼后面緊跟的是一字節或兩字節操作數。操作碼后面緊跟的是一字節或兩字節操作數。 用用“#” 表示,以區別直接地址。表示,以區別直接地址。 如:如:MOV A,
12、 #40H ;40H A 該指令與該指令與“MOV A,40H”有何區別?有何區別?89C51中只有一條要求操作碼后面兩字節立即數的指令:中只有一條要求操作碼后面兩字節立即數的指令: MOV DPTR, #datal6例:例:MOV DPTR,#2100H ;2100H DPTR 其機器碼為:其機器碼為:90 21 00H4、寄存器間接尋址、寄存器間接尋址 操作數的地址事先存放在某個寄存器中,然后把操作數的地址事先存放在某個寄存器中,然后把 這個寄存器中的內容作為地址,由該地址所指定這個寄存器中的內容作為地址,由該地址所指定 的單元內容作為操作數。的單元內容作為操作數。 89C51規定規定用用
13、R0或或R1作為間接尋址寄存器,可尋址片內作為間接尋址寄存器,可尋址片內RAM低位地低位地址的址的128字節單元內容;字節單元內容; 用用DPTR(數據指針)作為間接寄存器,尋址數據指針)作為間接寄存器,尋址片外片外RAM(數據存儲器)的數據存儲器)的64KB空間,但不能用這種尋址方法尋址特殊空間,但不能用這種尋址方法尋址特殊功能寄存器(功能寄存器(SFR)。)。如如: MOV A,R0 MOVX A,DPTR操作數在片操作數在片內內RAMRAM中中操作數在操作數在片外片外RAMRAM中中例如:將片內例如:將片內RAM 65H單元的內容單元的內容47H送送A。其中其中R0中的內容為中的內容為6
14、5H。 程序如下:程序如下: MOV R0,#65H ;65H (R0R0) MOV 65H,#47H ;47H (6565H H) MOV A,R0 ;(;(R0) A A使用使用“MOV A,Ri”時時 R0或或R1要先賦值。要先賦值。5 5、變址尋址、變址尋址( (基址寄存器基址寄存器+ +變址寄存器尋址變址寄存器尋址) ) 以以DPTR或或PC為基址寄存器,以為基址寄存器,以A為變址寄存器(為變址寄存器(A中的中的內容為無符號數),把兩者內容相加(形成的內容為無符號數),把兩者內容相加(形成的16位地址)位地址)作為操作數的地址。作為操作數的地址。 用變址尋址方式用變址尋址方式只能訪問
15、只能訪問ROM(從(從ROM中讀取數據),中讀取數據),訪問范圍:訪問范圍:64KB。 例:例: MOVC A, A+DPTR ;(;(A)+(DPTR) A 變址尋址方式常用于查表操作。變址尋址方式常用于查表操作。使用該指令時,使用該指令時, DPTR要先賦值。這個數值一般要先賦值。這個數值一般稱為表的首地址。稱為表的首地址。E0A程序存儲區2040H 9320E0H 472041H DPH 20DPL 00ALU20E0H47指令代碼例如: 2040H:MOVC A,A+DPTR 設DPTR=2000H,A=0E0H機器碼為機器碼為:93HPC6 6、相對尋址、相對尋址將將PCPC中的當前
16、內容與指令中的當前內容與指令第二字節給出的數第二字節給出的數相加,結果作為跳相加,結果作為跳轉指令的轉移地址(轉移目的地址)。轉指令的轉移地址(轉移目的地址)。PCPC中的中的當前當前內容稱為內容稱為基基地址地址(本指令后的字節地址)指令第二字節給出的數據稱為(本指令后的字節地址)指令第二字節給出的數據稱為偏偏移量移量( (rel)rel),1 1字節帶符號數字節帶符號數. . 常用于跳轉指令。常用于跳轉指令。 如如: : JC 23H ;JC 23H ;若若Cy=0Cy=0,不跳轉;不跳轉; Cy=1Cy=1,跳轉跳轉改變PC程序存儲區ALU如:1000H: JC 23H;若若Cy=0,不跳
17、轉;不跳轉; Cy=1,向前跳轉向前跳轉23H個單個單元元1025H1000H 401025H 451001H 23 1024H 471002H 3023H1002H指令代碼當前PC其機器碼為:其機器碼為:40 2340 23H H地址共共23H個單元個單元PC目的地址目的地址 = = 源地址源地址 + 2 + 2(相對轉移指令字節數)(相對轉移指令字節數)+ + relrel相對轉移分為相對轉移分為正向跳轉正向跳轉和和反向跳轉反向跳轉。正向跳轉時:正向跳轉時: rel = rel = 目的地址目的地址 源地址源地址 2 2反向跳轉時:反向跳轉時:rel = FEH rel = FEH 地址差
18、地址差7 7、位尋址、位尋址對片內對片內RAMRAM的的位尋址區位尋址區和某些可和某些可位尋址位尋址的特殊功能寄存器進行的特殊功能寄存器進行位操作時的尋址方式。位操作時的尋址方式。 如如: : SETB 3DH; SETB 3DH; 將將2727H.5H.5位置位置1 1 CLR C CLR C ;CyCy位清位清0 0操作數在片內RAM位地址區或SFR某些位中 MCS-51指令系統分為五大類指令系統分為五大類l數據傳送指令(數據傳送指令(28條)條)l算術運算指令(算術運算指令(24條)條)l邏輯運算及移位指令(邏輯運算及移位指令(25條)條)l控制轉移指令(控制轉移指令(17條)條)l位操
19、作指令或布爾操作(位操作指令或布爾操作(17條)條) 共共111條指令。條指令。l傳送傳送-把源地址單元的內容傳送到目的地把源地址單元的內容傳送到目的地址單元中去址單元中去,而源地址單元的內容不變而源地址單元的內容不變;或者或者源、目的單元內容互換。源、目的單元內容互換。傳送指令的助記符:傳送指令的助記符:“MOV”功能:功能:將源地址單元的內容傳送到目的字節,而將源地址單元的內容傳送到目的字節,而 源字節的內容不變。源字節的內容不變。1. 1. 以累加器以累加器A A為目的操作數的指令為目的操作數的指令 匯編指令格式匯編指令格式 操作操作 MOV A, data ; data A。 2字節指
20、令字節指令 機器碼:機器碼:74H dataH MOV A, Rn ; n=07, (Rn) A。 1字節指令字節指令 MOV A, Ri ; i=0,1 , (Ri) A。 1字節指令字節指令 MOV A, direct ; (direct) A ,direct為內部為內部RAM或或SFR地址。地址。 2字節指令字節指令上述操作會影響上述操作會影響PSW的內容(即影響的內容(即影響P標志位)。標志位)。例:執行下列指令后,(例:執行下列指令后,(A)=?MOV R0, #30HMOV 30H, #60HMOV A, R0(A)=?MOV Rn, A ; (A) Rn , n=07。 1字節指
21、令字節指令MOV Rn , direct ; (direct) Rn。 2字節指令字節指令MOV Rn ,data ; data Rn。 2字節指令字節指令例(A)=78H,(R5)=47H,(70H)=0F2H。寫出執行下列指令的注釋。MOV R5,A ;(A) R5,(R5)=78HMOV R5,70H ;(70H) R5,(R5)=0F2HMOV R5,#0A3H ;0A3H R5,(R5)=0A3H注意:指令注意:指令“ MOV Rn,Rn”是非法指令!是非法指令!MOV direct, A ; (A) direct。 2字節指令字節指令MOV direct, Rn ; (Rn) di
22、rec t , n=07。 2字節指令字節指令MOV direct, Ri ; ( Ri ) ) direct , i=0,1。 2字節指令字節指令MOV direct1, direct 2 ; (direct2) direct1。 3字節指令字節指令MOV direct, #data ; data direct。 3字節指令字節指令例例1 1:MOV 20H,AMOV 20H,R1MOV 20H,30HMOV 20H,R1MOV 0A0H,#34HMOV P2,#34H例例2 2:MOV 78H,#80H機器碼:75 78 80H例3: MOV 78H,80H機器碼:85 80 78H注意注
23、意例例2 2、例例3 3的區的區別。別。MOV Ri, A ; (A) (Ri) ) ,i=0,1。 1字節指令字節指令MOV Ri , direct ; (direct) (Ri) )。 2字節指令字節指令MOV Ri ,data ; data (Ri) )。 2字節指令字節指令功能:把源操作數指定的內容送入以R0或R1為地址指 針的片內存儲單元中。例:例:MOV R0MOV R0,A AMOV R1MOV R1,20H20HMOV R0MOV R0,#34H#34H使用使用Ri時,時,R0或或R1要先賦值。要先賦值。如:如:MOV R0,#46HMOV R0,AMOV DPTR, #dat
24、a16 ; dataHDPH, dataLDPL ; 3字節指令字節指令DPTR-數據指針,為SFR中(DPH)、(DPL)例:例:MOV DPTRMOV DPTR,#1234H#1234H結果:結果:(DPHDPH)= =1212H H,(,(DPLDPL)= =3434H H。 例如:例如: MOV DPLMOV DPL,#12H #12H MOV DPH MOV DPH,#35H#35H 則就相當于執行:?則就相當于執行:?l例題例題1:l例題例題2:請判斷下列的請判斷下列的MCS-51單片機指令的書寫格式是否單片機指令的書寫格式是否有錯,若有,請說明錯誤原因。有錯,若有,請說明錯誤原因
25、。 MOV 50H,R3 MOVC A,R0+DPTR答案:答案: 間址寄存器不能使用間址寄存器不能使用R2R7。 MOVC A,R0+DPTR 。變址尋址方式中的間址。變址尋址方式中的間址 寄存器不可使用寄存器不可使用R0,只可使用,只可使用AMOVC A, A+DPTR ;先(先(PC)+ 1 PC,(A)+(DPTR) A MOVC A, A+PC ; 先(先(PC)+ 1 PC,后后(A)+(PC) A上面兩條指令均為:上面兩條指令均為: 1字節指令字節指令例例: (DPTR)=0300H, (A)02H ROM中中 (0302H)=55H執行:執行: MOVC A, A+DPTR結果
26、:結果:(A)=55H使用使用“MOVC A,A+DPTR”指令時,指令時, DPTR要先賦值。這個數值一般稱為表的首地址。要先賦值。這個數值一般稱為表的首地址。lP61.例:例:在在ROM中,數據表格為:中,數據表格為:執行程序:執行程序:1000H:MOV A,#0DH ;0DHA,查表的偏移量,查表的偏移量1002H:MOVC A,A+PC ;(;(0DH+1003H)A1003H:MOV R0,A ;(;(A)R0執行完上述指令后的結果為:執行完上述指令后的結果為:(A)=02H,(,(R0)=02H,(,(PC)=1004H。數據表格數據表格lP62.例:例:在在ROM中,數據表格為
27、:中,數據表格為:執行程序:執行程序:1000H:MOV A,#10H ;10HA,查表的偏移量,查表的偏移量1002H:PUSH DPH ;保護現場;保護現場1004H:PUSH DPL1006H:MOV DPTR,#7000H ;表首地址;表首地址DPTR1009H:MOVC A,A+DPTR ;(;(10H+7000H)=(7010H)=02HA100AH:POP DPL ;恢復現場;恢復現場100CH:POP DPH執行后結果為:(執行后結果為:(A)=02H,(,(PC)=100EH,(DPTR)=原值。原值。 地址地址 機器碼機器碼 源程序源程序 ORG 0050H0050 740
28、3 MOV A, #03H0052 83 MOVC A, A+PC0053 00 DB 00H0054 01 DB 01H0055 04 DB 04H0056 09 DB 09H0057 10 DB 10H0058 19 DB 19H0059 24 DB 24H 005A 31 DB 31H005B 40 DB 40H005C 51 DB 51H END“ORG”、“DB”為為偽指令。偽指令。P108執行該程序段后:執行該程序段后:(A)=09H。源程序源程序 ORG 0050H MOV A, #03H MOV DPTR,#TLV ;表首地址表首地址DPTR MOVC A, A+DPTR ;查
29、表查表 MOV R6,A SJMP $TLV:DB 00H, 01H, 04H, 09H, 10H DB 19H, 24H, 31H, 40H, 51H END表首地址表首地址MOVX A, DPTR ; (DPTR) A,地址范圍地址范圍64K MOVX A, Ri ; (Ri) A,地址范圍地址范圍0255上面兩條指令為上面兩條指令為”讀讀”。硬件自動使。硬件自動使RD引腳產生低電平,引腳產生低電平,WR引腳為高電平。引腳為高電平。 MOVX DPTR, A ; (A) (DPTR) MOVX Ri , A ; (A) (Ri) 上面兩條指令為上面兩條指令為”寫寫”。硬件自動使。硬件自動使
30、WR引腳產生低電平,引腳產生低電平,RD引腳下為高電平。引腳下為高電平。 以上四條指令均為以上四條指令均為:1字節指令字節指令 使用使用“MOVX A,DPTR”和和“MOVX DPTR ,A”指令時,指令時, DPTR要先賦值。這個數值一般稱為源首地址或目的首地址。要先賦值。這個數值一般稱為源首地址或目的首地址。說明:說明: 1.在MCS-51中,與外部存儲器RAMRAM打交道的只可以是累加器A A 。所有需要送入外部RAMRAM的數據必需要通過A A送去,而所有要讀入的外部RAMRAM中的數據也必需通過A A讀入。內部RAM間可以直接進行數據的傳遞,而外部則不行。2.2.要要“讀讀”或或“
31、寫寫”外部的外部的RAMRAM,當然也必須要知道當然也必須要知道RAMRAM的地址,對的地址,對“MOVX AMOVX A,DPTRDPTR”和和“MOVX MOVX DPTRDPTR,A A”兩條指令中,地址是被直接放在兩條指令中,地址是被直接放在DPTRDPTR中中的。的。 而而“MOVX AMOVX A,RiRi”和和“MOVX Ri,AMOVX Ri,A”兩條指兩條指令,由于令,由于RiRi(即即R0R0或或R1R1)只是只是8 8位的寄存器,所以位的寄存器,所以只提供低只提供低8 8位地址。高位地址。高8 8位地址由位地址由P2P2口來提供。口來提供。3.3.使用時應先將要使用時應先
32、將要“讀讀”或或“寫寫”的地址送入的地址送入DPTRDPTR或或RiRi中,然后再用中,然后再用“讀讀/ /寫寫”命令。命令。 請同學閱讀請同學閱讀“上機實驗指導書上機實驗指導書”實驗一的程序!實驗一的程序!例題例題2 2:將片外RAMRAM中某一單元(設為0100H單元)的數據 送入片內RAMRAM的60H單元中,試編寫程序。例題例題3 3:將片內RAMRAM中50H單元的數據送到片外RAMRAM的1060H單元 中,試編寫程序。例題例題1 1:將外部RAMRAM中某一單元(設為0100H單元)的數據 送入外部RAMRAM的另一個單元(設為0200H單元)中,試編 寫程序。 入棧指令入棧指令
33、 PUSH directPUSH direct ;先(先(SPSP)+1+1SPSP,后后( (direct) direct) (SP)(SP) 出棧指令出棧指令 POP direct POP direct ;先先 ((SP)(SP)) ( (direct) direct) , ,后(后(SPSP)-1 -1 ( SP SP)這兩條指令均為:這兩條指令均為:2 2字節指令。字節指令。第一條為第一條為壓入壓入指令,就是將指令,就是將directdirect中的內容送入中的內容送入堆棧堆棧中,第二中,第二條為條為彈出彈出指令,就是將指令,就是將堆棧堆棧中的內容送回到中的內容送回到directdir
34、ect中中例:例: MOV SPMOV SP,#5FH#5FH MOV A MOV A,#100#100 MOV B MOV B,#20#20 PUSH ACC PUSH ACC PUSH BPUSH B將將SPSP中的值加中的值加1 1,即變為,即變為6060H H,然后然后將將A A中的值送到中的值送到6060H H單元中,因此執單元中,因此執行完本條指令后,(行完本條指令后,(6060H H)=100=100,同,同樣,執行樣,執行PUSH BPUSH B時,是將時,是將SP+1SP+1,即即變為變為6161H H,然后將然后將B B中的值送入到中的值送入到6161H H單元中,即執行完
35、本條指令后,單元中,即執行完本條指令后,(6161H H)=20=20。堆棧的操作原則:先進后出堆棧的操作原則:先進后出字節交換指令字節交換指令XCH A , Rn ; (A) (Rn)。 1字節指令字節指令XCH A , direct ; (A) (direct)。 2字節指令字節指令XCH A , Ri ; (A) (Ri)。 1字節指令字節指令例: (A)=80H, (R7)=97H執行:XCH A , R7結果:(A)=97H, (R7)=80H半半字節交換指令字節交換指令XCHD A, Ri ;(A)0-3 (Ri ) 0-3 )。 1字節指令字節指令例:(R0)=60H, (60H
36、)=3EH, (A)=59H執行: XCHD A, R0結果:(A) 5E H (60H)39 H主要對主要對8 8位無符號數;位無符號數;也可用于帶符號數運算。也可用于帶符號數運算。 包括:加、減、乘、除、加包括:加、減、乘、除、加1 1、減、減1 1運算指令運算指令 影響影響PSWPSW有關位。有關位。復習復習-PSW寄存器寄存器Cy:進位標志位AC:輔助進位標志位F0: 供用戶使用的標志位OV:溢出標志位P:奇偶標志位 A中數據的奇偶性。當1的個數為奇數,P=1,否則P=0。RS1 RS0 0 0 區0(地址:00H07H) 0 1 區1(地址:08H0FH) 1 0 區2(地址:10H
37、17H) 1 1 區3(地址:18H1FH)1.1.不帶進位位的加法指令不帶進位位的加法指令 ADD AADD A,#data #data ; (A) (A)dataAdataA。2 2字節指令字節指令ADD AADD A,direct direct ; (A) (A)(direct )A(direct )A。 2 2字節指令字節指令ADD AADD A,Rn Rn ; (A) (A)(Rn)A(Rn)A。 1 1字節指令字節指令ADD AADD A,Ri Ri ; (A)(A)(Ri)A(Ri)A。 1 1字節指令字節指令用途:將A中的值與源操作數所指內容相加,最終結 果存在A中。lP65.
38、例3-1 設(設(A A)=0C3H=0C3H,(,(R0R0)=0AAH=0AAH。執行指令:執行指令:ADD AADD A,R0R0問:執行指令后,問:執行指令后,A A、R0R0、CYCY、ACAC和和OVOV的內容是什么?的內容是什么?問題:問題:OVOV溢溢出是什么意出是什么意思?思?若認為是補碼運算,則運算結果若認為是補碼運算,則運算結果為為-61+(-86)=-147-61+(-86)=-147超出了補碼的超出了補碼的表示范圍表示范圍(-128(-128+127)+127)。負溢出。負溢出。也可以這樣理解:兩個負數相加,也可以這樣理解:兩個負數相加,而結果為正,出錯。而結果為正,
39、出錯。例:例:單片機上電復位后,單片機上電復位后,執行下面的指令:執行下面的指令: MOV AMOV A,#78H#78H MOV R0 MOV R0,#64H#64H ADD AADD A,RORO問:執行該指令后:(問:執行該指令后:(A A)= =?,(?,(R0R0)= =?,(?,(PSWPSW)= =?問題:問題:OVOV溢溢出是什么意出是什么意思?思?若認為是補碼運算,則若認為是補碼運算,則運算結果為運算結果為+120+64=+220+120+64=+220超出了補超出了補碼的表示范圍碼的表示范圍(-128(-128+127)+127)。正溢出。正溢出。也可以這樣理解:兩個也可以
40、這樣理解:兩個正數相加,而結果為負,正數相加,而結果為負,出錯。出錯。l例如例如: 若若A=1101 0011B, (R1)=1110 1000B, 執行指令執行指令“ADD A, R1”時時, 其算式表達為其算式表達為:相加后相加后(A)=1011 1011B(A)=1011 1011B。 若認為是若認為是無符號無符號相加相加, , 則則A A的值代的值代表十進制數表十進制數187187; 若認為是若認為是有符號數有符號數(補碼)相加(補碼)相加, , 則則A A的的值為十進制值為十進制-69-69。l在確定相加后進位標志在確定相加后進位標志CY的值時的值時, 總是把兩個操作數作為總是把兩個
41、操作數作為無符號數無符號數直接相加而得出進位直接相加而得出進位CY值。值。 如上例中如上例中, 相加后相加后CY=1。 若為無符號數相加若為無符號數相加CY代表十進制數代表十進制數256, 但若是兩但若是兩個有符號數相加個有符號數相加, CY的值沒有意義。的值沒有意義。l在確定相加后溢出標志在確定相加后溢出標志OV的值時的值時, 計算機總是把操作數計算機總是把操作數當當作帶符號數來對待作帶符號數來對待。 在作加法運算時在作加法運算時, 一個正數和一個負數一個正數和一個負數相加是不可能產生溢出的相加是不可能產生溢出的, 只有兩個同符號數相加才有可能只有兩個同符號數相加才有可能產生溢出產生溢出,
42、表示運算結果出錯。表示運算結果出錯。l溢出標志位溢出標志位OV只有帶符號運算時才有用。只有帶符號運算時才有用。ADDC AADDC A,RnRn;(A)(A)(Rn)(Rn)CYACYA。 1 1字節指令字節指令ADDC AADDC A,directdirect ;(A)(A)(direct )(direct )CYACYA。 2 2字節指令字節指令ADDC AADDC A,RiRi;(A)(A)(Ri)(Ri)CYACYA。 1 1字節指令字節指令ADDC AADDC A,#data#data;(A)(A)#data#dataCYACYA。 2 2字節指令字節指令對標志位的影響與對標志位的影
43、響與ADD相同相同說明:說明:由于由于5151單片機是一種單片機是一種8 8位機,所以只能做位機,所以只能做8 8位的位的數學運算,但數學運算,但8 8位運算的范圍只有位運算的范圍只有0255,這在實際工,這在實際工作中是不夠的,因此就要進行擴展,一般是將作中是不夠的,因此就要進行擴展,一般是將2 2個個8 8位位( (兩字節兩字節) )的數學運算合起來,成為一個的數學運算合起來,成為一個1616位的運算,位的運算,這樣,可以表達的數的范圍就可以達到這樣,可以表達的數的范圍就可以達到065535。3. 3. 帶借位的減法指令帶借位的減法指令SUBB ASUBB A,RnRn ;(A)(A)(R
44、n)(Rn)CYACYA。 1 1字節指令字節指令SUBB ASUBB A,direct direct ;(A)(A)(direct )(direct )CYACYA。 2 2字節指令字節指令SUBB ASUBB A,RiRi ;( (A)A)(Ri)(Ri)CYACYA。 1 1字節指令字節指令SUBB ASUBB A,#data #data ;(A)(A)#data#dataCYACYA。 2 2字節指令字節指令若在使用若在使用“SUBB”指令前不知道指令前不知道“CY”值,則應先將值,則應先將“CY”清清“0”。lP66.例:例:3-3設累加器設累加器A的內容為的內容為0C9H,寄存器,
45、寄存器R2的內容為的內容為54H,進位標,進位標志志CY=1。執行指令。執行指令“SUBB A,R2”的結果為(的結果為(A)=74H,CY=0,AC=0,OV=1。補碼,其真值為補碼,其真值為-55補碼,其真值為補碼,其真值為-56補碼,其真值為補碼,其真值為84補碼,其真值為補碼,其真值為116補碼時:補碼時:-55-1-(+84)=-140,超過了補碼表示的范圍,超過了補碼表示的范圍4.4.乘法指令乘法指令 MUL AB MUL AB ;(A)(A)(B)B(B)B15158 A A7 70 。 1字節指令字節指令 功能:功能:把累加器把累加器A A和寄存器和寄存器B B中的兩個中的兩個
46、8 8位無符號數相位無符號數相乘,所得乘,所得 16 16位積的低位積的低8 8位存放在位存放在A A中,積的高中,積的高8 8位存放在位存放在B B中。若中。若 乘積乘積00FFH(255)FFH(255),則則“OV”OV”置置1 1;否則清;否則清0 0(即(即B B的內容的內容 為為0 0)。)。CYCY總是被清總是被清0 0。P66. 例例3-4(A)=4EH, (B)=5DH。執行指令:。執行指令:MUL AB 后,其結果是什后,其結果是什么?么?5.5.除法指令除法指令 DIV ABDIV AB ;A AB B的商的商A A,余數余數B B。 1字節指令字節指令 A A、B B的
47、內容均為的內容均為8 8位無符號整數。位無符號整數。CYCY和和OVOV均被清均被清0 0。若原(若原(B B)=00H=00H,則結果是無法確定的,用則結果是無法確定的,用OV=1OV=1表示,而表示,而CYCY仍仍為為0 0。P67. 例例3-5若(若(A)=0BFH,(,(B)=32H。執行:。執行:DIV AB 指令后,其指令后,其結果是什么?結果是什么?6.6.加加1 1指令指令 INC AINC A;(A)+1A(A)+1A,影響影響P P標志。標志。 1字節指令字節指令 INC Rn INC Rn;(Rn)+1Rn(Rn)+1Rn。 1字節指令字節指令 INC direct IN
48、C direct;(direct)+1(direct)(direct)+1(direct)。 2 2字節指令字節指令 INC Ri INC Ri;(Ri)+1(Ri)(Ri)+1(Ri)。 1字節指令字節指令 INC DPTR INC DPTR;(DPTR)+1DPTR(DPTR)+1DPTR。 1字節指令字節指令 若原單元的內容為若原單元的內容為FFHFFH,加加1 1后溢出為后溢出為0000H H。例:例:A=12HA=12H,R0=33HR0=33H,(21H)=32H(21H)=32H, (34H)=22H (34H)=22H,DPTR=1234HDPTR=1234H。連續執行下面的指
49、令:連續執行下面的指令: INC AINC A INC R0 INC R0 INC 21H INC 21H INC R0 INC R0 INC DPTR INC DPTR; A=13HA=13H; R0=34H R0=34H;(;(21H21H)=33H=33H;(;(34H34H)=23H=23H; DPTR=1235H DPTR=1235H7.7.減減1 1指令指令DEC ADEC A ;(;(A A)-1A,-1A,影響影響P P標志。標志。 1字節指令字節指令 DEC RnDEC Rn ;(;(RnRn)-1Rn-1Rn。 1字節指令字節指令 DEC directDEC direct
50、;(direct)-1direct(direct)-1direct。 2字節指令字節指令 DEC RiDEC Ri ;(;((Ri)(Ri))-1(Ri)-1(Ri)。 1字節指令字節指令 若原單元的內容為若原單元的內容為0000H H,減減1 1后溢出為后溢出為FFHFFH。8.8.十進制調整指令十進制調整指令 DA A DA A ;該指令的功能是對該指令的功能是對BCD碼的加法結果進行調整,碼的加法結果進行調整, 1字節指令字節指令 ;調整后的結果儲存在;調整后的結果儲存在A中中 該指令必須跟在該指令必須跟在ADDADD和和ADDCADDC指令之后,而且只能用于壓縮指令之后,而且只能用于壓
51、縮BCDBCD數數相加結果的調整(相加結果的調整(自動修正)自動修正)。 兩兩BCDBCD數相加后,經本指令調整才能得到壓縮數相加后,經本指令調整才能得到壓縮BCDBCD數的和的正確數的和的正確值。值。十進制調整的修正方法為:十進制調整的修正方法為:l 當累加器低四位大于當累加器低四位大于9或半進位標志或半進位標志AC=1時,則進行低四時,則進行低四位加位加6修正修正(A03)6(A03) 即即(A)=(A) 06l 當累加器高四位大于當累加器高四位大于9或進位標志或進位標志CY1時時, 進行高四位加進行高四位加6修正修正(A47)6(A47) 即即(A) (A) 60H l例:例:設設A的內
52、容為的內容為0101 0110B(即為(即為56的的BCD數),數),R3的內容為的內容為0001 0111B(27的的BCD數),數),CY的內容為的內容為1。執行下列指令:執行下列指令:ADDC A,R3DA A執行執行“DA A”注意:使用注意:使用“DA A”DA A”指令時:指令時:只能緊跟在加法指令之后進行,不能緊跟在減法、乘法、除只能緊跟在加法指令之后進行,不能緊跟在減法、乘法、除法和法和INC指令之后;指令之后;兩個加數必須已經是兩個加數必須已經是BCD碼;碼;只能對累加器中的結果(只能對累加器中的結果(BCD碼)進行調整。碼)進行調整。 l兩個一字節無符號數相加,將結果用十進
53、制在兩個一字節無符號數相加,將結果用十進制在7段數碼管上顯示出來。段數碼管上顯示出來。ORG 0000H AJMP MAIN ORG 0050HMAIN:MOV SP,#50H MOV A,#34 ADD A,#44 MOV R7,A ;結果存入結果存入R7中中,R7中存放的是中存放的是16進制數進制數 ;以下為以下為16進制數轉換成進制數轉換成BCD碼十進制數碼十進制數BCDT: MOV R5,#8 ;設置計數值設置計數值 CLR A MOV R3,A ;存放結果寄存器清存放結果寄存器清0 ,R7中的中的16進制數轉換成進制數轉換成 ;BCD碼十進制數,轉換結果存入碼十進制數,轉換結果存入R
54、3R4 MOV R4,A LOOP:CLR C MOV A,R7 ;取被轉換二進制數乘取被轉換二進制數乘2 RLC A MOV R7,A MOV A,R4 ;乘乘2加加b后經十進制調整后轉換成后經十進制調整后轉換成BCD碼存入碼存入 ;R3R4 ADDC A,R4 DA A MOV R4,A MOV A,R3 ADDC A,R3 DA A MOV R3,A DJNZ R5,LOOP MOV 20H,R4;以下為拆字以下為拆字 MOV R0,#21H MOV A,20H ANL A,#0FH MOV R0,A ;低低4位存入位存入21H單元中單元中 INC R0 MOV A,20H SWAP A
55、 ANL A,#0FH MOV R0,A ;高高4位存入位存入22H單元中單元中;以下為顯示程序以下為顯示程序 MOV DPTR,#TAB MOV A,22H MOVC A,A+DPTR MOV P2,A ;顯示十位顯示十位 SETB P1.6 MOV A,21H MOVC A,A+DPTR MOV P3,A ;顯示個位顯示個位 SETB P1.7 MOV P3,A ;顯示個位顯示個位 SETB P1.7 MOV A,R3 ;顯示百位顯示百位 CJNE A,#0,L1 ;若百為不若百為不0,則轉,則轉L2顯示百位數顯示百位數 CLR P1.5 ;若百位為若百位為0,則不顯示百位數,則不顯示百位
56、數 AJMP L2 L1:MOVC A,A+DPTR MOV P0,A SETB P1.5 L2:SJMP $ TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H ;共陽共陽 DB 80H,90H,88H,83H,0C6H,0A1H,86H,8EH, 0BFH,0FFH END主要用于對主要用于對2 2個操作數按個操作數按位進行邏輯位進行邏輯操作,結果送到操作,結果送到A A或直接尋址單元。或直接尋址單元。v 主要操作主要操作 與、或、異或、移位、取反、清零等。與、或、異或、移位、取反、清零等。v 對標志位的影響對標志位的影響 除了目的操作數為除了目的操作數
57、為ACCACC的指令影響奇偶標志的指令影響奇偶標志P P外,一般不影響標志位。外,一般不影響標志位。 1.簡單操作指令簡單操作指令CLR A ; “0” A。 1字節指令字節指令 2.累加器累加器A取反取反CPL A ; (A) A。 1字節指令字節指令 對累加器對累加器A中的內容中的內容逐位取反逐位取反。例: 設 (A)=3AH, CPL A; 0011 1010B 1100 0101B,即(A)=0C5H 2.移位指令移位指令累加器累加器A循環左移指令循環左移指令 RL A ; 1字節指令字節指令 例例 :設:設(A A)6CH = 0110 1100B6CH = 0110 1100B 執
58、行指令:執行指令:RL ARL A (A)=1101 1000B=0D8H (A)=1101 1000B=0D8H帶進位循環左移指令帶進位循環左移指令 RLC A RLC A ; 1字節指令字節指令 例:設例:設(A A)6CH = 0110 1100B6CH = 0110 1100B, (CY) =1 (CY) =1 執行指令:執行指令:RLC ARLC A (A)=1101 1001B=0D9H (A)=1101 1001B=0D9H 對對RLRL指令,指令, “RL” RL” 相當于乘以相當于乘以2 2 對對RLCRLC指令,在指令,在CY=0CY=0時時“RLC” RLC” 相當于乘以相當于乘以2 2累加器累加器A循環右移指令循環右移指令 RR A ; 1字節指令字節指令 例:設(A)6CH = 0110 1100B 執行指令: RR A (A)=0011 0110B=36H帶進位循環右移指令帶進位循環右移指令 RRC A RRC A ; 1字節指令字節指令 例:設例:設(A A)6CH = 0110 1100B6CH = 0110 1100B, (CY) =1 (CY) =1 執行指令:執行指令:RRC
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 哈爾濱劍橋學院《稅收籌劃與管理》2023-2024學年第二學期期末試卷
- 科爾沁藝術職業學院《環境資源保護法》2023-2024學年第二學期期末試卷
- 重慶應用技術職業學院《電子商務基礎與應用》2023-2024學年第二學期期末試卷
- 信陽農林學院《計算機專業英語》2023-2024學年第二學期期末試卷
- 內江職業技術學院《體育健身健美運動》2023-2024學年第二學期期末試卷
- 追夢的孩子課件
- 2025年江蘇南京文天水利規劃設計研究院有限公司招聘筆試參考題庫含答案解析
- 2025年浙江省金華智尚人才開發有限公司招聘筆試參考題庫附帶答案詳解
- 2025年陜西省技術進步投資有限責任公司招聘筆試參考題庫附帶答案詳解
- 婦科病患者的健康教育
- 明渠均勻流計算公式
- 說課稿-課件-傳染病及其預防
- 校園超市經營投標方案(完整技術標)
- GB/T 9126.1-2023管法蘭用非金屬平墊片第1部分:PN系列
- GB/T 9126.2-2023管法蘭用非金屬平墊片第2部分:Class系列
- 統編版(部編版)語文小學二年級上冊《植物媽媽有辦法》課件(34張PPT)
- 液壓系統原理課件 液壓傳動與控制
- 《習近平總書記關于安全生產重要論述》考試參考題庫150題(含答案)
- 新疆民族發展史和宗教演變史課件
- 可口可樂OBPPC渠道營銷促銷原理
- TD-T 1056-2019 縣級國土調查生產成本定額
評論
0/150
提交評論