單片機2013 10 11_第1頁
單片機2013 10 11_第2頁
單片機2013 10 11_第3頁
單片機2013 10 11_第4頁
單片機2013 10 11_第5頁
已閱讀5頁,還剩87頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

1、二進制形式16進制形式匯編形式01110100 0000101000100100 0000010010000000 11111110740AH2404H80FEH MOV A,#0AH ADD A,#04H SJMP $51系列單片機指令集含有111條指令按指令所占字節(jié)數(shù)分類:單字節(jié)(49條);雙字節(jié)(46條);3字節(jié)(16條)按指令執(zhí)行時間分類:單周期(64條);雙周期(45條);4周期(2條)按指令的功能分類:數(shù)據(jù)傳送類(29條);算術運算類(24條);邏輯運算及移位類(24);控制轉(zhuǎn)移類(17條);位操作類(17條)方括符方括符 表示可選項表示可選項標號標號代表指令所在地址,代表指令所在

2、地址,1-81-8個字母個字母/ /數(shù)字,數(shù)字,“: :”結(jié)尾結(jié)尾操作碼操作碼就是指令功能助記符,指令實體就是指令功能助記符,指令實體目的操作數(shù)目的操作數(shù)源操作數(shù)源操作數(shù)注釋注釋,以,以 “ ; ; ” 開頭開頭LOOP: MOV A, R0 ;將將R0R0的內(nèi)容送的內(nèi)容送A A 標號標號: : 操作碼操作碼 目的操作數(shù)目的操作數(shù), ,源操作數(shù)源操作數(shù); ;注釋注釋 Rn 表示當前選定寄存器組的工作寄存器表示當前選定寄存器組的工作寄存器R0R0R7R7Ri 當前選中的寄存器區(qū)中可作間接尋址寄存器的當前選中的寄存器區(qū)中可作間接尋址寄存器的2 2 個寄個寄存器存器R0R0、R1(i=0,1)R1(

3、i=0,1)#data 表示表示8 8位立即數(shù),即位立即數(shù),即00H00HFFHFFH#data16 表示表示1616位立即數(shù),即位立即數(shù),即0000H0000HFFFFHFFFFHdirect 8 8位直接地址,可以是內(nèi)部位直接地址,可以是內(nèi)部RAMRAM區(qū)的某一單元或某一區(qū)的某一單元或某一專用功能寄存器的地址專用功能寄存器的地址Ri表示作為間接尋址的地址指針表示作為間接尋址的地址指針R0R0R1R1DPTR 數(shù)據(jù)指針,可用作數(shù)據(jù)指針,可用作1616位的地址寄存器位的地址寄存器DPTR 可按可按DPTRDPTR中地址對存儲器尋址中地址對存儲器尋址bit 位尋址區(qū)的直接尋址位位尋址區(qū)的直接尋址

4、位addr11 表示表示1111位地址,用于位地址,用于2K2K范圍內(nèi)尋址范圍內(nèi)尋址addr16 表示表示1616位地址,用于位地址,用于64K64K范圍內(nèi)尋址范圍內(nèi)尋址rel帶符號的帶符號的8 8位偏移量(位偏移量(-128-128+127+127)C或Cy 進位標志位或位處理機中的累加器進位標志位或位處理機中的累加器$ 當前指令的地址當前指令的地址 間接尋址寄存器前綴,如間接尋址寄存器前綴,如RiRi,A+DPTRA+DPTR(X) X X中的內(nèi)容。中的內(nèi)容。(X) 由由X X尋址的單元中的內(nèi)容。尋址的單元中的內(nèi)容。 箭頭右邊的內(nèi)容被箭頭左邊的內(nèi)容所取代。箭頭右邊的內(nèi)容被箭頭左邊的內(nèi)容所取

5、代。尋址方式:用何種方式尋找參與運算的操作數(shù)或操作數(shù)的真實地址。MCS-51單片機有七種尋址方式: 立即尋址 直接尋址 寄存器尋址 寄存器間接尋址 變址尋址(基址寄存器+變址寄存器間接尋址) 相對尋址位尋址 指令直接給出一個操作數(shù),它緊跟在操作碼后,通常稱它為立即數(shù)(8位或16位)。 指令直接給出操作數(shù)所在存儲單元的地址,它緊跟在操作碼后。此方式是訪問專用寄存器的唯一方式(80H FFH)也可訪問內(nèi)部RAM的低128(8052的256)字節(jié) 指令選定的寄存器內(nèi)容就是實際操作數(shù),寄存器可為:R0R7(由RS1、RS2兩位的值選定工作寄存器區(qū)、A、B、CY(位),DPTR 指令所選中的寄存器內(nèi)容是

6、實際操作數(shù)地址(而不是操作數(shù))尋址范圍內(nèi)部RAM(00H7FH/FFH)使用寄存器R0,R1,SP外部數(shù)據(jù)存儲器(0000HFFFFH) 操作數(shù)所指定的寄存器中存放的不是操作數(shù)本身,而是操作數(shù) 此種尋址方式以DPTR或PC作基址寄存器,A作變址寄存器(存放8位無符號數(shù)),兩者相加形成16位程序存儲器地址作操作數(shù)地址。 此指令用于查表此指令用于查表 E0A程序存儲區(qū)2040H 9320E0H 472041H DPH 20DPL 00ALU如:MOVC A,A+DPTR設DPTR=2000H,A=E0H20E0H47指令代碼此種尋址方式以程序計數(shù)器PC的內(nèi)容為基地址,加上指令中給出的偏移量rel,

7、所得結(jié)果為轉(zhuǎn)移目標地址,用于轉(zhuǎn)移指令。偏移量rel是一8位有符號補碼數(shù),范圍128+127。所以轉(zhuǎn)移范圍應在當前PC指針的128+127之間某一程序存儲器地址中。 程序存儲區(qū)ALU如:JC 23H ;若Cy為1則轉(zhuǎn)移1025H1000H 401025H 451001H 23 1024H 471002H 3023H1002H指令代碼當前PC以訪問觸發(fā)器的方式對內(nèi)部RAM、特殊功能寄存器SFR中的位地址空間進行訪問稱之為位尋址??杀粚ぶ返奈唬浩瑑?nèi)RAM的20H2FH單元,位地址00H 7FH;SFR中12個能被8整除的字節(jié)地址,位地址80H以上。方式方式利用的變量利用的變量使用的空間使用的空間寄存

8、器寄存器R0R0R7R7,A A,B B,CYCY,DPTRDPTR片片 內(nèi)內(nèi)直接尋址直接尋址directdirect片內(nèi)片內(nèi)RAMRAM低低128128字節(jié)字節(jié)特殊功能寄存器特殊功能寄存器SFRSFR寄存器間址寄存器間址R0R0,R1R1,SPSPR0R0,R1R1,DPTRDPTR片內(nèi)片內(nèi)RAMRAM片外片外RAMRAM與與I/OI/O口口立即數(shù)立即數(shù)#data#data程序存儲器程序存儲器基址加變址基址加變址A+PC A+DPTRA+PC A+DPTR程序存儲器程序存儲器相對尋址相對尋址PC+relPC+rel程序存儲器程序存儲器位尋址位尋址bitbit片內(nèi)片內(nèi)RAMRAM的的20H20

9、H2FH2FH部分部分SFRSFR總結(jié)總結(jié) 數(shù)據(jù)傳送類指令: (29條) 算術運算類指令: (24條) 邏輯運算及移位類指令: (24條) 控制轉(zhuǎn)移類指令: (17條) 位操作(布爾操作)類指令:(17條) 內(nèi)部存儲器間傳送: (MOV 16條) 外部數(shù)據(jù)存儲器與累加器間傳送: (MOVX 4條) 程序存儲器向累加器傳送: (MOVC 2條) 數(shù)據(jù)交換: (XCH,XCHD,SWAP 5條) 堆棧操作: (PUSH,POP 2條)特點:特點:源操作數(shù)在內(nèi)部,目的操作數(shù)也在源操作數(shù)在內(nèi)部,目的操作數(shù)也在 內(nèi)部。內(nèi)部。分分四類四類介紹如下介紹如下以以累加器累加器A A為目的字節(jié)為目的字節(jié)的傳送指令

10、(的傳送指令(4 4條)條)以以RnRn為目的字節(jié)為目的字節(jié)的傳送指令(的傳送指令(3 3條)條)以以直接地址為目的字節(jié)直接地址為目的字節(jié)的傳送指令(的傳送指令(5 5條)條)以以間接地址為目的字節(jié)間接地址為目的字節(jié)的傳送指令(的傳送指令(4 4條)條)(1)立即數(shù)送累加器 MOV A,#data;A #data(2)寄存器內(nèi)容送累加器 MOV A,Rn ;A (Rn) (n=07)(3)內(nèi)部RAM或SFR內(nèi)容送累加器 MOV A,direct ; A (direct)(4)內(nèi)部RAM內(nèi)容送累加器 MOV A,Ri ;A (Ri) (i=0,1) (5)立即數(shù)送寄存器 MOV Rn,#data

11、; (Rn) #data (n=07) (6)累加器內(nèi)容送寄存器 MOV Rn,A ;Rn (A) (n=07)(7)內(nèi)部RAM或SFR內(nèi)容送寄存器 MOV Rn,direct ;Rn (direct) (n=07)(8)立即數(shù)送內(nèi)部RAM或SFR MOV direct,#data ; direct #data(9)累加器內(nèi)容送內(nèi)部RAM或SFR MOV direct ,A ; direct (A)(10)寄存器內(nèi)容送內(nèi)部RAM或SFR MOV direct ,Rn ; direct (Rn) (n=07)(11)內(nèi)部RAM或SFR之間直接傳送 MOV direct1,direct2 ; di

12、rect1 (direct2)(12)內(nèi)部RAM內(nèi)容送內(nèi)部RAM或SFR MOV direct,Ri; direct (Ri) (i=0,1) (13)立即數(shù)送內(nèi)部RAM MOV Ri ,#data; (Ri) #data (i=0,1) (14)累加器內(nèi)容送內(nèi)部RAM MOV Ri ,A; (Ri) (A) (i=0,1) (15)內(nèi)部RAM或SFR內(nèi)容送內(nèi)部RAM MOV Ri ,direct; (Ri) (direct) (i=0,1) (16)16位立即數(shù)傳送指令 MOV DPTR ,#data16 ; DPTR #data16; DPH #dataH ; DPL #dataL例例 M

13、OV AMOV A,R6 R6 ;(;(R6R6)A A MOV A MOV A,R0 R0 ; (R0)A(R0)A MOV A MOV A,20H 20H ;(;(20H20H)A A MOV 20H MOV 20H ,A A ; (A)20H (A)20H 只有指令表中的指令才有對應指令代碼,計算機才能只有指令表中的指令才有對應指令代碼,計算機才能執(zhí)行。編程時,不能隨意創(chuàng)造發(fā)明指令。執(zhí)行。編程時,不能隨意創(chuàng)造發(fā)明指令。1、一條指令中不能同時出現(xiàn)兩個工作寄存器。一條指令中不能同時出現(xiàn)兩個工作寄存器。非法非法指令:指令:MOV R1MOV R1,R2R2MOV R2MOV R2,R0R02、

14、間址寄存器只能使用間址寄存器只能使用 R0R0、R1R1。 非法非法指令:指令: MOV AMOV A,R2R23、 SFRSFR區(qū)只能區(qū)只能直接尋址直接尋址,不能用寄存器間接尋址。,不能用寄存器間接尋址。非法指令:非法指令: MOV R0MOV R0,#80H#80H MOV A MOV A,R0R04、指令表、指令表(P61):關注表中:關注表中指令字節(jié)數(shù)和機器周期數(shù)指令字節(jié)數(shù)和機器周期數(shù)MOV A,#30HMOV 4FH,AMOV R0,#20HMOV R0,4FHMOV 21H,20H練習題:用兩種尋址方式實現(xiàn),將片內(nèi)練習題:用兩種尋址方式實現(xiàn),將片內(nèi)RAMRAM 60H 60H單元的

15、數(shù)據(jù)傳送給累加器單元的數(shù)據(jù)傳送給累加器A A。解:解: MOV A,#60H()MOV R0,#60H() MOV A,R0;A=30HA=30H;(4FH)=30H(4FH)=30H;R0=20HR0=20H;(20H)=30H(20H)=30H;(21H)=30H(21H)=30HMOV R0,60H MOV A,R0 () 解:解: MOV A,60H () 結(jié)果結(jié)果A=32H順序執(zhí)行下列指令序列,求每一步執(zhí)行結(jié)果。順序執(zhí)行下列指令序列,求每一步執(zhí)行結(jié)果。地址地址內(nèi)容內(nèi)容32H58H60H32H 在MCS-51系統(tǒng)中只能通過累加器A與片外數(shù)據(jù)存儲器進行數(shù)據(jù)傳送,訪問時,只能通過Ri和DP

16、TR以間接尋址方式進行。注意:注意:RDRD* *或或WRWR* *信號有效。信號有效。格式:MOVX A,DPTR;A (DPTR) MOVX DPTR,A ; (DPTR) (A) MOVX A,Ri ; A (Ri) (i=0,1) MOVX Ri , A ; A (Ri) (i=0,1) 其中前兩條指令通過DPTR間接尋址,可以對整個64KB片外數(shù)據(jù)存儲器訪問。后兩條指令通過Ri間接尋址,只能對片外數(shù)據(jù)存儲器的低端的256字節(jié)訪問,訪問時將低8位地址放于Ri中。特點:單字節(jié)指令第1、2條指令可以在外部RAM 64K范圍尋址;第3、4條指令可以對外部RAM的第0頁尋址;尋址范圍是0000

17、H00FFH。片外數(shù)據(jù)存儲器不能直接尋址。片外數(shù)據(jù)存儲器不能直接尋址。下列為下列為非法非法指令:指令: MOVX AMOVX A,2000H 2000H MOVX 2100H MOVX 2100H,2000H2000HMOV DPTRMOV DPTR,#2000H#2000HMOVX AMOVX A,DPTRDPTRMOV DPTRMOV DPTR,#2100H#2100HMOVX DPTRMOVX DPTR,A A;DPTR=2000HDPTR=2000H;A=XA=X;DPTR=2100HDPTR=2100H;(2100H)=X(2100H)=X 程序存儲器傳送指令只有兩條,一條用DPTR

18、基址變址尋址。一條用PC基址變址尋址。這兩條指令通常用于訪問表格數(shù)據(jù),因此以稱為查表指令。格式:遠程查表指令:MOVC A,A+DPTR ; A (A)+(DPTR) 近程查表指令:MOVC A,A+PC ; PC (PC)+1 ; A (A)+(PC) 第一條指令可訪問整個ROM的64KB空間,表格可放在ROM的任何位置,與MOVC指令無必然的關系。 第二條指令優(yōu)點:不改變PC的狀態(tài),根據(jù)A的內(nèi)容取表格常數(shù)。缺點:(1)表格只能存放在查表指令以下的256個單元內(nèi)。 (2)當表格首地址與本指令間有其它指令時,須用調(diào)整偏移量,調(diào)整 量為下 一條指令的起始地址到表格首址之間的字節(jié)數(shù)。例如例如: (

19、A)=30H,: (A)=30H,執(zhí)行地址執(zhí)行地址1000H1000H處的指令處的指令 1000H: MOVC A,A+PC1000H: MOVC A,A+PC 本指令占用一個字節(jié),執(zhí)行結(jié)果將程序存本指令占用一個字節(jié),執(zhí)行結(jié)果將程序存儲器中儲器中1031H1031H的內(nèi)容送入的內(nèi)容送入A A。例如例如 (DPTR)=8100H (A)=40H (DPTR)=8100H (A)=40H 執(zhí)行指令執(zhí)行指令 MOVC A,A+DPTRMOVC A,A+DPTR 本指令占用一個字節(jié),執(zhí)行結(jié)果將程序存本指令占用一個字節(jié),執(zhí)行結(jié)果將程序存儲器中儲器中8140H8140H的內(nèi)容送入的內(nèi)容送入A A。例如:查

20、表指令例如:查表指令MOVC AMOVC A,A+PCA+PC所在的地址為所在的地址為2000H2000H,表格的起始單元,表格的起始單元地址為地址為2035H2035H,表格的第,表格的第4 4個元素(位移量為個元素(位移量為03H03H)的內(nèi)容為)的內(nèi)容為45H45H,則查表指,則查表指令的處理過程如下:令的處理過程如下:MOV AMOV A,#03H#03H;表格元素相對于表首的位移量送累加器;表格元素相對于表首的位移量送累加器A AADD AADD A,#34H#34H;當前程序計數(shù)器;當前程序計數(shù)器PCPC相對于表首的差值加到累加器相對于表首的差值加到累加器A A中中MOVC AMO

21、VC A,A+PCA+PC;查表,查得第;查表,查得第4 4個元素內(nèi)容個元素內(nèi)容45H45H送累加器送累加器A A注意:查表指令的長度為注意:查表指令的長度為1 1個字節(jié),當前程序計數(shù)器個字節(jié),當前程序計數(shù)器PCPC的值應為查表指的值應為查表指令的地址加令的地址加1 1。地地 址址內(nèi)內(nèi) 容容2000HMOVC2001H2035H表格表格2036H2038H45HPCPC 給出每條指令執(zhí)行后的結(jié)果給出每條指令執(zhí)行后的結(jié)果 MOV 23H,#30HMOV 12H,#34HMOV R0,#23HMOV R7,12HMOV R1,#12HMOV A,R0MOV 34H,R1MOV 45H,34HMOV

22、 DPTR,#6712HMOV 12H,DPHMOV R0,DPLMOV A,R0;(23H)=30H;(12H)=34H;R0=23H;R7=34H;R1=12H;A=30H;(34H)=34H;(45H)=34H;DPTR=6712H;(12H)=6767H;R0=1212H;A=6767HMOV P1, #0FEH ; 11111110B可以使可以使P1.0上的發(fā)光二極管點亮上的發(fā)光二極管點亮MOV P1, #0F0H ; 11110000B可以使可以使P1口上的上面口上的上面4個發(fā)光二個發(fā)光二極管點亮,極管點亮,8051的輸入的輸入/輸出口輸出口都是漏極開路輸出,其中都是漏極開路輸出,

23、其中P1、P2和和P3口內(nèi)部有口內(nèi)部有30K歐的上拉電歐的上拉電阻,屬于電壓輸出型。但是從阻,屬于電壓輸出型。但是從外部流入外部流入1020mA的電流是可的電流是可以的。以的。P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 5vP1.0 aP1.1 bP1.2 cP1.3 dP1.4 eP1.5 fP1.6 gP1.7 dp5vMOV P1, #00H ; 顯示顯示 8.MOV P1, #0F8H ; 顯示顯示 7MOV P1, #88H ; 顯示顯示 A單片機的一個引腳輸出的高低電平,可以通過單片機的一個引腳輸出的高低電平,可以通過“光電光電耦合器耦合器”控制

24、繼電器,從而以控制繼電器,從而以“弱電弱電”控制控制“強電強電”。寫出完成下列功能的程序段。寫出完成下列功能的程序段。(1 1)將)將R0R0的內(nèi)容送的內(nèi)容送R6R6中程序為:中程序為:(2 2)將片內(nèi))將片內(nèi)RAM 30HRAM 30H單元的內(nèi)容送片外單元的內(nèi)容送片外60H60H單元中程序為:單元中程序為:(3 3)將片外)將片外RAM 1000HRAM 1000H單元的內(nèi)容送片內(nèi)單元的內(nèi)容送片內(nèi)20H20H單元中程序為:單元中程序為:(4 4)將)將ROM 2000HROM 2000H單元的內(nèi)容送片內(nèi)單元的內(nèi)容送片內(nèi)RAMRAM的的30H30H單元中程序為:單元中程序為:MOV AMOV

25、A,R0R0MOV R6MOV R6,A AMOV AMOV A,30H30HMOV R0MOV R0,#60H#60HMOVX R0MOVX R0,A AMOV DPTRMOV DPTR,#1000H#1000HMOVX AMOVX A,DPTRDPTRMOV 20HMOV 20H,A AMOV AMOV A,#00H#00HMOV DPTRMOV DPTR,#2000H#2000HMOVC AMOVC A,A+DPTRA+DPTRMOV 30HMOV 30H,A A格式:XCH A,Rn ; (A)(Rn) (n=07) XCH A,direct ; (A) (direct) XCH A,

26、Ri; (A) (Ri) (i=0,1) XCHD A,Ri ; (A30) (Ri)30) (i=0,1) SWAP A ; (A30) (A74) 普通傳送指令實現(xiàn)將源操作數(shù)的數(shù)據(jù)傳送到目的操作數(shù),指令執(zhí)行后源操作數(shù)不變,數(shù)據(jù)傳送是單向的。數(shù)據(jù)交換指令數(shù)據(jù)作雙向傳送,傳送后,前一個操作數(shù)原來的內(nèi)容傳送到后一個操作數(shù)中,后一個操作數(shù)原來的內(nèi)容傳送到前一個操作數(shù)中。特點:1. 數(shù)據(jù)交換指令要求第一個操作數(shù)須為累加器A。2. 前三條指令執(zhí)行后會影響PSW中的P標志。3. 在使用XCHD指令前應預先給Ri中置地址。例例1 1: (A)=80H(A)=80H,(R7)=08H(R7)=08H,(40

27、H)=F0H(40H)=F0H (R0)=30H (R0)=30H,(30H)=OFH(30H)=OFH執(zhí)行下列指令:執(zhí)行下列指令: XCH A,R7 ;(A)XCH A,R7 ;(A)與與(R7)(R7)互換互換 XCH A,40H ;(A)XCH A,40H ;(A)與與(40H)(40H)互換互換 XCH A,R0 ;(A)XCH A,R0 ;(A)與與(R0)(R0)互換互換 結(jié)果:結(jié)果:(A)=0FH,(R7)=80H,(40H)=08H,(30H)=F0H(A)=0FH,(R7)=80H,(40H)=08H,(30H)=F0H例例2 2: (R0)=60H,(60H)=3EH,(A

28、)=59H(R0)=60H,(60H)=3EH,(A)=59H執(zhí)行指令:執(zhí)行指令: XCHD A,RO XCHD A,RO 結(jié)果:結(jié)果:(A)=5EH,(60H)=39H(A)=5EH,(60H)=39H。例例3 3: (A A)=0C5H=0C5H執(zhí)行指令:執(zhí)行指令: SWAP ASWAP A 結(jié)果:(結(jié)果:(A A)=5CH=5CH若若R0R0的內(nèi)容為的內(nèi)容為30H30H,片內(nèi),片內(nèi)RAM 30HRAM 30H單元的內(nèi)容為單元的內(nèi)容為23H23H,累加器累加器A A的內(nèi)容為的內(nèi)容為45H45H,則執(zhí)行,則執(zhí)行XCH AXCH A,R0R0 指令后片內(nèi)指令后片內(nèi)RAM 30HRAM 30H單

29、元的內(nèi)容為單元的內(nèi)容為45H45H,累加器,累加器A A中的內(nèi)容為中的內(nèi)容為23H23H。 若執(zhí)行若執(zhí)行SWAP ASWAP A指令,則累加器指令,則累加器A A的內(nèi)容為的內(nèi)容為54H54H。例:設例:設A=29H,執(zhí)行指令,執(zhí)行指令 XCH A,2AH后,后, A= ? ,(2AH)= ?38H29HXCH 60H,61H; 對嗎?對嗎?不對!不對!29H29H 堆棧是在片內(nèi)RAM中按“先進后出,后進先出”原則設置的專用存儲區(qū)。數(shù)據(jù)的進棧和出棧由指針SP統(tǒng)一管理。在MCS-51系統(tǒng)中,堆棧操作指令有兩條:格式:PUSH direct ; SP (SP)+1 ;(SP) (direct) PO

30、P direct ; direct (SP) ;SP (SP)1 其中PUSH指令入棧,POP指令出棧。操作時以字節(jié)為單位。入棧時SP指針先加1,再入棧。出棧時內(nèi)容先出棧,SP指針再減1。用堆棧保存數(shù)據(jù)時,先入棧的內(nèi)容后出棧;后入棧的內(nèi)容先出棧。特點:Rn和A不能直接用在本指令中,A必須用ACC(或E0H),Rn也要用它的物理地址。 例:設 A=02H,B=56H,執(zhí)行下列指令后, SP= ? ,A= ? ,B= ? 。SBR:MOV SP,#30H ;設棧底;設棧底 PUSH AccPUSH BMOV A,#00HMOV B,#01H POPBPOP AccSP SPB02H 02H 56H

31、ASPB02H 56H02H 56HASPB00H 56H02H 01HASPB00H 56H02H 56HASPB02H 56H02H 56HA02H56H30HB02H56HA 說明程序執(zhí)行過程中,SP的內(nèi)容及堆棧中內(nèi) 容的改變過程。 程序如下: MOV SP,#30H MOV A,#20H MOV B,#30H PUSH Acc PUSH B POP B POP Acc1MOV A,#1000H2MOVX A,1000H3MOVC A,1000H4MOVX 60H,A5MOV R0,60H MOV 61H,R06. XCH R1,R2 7. MOVX DPTR,#2000H 8. MOV

32、X 60H,DPTR不帶進位加:(ADD 4條)帶進位加:(ADDC 4條)增量指令:(INC 5條)十進制調(diào)整指令: (DA 1條)減法指令: (SUBB 4條)減量指令: (DEC 4條)乘法指令: (MUL 1條)除法指令: (DIV 1條)格式:ADD A,#data ; A (A)+#data ADD A,Rn; A (A)+(Rn) (n=07) ADD A,Ri ; A (A)+(Ri) (i=0,1) ADD A,direct ; A (A)+(direct) 特點:1. 兩個操作數(shù)均為8位,其中之一是累加器A;2. 加法操作在ALU中完成,結(jié)果送回累加器A,運 算時產(chǎn)生的標志

33、位在PSW中;要注意累加器A中的運算結(jié)果對各個標志位的影響3. 不論兩操作數(shù)是否為帶符號數(shù),機器均按帶符號數(shù)運算。PSWPSW(1 1)如果位)如果位7 7有進位,則置有進位,則置“1”“1”進位標志進位標志CyCy,否則清,否則清“0”Cy“0”Cy(2 2)如果位)如果位3 3有進位,置有進位,置“1”“1”輔助進位標志輔助進位標志AcAc,否則清,否則清“0”Ac“0”Ac(AcAc為為PSWPSW寄存器中的一位)寄存器中的一位)(3 3)如果位)如果位6 6有進位,而位有進位,而位7 7沒有進位,或者位沒有進位,或者位7 7有進位,而位有進位,而位6 6沒有,則溢出標志位沒有,則溢出標

34、志位OVOV置置“1”“1”,否則清,否則清“0”O(jiān)V“0”O(jiān)V。A A 總結(jié):總結(jié):溢出標志位溢出標志位OVOV的狀態(tài),只有在帶符號數(shù)加法運算的狀態(tài),只有在帶符號數(shù)加法運算時才有意義。當兩個帶符號數(shù)相加時,時才有意義。當兩個帶符號數(shù)相加時,OV=1OV=1,表示加法,表示加法運算超出了累加器運算超出了累加器A A所能表示的帶符號數(shù)的有效范圍所能表示的帶符號數(shù)的有效范圍 例:請分析如下指令執(zhí)行后累加器A和PSW中內(nèi)容是什么?MOV A,#5AHADD A,#6BH求解: A=0 1 0 1 1 0 1 0B + data= 0 1 1 0 1 0 1 1BCy 1 1 0 0 0 1 0 1B

35、PSW:CyACF0RS1RS0OV-P01000100例例1 (A)=53H1 (A)=53H,(R0)=FCH(R0)=FCH,執(zhí)行指令,執(zhí)行指令 ADD A,R0ADD A,R0例例2 (A)= 85H,(R0)=20H,2 (A)= 85H,(R0)=20H,(20H20H)=AFH=AFH,執(zhí)行指令:,執(zhí)行指令: ADD A,R0ADD A,R0例例1 1結(jié)果為結(jié)果為: (A)=4FH: (A)=4FH,Cy=1Cy=1,Ac=0Ac=0,OV=0OV=0,P=1P=1注意:上面的運算中,由于位注意:上面的運算中,由于位6 6和位和位7 7同時有進位,同時有進位,所以標志位所以標志位

36、OV=0OV=0。例例2 2結(jié)果為結(jié)果為: :(A A)=34H=34H,Cy=1Cy=1,Ac=1Ac=1,OV=1OV=1,P=1P=1注意:由于位注意:由于位7 7有進位,而位有進位,而位6 6無進位,所以標志無進位,所以標志位位OV=1 OV=1 格式:ADDC A,#data ; A (A)+#data+Cy ADDC A,Rn; A (A)+(Rn)+Cy (n=07) ADDC A,Ri ; A (A)+(Ri)+Cy (i=0,1) ADDC A,direct ; A (A)+(direct)+Cy特點:注釋中的Cy中內(nèi)容為指令執(zhí)行前Cy內(nèi)容,指令執(zhí)行后形成新的Cy保留在PSW

37、中,其余和不帶Cy的加法指令相同;本類指令用于多字節(jié)加法程序中。 例:(例:(A A)=85H,=85H,(20H20H)=FFH,Cy=1=FFH,Cy=1,執(zhí)行指令:,執(zhí)行指令: ADDC A,20HADDC A,20H結(jié)果為結(jié)果為: :(A A)=85H=85H,Cy=1Cy=1,Ac=1Ac=1,OV=0OV=0,P=1 P=1 (A A中中1 1的位數(shù)的位數(shù)為奇數(shù))為奇數(shù))測驗:試把存放在R1R2和R3R4中的兩個16位數(shù)相加,結(jié)果存于R5R6中。R1 R2R3 R4R5 R6C+ADDADDCC處理時,R2和R4用一般的加法指令ADD,結(jié)果放于R6中,R1和R3用帶進位的加法指令A

38、DDC,結(jié)果放于R5中,程序如下:MOV A,R2ADD A,R4MOV R6,AMOV A,R1ADDC A,R3MOV R5,A格式:INC A; A (A)+1INC Rn; Rn (Rn)+1 (n=07) INC direct ; direct (direct)+1INC Ri ; (Rn) (Rn)+1 (n=0,1) INC DPTR; DPTR (DPTR)+1 特點:1. 本指令僅第一條對PSW中P標志有影響。 2. 第5條指令INC DPTR,是16位數(shù)增1指令。指令首先對低8位指針DPL的內(nèi)容執(zhí)行加1的操作,當產(chǎn)生溢出時,就對DPH的內(nèi)容進行加1操作,并不影響標志Cy的狀

39、態(tài)。 3. 思考INC A ;(A)=FFH格式:DA A 操作:若累加器低4位大于9或BCD碼加時有半進位AC=1,則A (A)+06H 。若累加器高4位大于9或BCD碼加時有全進位CY=1,則A (A)+60H。特點:1. 用于對BCD碼十進制數(shù)加法運算結(jié)果的內(nèi)容修正。2. 緊跟加法指令ADD和ADDC后,對加法結(jié)果調(diào)整;用于BCD加、BCD減運算。 3. 具體過程是DA A 指令自動實現(xiàn)。ALUALU只能進行二進制加法(即低只能進行二進制加法(即低4 4位向高位向高4 4位逢位逢1616進進1 1)原則并不原則并不能適用于十進制數(shù)的加法運算,有時會產(chǎn)生錯誤結(jié)果。能適用于十進制數(shù)的加法運算

40、,有時會產(chǎn)生錯誤結(jié)果。例如:例如:(a a)3+6=9 0011+0101=1001 3+6=9 0011+0101=1001 運算結(jié)果正確運算結(jié)果正確(b b)7+8=15 0111+1000=1111 7+8=15 0111+1000=1111 運算結(jié)果不正確運算結(jié)果不正確(c c)9+8=17 1001+1000=0001 C=1 9+8=17 1001+1000=0001 C=1 結(jié)果不正確結(jié)果不正確出錯原因:出錯原因: BCDBCD碼只用了了其中的碼只用了了其中的1010個,個,6 6個沒用到的編碼。個沒用到的編碼。(10101010,10111011,11001100,110111

41、01,11101110,11111111)為無效碼)為無效碼 凡結(jié)果進入或者跳過無效碼編碼區(qū)時,其結(jié)果就是錯誤的。凡結(jié)果進入或者跳過無效碼編碼區(qū)時,其結(jié)果就是錯誤的。例:寫出85+59=144BCD加法程序,并對加法過程和BCD調(diào)整進行分析。求解:ORG1000HMOV A,#85H; A #85HADDA,#59H; A (A)+#59HDAA; A #44H,Cy=1上例加法操作及BCD調(diào)整過程:例例 (A A)=56H,=56H,(R5R5)=67H=67H,把它們看作為兩個壓縮的,把它們看作為兩個壓縮的BCDBCD數(shù),進行數(shù),進行BCDBCD數(shù)的加法。執(zhí)行指令:數(shù)的加法。執(zhí)行指令: A

42、DD A,R5ADD A,R5 DA A DA A 由于高、低由于高、低4 4位分別大于位分別大于9 9,所以要分別加,所以要分別加6 6進行十進制進行十進制調(diào)整對結(jié)果進行修正。調(diào)整對結(jié)果進行修正。結(jié)果為:結(jié)果為: (A A)=23H=23H,Cy=1Cy=1 可見,可見,56+67=12356+67=123,結(jié)果是正確的。,結(jié)果是正確的。大家考慮一下:大家考慮一下:99+199+1和和99+099+0的加法過程的加法過程對于高位一定是低四位操作完成后(包括進位)再看高四位對于高位一定是低四位操作完成后(包括進位)再看高四位是否大于是否大于9 9測驗:在測驗:在R3中有十進制數(shù)中有十進制數(shù)67

43、,在,在R2中有十進制數(shù)中有十進制數(shù)85,用十,用十進制運算,運算的結(jié)果放于進制運算,運算的結(jié)果放于R5中。寫出程序和計算過程。中。寫出程序和計算過程。(R3)=67=0110 0111 B(R2)=85=1000 0101 B + (A)=1110 1100 B=ECH 52H=(A)1=(C)ECH=1110 1100B 0110 0110B + 1 0101 0010B程序為:程序為:MOV A,R3 ;(;(R3)=67ADD A,R2 ;(;(R2)=85,(A)=0ECHDA A;(;(A) =52HMOV R5,A ;(;(R5)=52H 程序中程序中DA指令對指令對ADD指令運

44、算出來的放于指令運算出來的放于累加器累加器A中的結(jié)果進行調(diào)整,調(diào)整后,累加器中的結(jié)果進行調(diào)整,調(diào)整后,累加器A中的內(nèi)容為中的內(nèi)容為52H,CY為為1,則結(jié)果為,則結(jié)果為152,最后,最后放于放于R5中的內(nèi)容為中的內(nèi)容為52H(十進制數(shù)(十進制數(shù)52)。)。 在MCS-51單片機中,只提供了一種帶借位的減法指令,沒有提供一般的減法指令,一般的減法操作可以通過先對CY標志清零,然后再執(zhí)行帶借位的減法來實現(xiàn)。格式:SUBB A,#data ; A (A)#dataCy SUBB A,Rn ; A (A)(Rn)Cy (n=07) SUBB A,direct ; A (A) (direct) Cy S

45、UBB A, Ri ; A (A)(Ri)Cy (n=0,1) 特點:1. SUBB指令在執(zhí)行時要影響指令在執(zhí)行時要影響CY、AC、OV和和P標志位標志位;2. 本指令用于單字節(jié)、多字節(jié)減法程序;本指令用于單字節(jié)、多字節(jié)減法程序;3. 機器按帶符號數(shù)運算,并產(chǎn)生機器按帶符號數(shù)運算,并產(chǎn)生PSW中標志;中標志;4. 形成形成OV標志的規(guī)則為:標志的規(guī)則為: (1)如果位)如果位7需借位則置需借位則置“1” Cy,否則清,否則清“0”Cy; (2)如果位)如果位3需借位則置需借位則置“1”Ac,否則清,否則清“0”Ac; (3)如果位)如果位6需借位而位需借位而位7不需要借位,或者位不需要借位,或

46、者位7需借位,位需借位,位6不需借位,不需借位,則置則置“1溢出標志位溢出標志位OV,否則清,否則清“0”O(jiān)V。例例1 1 (A A)=C9H ,=C9H ,(R2R2)=54H,Cy=1=54H,Cy=1,執(zhí)行指令,執(zhí)行指令: : SUBB A,R2 SUBB A,R2結(jié)果:(結(jié)果:(A A)=74H,Cy=0,Ac=0,OV=1=74H,Cy=0,Ac=0,OV=1(位(位6 6向位向位7 7借位)借位)例例2 2 求求R3R2 - R1R3R2 - R1。程序為:程序為:MOV MOV A A,R2R2CLR CLR C CSUBB ASUBB A,R1R1MOV MOV R3 R3,A

47、 A格式:DEC A; A (A)1 DEC Rn ; Rn (Rn)1 (n=07) DEC direct ; direct (direct) 1 DEC Ri ; (Ri) (Ri)1 (n=0,1) 特點:DEC A指對PSW中P標志有影響。 注意:DEC A (A)=00H?格式:MUL AB; B A (A)(B) ; Cy0 DIV A B ; A (A)/(B)的商;; B (A)/(B)的余數(shù);; Cy 0,OV 0MUL AB指令執(zhí)行時將對存放于累加器指令執(zhí)行時將對存放于累加器A中的無符號被乘數(shù)和放于中的無符號被乘數(shù)和放于B寄存器中寄存器中的無符號乘數(shù)相乘,積的高字節(jié)存于的無

48、符號乘數(shù)相乘,積的高字節(jié)存于B寄存器中,低字節(jié)存于累加器寄存器中,低字節(jié)存于累加器A中。中。DIV A B指令執(zhí)行時將用存放在累加器指令執(zhí)行時將用存放在累加器A中的無符號被除數(shù)與存放在中的無符號被除數(shù)與存放在B寄存器寄存器中的無符號除數(shù)相除,除得的結(jié)果,商的存于累加器中的無符號除數(shù)相除,除得的結(jié)果,商的存于累加器A中,余數(shù)存于中,余數(shù)存于B寄寄存器中。存器中。特點:1. 單字節(jié)指令,執(zhí)行時間為單字節(jié)指令,執(zhí)行時間為48T(4機器周期);機器周期);2. 操作數(shù)均為操作數(shù)均為8位無符號數(shù);位無符號數(shù); 3. 乘法指令,積大于乘法指令,積大于255,置,置1溢出標志位溢出標志位OV,否則清,否則清

49、0OV位位 4. 除法指令,除法指令,B的內(nèi)容(除數(shù))不為的內(nèi)容(除數(shù))不為0,計算后,清,計算后,清0Cy和溢出標志位和溢出標志位OV;如除數(shù)(;如除數(shù)(B的內(nèi)容)為的內(nèi)容)為0,則存放結(jié)果的,則存放結(jié)果的A、B的內(nèi)容不定,并置的內(nèi)容不定,并置1溢出標志位溢出標志位OV。 DA A指令只能用在加法指令后,對二進制加法結(jié)果進行調(diào)整。BCD減法可以采用以下方法:1、求減數(shù)的補碼;2、進行被減數(shù)+減數(shù)補數(shù)運算;3、對所得兩數(shù)之和進行BCD調(diào)整。例:寫出91-34=57的BCD減法程序。求解: ORG1000HCLRC; C 0MOVA,#9AH ; A #9AHSUBBA,#34H; 求-34補A

50、DDA,#91H ;求91+-34補DAA; BCD調(diào)整SJMP$END上例減法操作及BCD調(diào)整過程:邏輯與指令:(ANL 6條)邏輯或指令:(ORL 6條)邏輯異或指令: (XRL 6條)累加器清除與求反指令: (CLR、CPL 2條)移位指令: ( RL、RLC、RR、RRC 4條)格式:ANL A,#data ; A (A)#data ANL A,Rn ; A (A)(Rn) (n=07) ANL A,direct ; A (A)(direct) ANL A, Ri ; A(A)(Ri) (n=0,1) ANL direct,A; direct (direct)(A) ANL direc

51、t,#data; direct (direct)#data 特點:前四條指令執(zhí)行后會對PSW中P標志產(chǎn)生影響。用途:可從某字節(jié)中取出某幾位。格式:ORL A,#data ; A (A) #data ORL A,Rn ; A (A) (Rn) (n=07) ORL A,direct ; A (A) (direct) ORL A, Ri ; A(A) (Ri) (n=0,1) ORL direct,A; direct (direct) (A) ORL direct,#data; direct (direct) #data 特點:前四條指令執(zhí)行后會對PSW中P標志產(chǎn)生影響。用途:給某字節(jié)中某幾位置1

52、。格式:XRL A,#data ; A (A) #data XRL A,Rn ; A (A) (Rn) (n=07) XRL A,direct ; A (A) (direct) XRL A, Ri ; A (A) (Ri) (n=0,1) XRL direct,A; direct (direct) (A) XRL direct,#data; direct (direct) #data 特點:前四條指令執(zhí)行后會對PSW中P標志產(chǎn)生影響。用途:令某字節(jié)中某幾位置取反,其余位不變。+BABA BABA BABA 例例1 1 (A A)=07H,=07H,(R0R0)=0FDH,=0FDH,執(zhí)行指令:

53、執(zhí)行指令: ANL A,R0ANL A,R0 結(jié)果:(結(jié)果:(A A)=05H=05H例例2 2 (P1P1)=05H,=05H,(A A)=33H=33H,執(zhí)行指令,執(zhí)行指令 ORL P1,AORL P1,A結(jié)果:(結(jié)果:(P1P1)=37H =37H 例例3 3 (A A)=90H,=90H,(R3R3)=73H =73H 執(zhí)行指令:執(zhí)行指令: XRL A,R3XRL A,R3結(jié)果:(結(jié)果:(A A)=E3H =E3H 思考題:寫出完成下列功能的指令段。思考題:寫出完成下列功能的指令段。1 1對累加器對累加器A A中的中的1 1、3 3、5 5位清位清0 0,其余位不變,其余位不變2 2對

54、累加器對累加器A A中的中的2 2、4 4、6 6位置位置1 1,其余位不變,其余位不變3 3對累加器對累加器A A中的中的0 0、1 1位取反,其余位不變位取反,其余位不變ANL AANL A,#11010101B#11010101BORL AORL A,#01010100B#01010100BXRL AXRL A,#00000011B#00000011B格式:CLR A ; A 0 CPL A ; A 特點:影響P標志,不影響Cy、Ac、OV標志位。用途:CLR用于是累加器清零;CPL可用于求某數(shù)的補碼。)(A 循環(huán)移位指令(4 4條)條)RL ARR ARLC ARRC AA.7 A.0

55、A.7 A.0A.7 A.0CYCYA.7 A.0后兩條指令,影響后兩條指令,影響P P標志和標志和CYCY。 MCS-51系統(tǒng)有四條對累加器系統(tǒng)有四條對累加器A的循環(huán)移位指令,前兩條只的循環(huán)移位指令,前兩條只在累加器在累加器A中進行循環(huán)移位,后兩條還要帶進位標志中進行循環(huán)移位,后兩條還要帶進位標志CY進行循進行循環(huán)移位。每一次移一位。環(huán)移位。每一次移一位。例:若若A=5CHA=5CH,CY=1CY=1,執(zhí)行,執(zhí)行RLC ARLC A后,后,v 對對RLCRLC、RRCRRC指令,在指令,在CY=0CY=0時時 RLCRLC相當于相當于乘乘以以2 2 RRCRRC相當于相當于除除以以2 2結(jié)果

56、:結(jié)果:A=B9HA=B9H,CY=0CY=0,P=1P=10101 11000101 11001 11011 10011011 10010 0用途:用途:對某數(shù)擴大或縮小對某數(shù)擴大或縮小1 1倍。倍。無條件轉(zhuǎn)移指令:(LJMP、AJMP、SJMP、JMP 4條)條件轉(zhuǎn)移指令:(JZ、JNZ、CJNE、DJNZ 8條)子程序調(diào)用及返回指令: (LCALL、ACALL、RET、RETI 4條)空操作指令: (NOP 1條)格式:LJMP addr16 ; PC addr16 AJMP addr11 ; PC(PC)+2; PC100 指令中的A100 SJMP rel ; PC (PC)+2;

57、PC (PC)+rel JMP A+DPTR ; PC (A)+(DPTR)特點:這類指令執(zhí)行時不會影響PSW中各標志位;指令的操作對象是PC中地址;第2、3條指令是相對轉(zhuǎn)移指令,匯編時能產(chǎn)生浮動代碼,在子程序中很有用。本指令是2KB范圍內(nèi)的絕對轉(zhuǎn)移指令:AJMP addr11 ; PC(PC)+2(形成頁面地址PC15-11); PC100 addr11 (形成頁面地址)說明:本指令是雙字節(jié)指令。指令碼為:a10 a9 a8 0 0 0 0 1 a7 a6 a0 操作碼其中a10a0為低11位目標地址。編程時addr11常用符號地址,匯編時翻譯成機器碼。0000H1 區(qū)0 區(qū)31 區(qū)AJMPPC15 PC14 PC13 PC12 PC11

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論