第3章MCS-51指令系統(tǒng)教材_第1頁
第3章MCS-51指令系統(tǒng)教材_第2頁
第3章MCS-51指令系統(tǒng)教材_第3頁
第3章MCS-51指令系統(tǒng)教材_第4頁
第3章MCS-51指令系統(tǒng)教材_第5頁
已閱讀5頁,還剩122頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第3章 MCS-51指令系統(tǒng) 第3章 MCS-51指令系統(tǒng) 3.1 MCS-51指令系統(tǒng)指令系統(tǒng) 3.2 匯編語言程序設計基礎匯編語言程序設計基礎 第3章 MCS-51指令系統(tǒng) 3.1 MCS-51指令系統(tǒng)指令系統(tǒng) 本章在介紹MCS-51指令系統(tǒng)時,為敘述方便,將使用下列符號及約定: (1) Rn(n=07):表示工作寄存器組R7R0中的某一寄存器。 (2) Ri(i=01):以寄存器R0或R1作為間接尋址,表示操作數(shù)地址在寄存器R0或R1中,“”是間接尋址標識符。操作對象是外部RAM或內部RAM 007FH單元(對僅有128字節(jié)內部RAM的51子系列)或00FFH單元(對含有256字節(jié)內部R

2、AM的52/54子系列)。 第3章 MCS-51指令系統(tǒng) (3) DPTR:以數(shù)據指針DPTR(16位)作為間接尋址,操作數(shù)在外部RAM中,“”也是間接尋址標識符。 (4) #data:8位立即數(shù),其中“#”是立即數(shù)標識符。 (5) #data16:16位立即數(shù),其中“#”也是立即數(shù)標識符,用于初始化數(shù)據指針DPTR。 (6) direct:8位直接地址,可以是內部RAM 007FH單元字節(jié)地址或內部RAM中的位地址(內部RAM中,202FH單元是位尋址區(qū),位地址編碼為007FH)以及特殊功能寄存器的映象地址。MCS-51指令系統(tǒng)約定:對于特殊功能寄存器,只能使用直接尋址方式訪問。 第3章 M

3、CS-51指令系統(tǒng) (7) /bit:在位操作中,取出“bit”位信息后,先取反,然后再參與運算,但不改變bit位的值,其中“/”是位取反標識符。 (8) rel:補碼形式的8位偏移地址,范圍是-128+127。 第3章 MCS-51指令系統(tǒng) (9) rrr:在操作碼中,表示R7R0寄存器的編碼,rrr編碼與寄存器R7R0的對應關系如下:rrr的編碼(二進制) 對應的工作寄存器名000 R0001R1010 R2011 R3100R4101 R5110 R6111R7 第3章 MCS-51指令系統(tǒng) (10) addr11:11位目標地址,用于ACALL和AJMP指令中,轉移范圍為2 KB。 (

4、11) addr16:16位目標地址,用于LCALL和LJMP指令中,轉移范圍為64 KB。 (12) 操作數(shù)中的累加器A寫作“A”時,是寄存器尋址;寫作“Acc”時是直接尋址,盡管操作對象均是CPU內的累加器A。對于支持直接尋址和寄存器尋址的指令來說,用A和Acc均可,只是指令的操作碼不同;對于不支持寄存器尋址的指令(如PUSH、POP),就不能將累加器A寫作“A”;而對于不支持直接尋址的指令,如“MOVX”中的“A”就不能寫成“Acc”。因此,在匯編語言指令中,必須嚴格區(qū)分累加器A的寫法。 第3章 MCS-51指令系統(tǒng) (13) 累加器A內容為nn時,用“A=nn”表示;地址編碼為mm的存

5、儲單元內容用“(mm)”表示。 (14) 指令執(zhí)行時間用“機器周期”度量,例如“MOV A, Rn”指令執(zhí)行時間為一個機器周期,在MCS-51中,一個機器周期包含12個振蕩周期。如果晶振頻率為12 MHz,則振蕩周期T=1/12 s,因此一個機器周期=12 T,即1 s。 (15) 指令機器碼一律用二進制書寫。 (16) 對于不常用或約束條件多、容易出錯、不推薦使用的指令,在指令表中加灰色背景。 第3章 MCS-51指令系統(tǒng) 3.1.1 數(shù)據傳送指令數(shù)據傳送指令 在MCS-51指令系統(tǒng)中,數(shù)據傳送指令包括: (1) 內部RAM與特殊功能寄存器之間的數(shù)據傳送,這類指令使用“MOV”作為指令操作碼

6、的助記符。 (2) 外部RAM與累加器A之間的數(shù)據傳送,這類指令使用“MOVX”作為指令操作碼的助記符。 (3) 將程序存儲器ROM中某一單元的信息傳送到累加器A中的指令,這類指令使用“MOVC”作為指令操作碼的助記符。 (4) 堆棧操作指令。 (5) 字節(jié)交換指令。 第3章 MCS-51指令系統(tǒng) 圖圖3-1 MCS-51數(shù)據傳送示意圖數(shù)據傳送示意圖 內部RAM(80H -FFH)內部RAM(00 -7FH)特殊功能寄存器(80-FFH)立即數(shù)(8位)累加器A立即數(shù)(16位)數(shù)據指針DPTR工作寄存器R7-R0外部RAM程序存儲器ROM第3章 MCS-51指令系統(tǒng) 內部RAM前128字節(jié)、特殊

7、功能寄存器之間可以相互傳送,但最多只允許一個操作數(shù)使用寄存器間接尋址方式,如: MOV R0,3FH;將內部RAM的3FH單元(直接尋址) 內容傳送到內部RAM的23H ;單元(間接尋址) 特殊功能寄存器之間也可以直接傳送,如: MOV 90H,0F0H;將映象地址為F0H的特殊功能寄 存器內容傳送到映象地址為90H 的另;一特殊功能寄存器中 在這類指令中也可以引用特殊功能寄存器名,如常將上述指令寫成: MOV P1,B第3章 MCS-51指令系統(tǒng) 52/54子系列內部RAM后128字節(jié)(即地址編碼為80FFH)各單元之間不能直接傳送。原因是高128字節(jié)內部RAM只能使用寄存器間接尋址方式,而

8、一條指令中,最多只允許一個操作數(shù)使用寄存器間接尋址方式。 數(shù)據傳送指令一般不會影響程序狀態(tài)字寄存器PSW中的標志位,但當數(shù)據傳送到累加器A時,PSW中的奇偶標志位P會改變,原因是奇偶標志位P總是體現(xiàn)累加器A中“1”的個數(shù)的奇偶性。 第3章 MCS-51指令系統(tǒng) 1. 內部內部RAM與特殊功能寄存器之間的數(shù)據傳送與特殊功能寄存器之間的數(shù)據傳送 表3-1 內部RAM與特殊功能寄存器之間的數(shù)據傳送指令 指令名稱指令格式機器碼功能指令周期以累加器A作為目的操作數(shù)MOV A,Rn11101rrrARn1MOV A,direct11100101directA(direct)1MOV A,Ri1110011

9、iA(Ri)1MOV A,#data01110100dataAdata1第3章 MCS-51指令系統(tǒng) 以以Rn寄存器作為寄存器作為目的操作數(shù)目的操作數(shù)MOV Rn,A11111rrrRnA1MOV Rn,direct10101rrrdirectRn(direct)2MOV Rn,#data01111rrrdataRndata1以直接地址以直接地址direct作為目的操作數(shù)作為目的操作數(shù)MOV direct,A11110101directdirectA1MOV direct,Rn10001rrrdirect(direct)Rn2MOV direct2,direct110000101direct1

10、direct2(direct2)(direct1)2表3-1 內部RAM與特殊功能寄存器之間的數(shù)據傳送指令 MOV direct,Ri1000011idirect(direct)(Ri)2MOV direct,#data01110101directdata(direct)data2 第3章 MCS-51指令系統(tǒng) 表3-1 內部RAM與特殊功能寄存器之間的數(shù)據傳送指令 以Ri寄存器間接地址為目的操作數(shù)MOV Ri,A1111011i(Ri)A2MOV Ri,direct1010011idirect(Ri)(direct)2MOV Ri,#data0111011idata(Ri)data116立即

11、數(shù)傳送MOV DPTR,#data1610010000D15D8D7D0DPHD15D8DPLD7D02第3章 MCS-51指令系統(tǒng) (1) 對前128字節(jié)內部RAM(即00H7FH)各單元之間,以及特殊功能寄存器(地址分散在80H0FFH之間)可以直接傳送,不一定需要經過累加器A,例如: MOV 32H,90H ; 將特殊功能寄存器90H單元中的(即P1口)內容讀到內 部RAM 32H單元中,; 該指令中目的操作數(shù)(內部RAM)使用了直 接尋址方式,源操作數(shù)(特殊功能寄; 存器90H單元)也使用了直接尋址方式 MOV 32H,43H ; 將內部RAM 43H單元內容讀到內部RAM 32H單元

12、中 MOV 90H,0F0H ; 將特殊功能寄存器0F0H單元(即寄存器B) 內容傳送到特殊功能寄存器90H ; 單元(即P1口鎖存器)中 第3章 MCS-51指令系統(tǒng) (2) MCS-51指令系統(tǒng)約定:對于特殊功能寄存器,只能用直接尋址方式訪問;對于高128字節(jié)內部只能用寄存器間接尋址方式。因此,在直接尋址方式中,當直接地址在80H0FFH之間時,操作對象是特殊功能寄存器,而不是內部RAM高128字節(jié)(8032等含有256字節(jié)內部RAM)。對于地址編碼在80H0FFH之間的內部RAM,只能通過寄存器間接尋址訪問,例如: MOV R0,0F0H ; 假設該指令執(zhí)行前,R0內容為90H,則該指令

13、的含義是將特殊功能寄存器 ; 0F0H單元(即寄存器B)內容傳送到內部RAM的90H單元中第3章 MCS-51指令系統(tǒng) (3) 對于低128字節(jié)內部RAM,可以用直接尋址方式,也可以用寄存器間接尋址方式,例如: MOV 32H,#23H ; 將立即數(shù)23H傳送到內部RAM的 32H單元中,目的操作數(shù)使用了直 接尋址; 方式 MOV R0,#23H ; 假設該指令執(zhí)行前,R0中的內容 為32H,則該指令的作用與上條指 令相同,; 也是將立即數(shù)23H傳送到內部RAM 的32H單元中,只是目的操作數(shù)采 用寄; 存器間接尋址方式 第3章 MCS-51指令系統(tǒng) (4) 對于特殊功能寄存器,在指令中除了可

14、以使用寄存器直接地址外,還可以引用寄存器名,如“MOV P1,#23H”與“MOV 90H,#23H”等價,只是書寫方式不同而已,匯編時匯編程序會自動將“P1”寄存器名用它對應的映象地址替換,即一律視為直接尋址方式。 (5) 由于存在多種尋址方式,因此實現(xiàn)同一操作可用不同的指令,靈活性大。例如,“MOV 32H,#23H”與“MOV R0,#23H (假設此時R0內容為32H)”的功能相同,只是機器碼不同,至于采用哪一條指令較合適下一節(jié)將會介紹。 第3章 MCS-51指令系統(tǒng) (6) 盡管寄存器B是CPU內寄存器,但MCS-51指令系統(tǒng)沒有提供B寄存器的寄存器尋址方式(只有乘法指令例外),例如

15、“MOV B,A”指令中目的操作數(shù)的尋址方式是直接尋址方式,并不是寄存器尋址方式。第3章 MCS-51指令系統(tǒng) (7) 在同一指令中,只允許其中的一個操作數(shù)使用寄存器間接尋址方式,因而如下指令將是非法指令: MOV R0,R1 也正因如此,52子系列內部RAM高128字節(jié)之間不能直接傳送,必須通過累加器A或內部RAM作為中介,例如將內部RAM的82H單元傳送到內部RAM的8FH單元時,可用如下指令實現(xiàn):MOV R0, #82HMOV A, R0MOV R0, #8FH MOV R0, A 第3章 MCS-51指令系統(tǒng) 【例3.1】 在仿真機上,用單步方式執(zhí)行下列指令,并觀察指令執(zhí)行前后,內部R

16、AM有關單元內容和程序狀態(tài)字PSW中Cy、Ac、OV、P等標志位的變化,了解數(shù)據傳送指令對標志位的影響。 MOV 30H, #01H;把立即數(shù)01H傳送到內部RAM 30H單元 MOV A, 30H ;該指令執(zhí)行后累加器A內容為01H, 含有奇數(shù)個“1”, 因此P標志位為1 MOV A, #03H;該指令執(zhí)行后累加器Acc內容為03H,含 有偶數(shù)個“1”,因此P標志位;為0 MOV 30H, #03H;盡管執(zhí)行后,30H單元內容也是03H,但 傳送的目的地址不是累加器;Acc,因此標志位沒有變化 第3章 MCS-51指令系統(tǒng) 2. 外部外部RAM及及I/O端口與累加器端口與累加器A之間的數(shù)據傳

17、送之間的數(shù)據傳送 表表3-2 外部外部RAM與累加器與累加器A之間的數(shù)據傳送指令之間的數(shù)據傳送指令 指令名稱指令格式機器碼功能指令周期累加器A與外部RAM之間的數(shù)據傳送MOVX A,DPTR11100000A(DPTR)2MOVX DPTR,A11110000(DPTR)A2MOVX A,Ri1110001iA(Ri)2MOVX Ri,A1111001i(Ri)A2第3章 MCS-51指令系統(tǒng) (1) 當通過DPTR寄存器間接尋址方式讀寫外部RAM及擴展I/O端口時,先將16位外部RAM地址或I/O端口地址放在數(shù)據指針DPTR寄存器中(DPTR寄存器就是為了訪問外部RAM而設置),然后以DPT

18、R作為間接尋址寄存器,通過累加器A進行讀寫,這時外部RAM低8位地址A7A0通過P0口輸出,高8位地址A15A8通過P2口輸出。 MOV DPTR,#3FFFH ; 將要讀寫的外部RAM存儲單元地址3FFFH 以立即數(shù)方式傳送到DPTR; 寄存器中 MOVX A,DPTR; 將DPTR指定的外部存儲單元3FFFH傳送到 累加器A中(讀外部RAM) MOVX DPTR, A ; 將累加器A輸出到DPTR指定的外部存儲單 元3FFFH中(寫外部RAM) 第3章 MCS-51指令系統(tǒng) (2) 當通過R0或R1寄存器間接尋址讀寫外部RAM及擴展I/O端口時,先將低8位外部RAM存儲單元地址或I/O端口

19、地址放在R0或R1寄存器中,然后以R0或R1作為間接尋址寄存器,通過累加器A進行讀寫,這時外部RAM低8位地址A7A0通過P0口輸出,尋址范圍是前256個存儲單元。在讀寫期間P2口處于I/O方式,且P2口鎖存器不變。因此,使用Ri間接尋址方式訪問外部RAM具有更大的靈活性:在沒有外部程序存儲器的情況下,當外部RAM容量小于256字節(jié)時,通過Ri間接尋址讀寫外部RAM或擴展的I/O端口,將P2口作為一般的I/O口使用,以增加可用的I/O總線數(shù)目;當外部RAM容量大于256字節(jié)時,以頁面方式讀寫外部RAM時,P2口中沒有使用的I/O引腳,可作為輸出引腳使用。 第3章 MCS-51指令系統(tǒng) MOV

20、P2, #3FH ; 將要讀寫的外部RAM存儲單元高8位地址3FH以立 即數(shù)方式傳送到P2 ; 口中(寫入P2口鎖存器)MOV R1,#0FFH ; 將要讀寫的外部RAM存儲單元低8位地址0FFH以立 即數(shù)方式傳送到; R1寄存器中MOVX A,R1 ; 將R1指定的外部存儲單元低8位地址0FFH通過P0口 輸出,由于P2 ; 口保持不變,結果外部RAM的3FFFH單元被選中, 并讀入累加器A中MOVX R1,A ; 將R1指定的外部存儲單元低8位地址0FFH通過P0口 輸出,由于P2 ; 口保持不變,外部RAM的3FFFH單元被選中,結 果累加器A的內容傳; 送到3FFFH單元(寫入) 第3

21、章 MCS-51指令系統(tǒng) 由于外部RAM與內部RAM之間不能直接傳送,因此當需要將外部RAM傳送到內部RAM時,可通過累加器A作為中介。例如,通過如下指令將外部RAM 3FFFH單元內容傳送到內部RAM 2FH單元: MOV DPTR,#3FFFH ; 將外部RAM地址以立即數(shù)方式傳送到數(shù) 據指針DPTR中MOVX A,DPTR ; 將外部RAM 3FFFH單元內容讀到累加器A中 MOV 2FH,A ; 將累加器A中的內容傳送到內部RAM 2FH單元中 第3章 MCS-51指令系統(tǒng) 【例3.2】 把外部RAM的2000H單元內容傳送到3000H單元中(兩單元之間的數(shù)據傳送)。MOV DPTR,

22、 #2000H;DPTR2000H單元地址MOVX A, DPTR;Acc2000H單元內容MOV DPTR, #3000H;DPTR3000H單元地址 MOVX DPTR, A;3000H單元Acc 第3章 MCS-51指令系統(tǒng) 【例3.3】 將外部RAM 2000H2020H單元,共32字節(jié)傳送到以3000H為首址的外部RAM中。 對于標準MCS-51來說,在外部RAM之間進行批量數(shù)據傳送時,可先將外部RAM數(shù)據傳送到內部RAM中,然后再傳送到外部RAM目標地址。 參考程序如下:; 先將外部RAM數(shù)據傳送內部RAM 30H4FH中MOV R0, #30HMOV R7, #20HMOV DP

23、TR, #2000H第3章 MCS-51指令系統(tǒng) LOOP1:MOVX A, DPTRMOV R0, AINC DPTRINC R0DJNE R7, LOOP1; 再將暫存于內部RAM 30H4FH中的數(shù)據送外部RAM目標地址中MOV R0, #30HMOV R7, #20HMOV DPTR, #3000H 第3章 MCS-51指令系統(tǒng) LOOP2:MOV A, R0MOVX DPTR, AINC DPTRINC R0DJNE R7, LOOP2 第3章 MCS-51指令系統(tǒng) 利用增強型MCS-51的雙DPTR指針,實現(xiàn)外部RAM不同區(qū)域之間數(shù)據傳送要簡單得多,如實現(xiàn)上述數(shù)據傳送的參考程序可改

24、為:MOV R7, #20H; 設置傳送字節(jié)數(shù); 初始化數(shù)據指針MOV DPTR, #2000H; 數(shù)據塊在外部RAM首地址 送第一個 DPTR指針I(yè)NC AUXR1; 切換數(shù)據指針MOV DPTR, #3000H; 外部RAM目標地址送另一 DPTR指針 第3章 MCS-51指令系統(tǒng) LOOP:INC AUXR1; 切換到第一個DPTR指針MOVX A, DPTR; 取外部RAM數(shù)據INC AUXR1; 切換到第二個DPTR指針MOVX DPTR, A; 數(shù)據送外部RAM目標地址DJNZ R7, LOOP; 循環(huán),直到傳送20H字節(jié) 可見利用雙DPTR指針后,程序段結構簡潔,也無須內部RAM

25、作緩沖區(qū)。 第3章 MCS-51指令系統(tǒng) 3. 累加器累加器A與程序存儲器與程序存儲器ROM之間的數(shù)據傳送指令之間的數(shù)據傳送指令 為了取出存放在程序存儲器中的表格數(shù)據,MCS-51提供了兩條查表指令,這兩條指令的操作碼助記符為“MOVC”,其中“C”的含義是“Code(代碼)”,表示操作對象是程序存儲器。查表指令的指令格式、機器碼如表3-3所示。 表表3-3 查查 表表 指指 令令 指令名稱指令格式機器碼功 能指令周期查表指令MOVC A,A+DPTR10010011A(A+DPTR)2MOVC A,A+PC10000011A(A+PC)2第3章 MCS-51指令系統(tǒng) 其中“MOVC A,A+

26、DPTR”指令以DPTR作為基址,加上累加器A的內容后,所得的16位二進制數(shù)作為待讀出的程序存儲器單元地址,并將該地址單元的內容傳送到累加器A中。這條指令主要用于查表,例如在程序存儲器中,依次存放0F的七段數(shù)碼顯示器的字模碼3F、06、5B、4F、66、6D、7D、07、7F、6F、77、7C、39、5E、79、71,則當需要在P1口輸出某一數(shù)碼,如“3”時,可通過如下指令實現(xiàn): 第3章 MCS-51指令系統(tǒng) MOV DPTR,#2000H ;假設字模存放在2000H開始的程序存儲器中, 通過該指令將字模首地址 ; 傳送到DPTR寄存器中 MOV A,#03H ;把待顯示的數(shù)碼傳送到累加器A中

27、 MOVC A,A+DPTR;2000H+03H,即2003H單元的內容(4F)讀 到累加器A中 MOV P1,A;將數(shù)碼“3”對應的字模碼“4F”輸出到P1口 ORG 2000H DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H 第3章 MCS-51指令系統(tǒng) 從程序存儲器中讀出某一字節(jié)時,也可以使用PC內容作為基址,通過“MOVC A,A+PC”取出,但使用這條指令讀取ROM中表格數(shù)據時,表格數(shù)據項必須位于該指令后,靈活性差,例如:MOV A,#03H;把待顯示的數(shù)碼傳送到累加器A中MOVC A,A+PC;P

28、C+03H單元內容(4F)讀到累加器A中DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H 由于程序存儲器只能讀出,不能寫入,因此,也就沒有寫程序存儲器指令。 第3章 MCS-51指令系統(tǒng) 4. 堆棧操作指令堆棧操作指令 表表3-4 堆棧操作指令堆棧操作指令 指令名稱指令格式機器碼功 能指令周期數(shù)據入棧PUSH direct11000000directSPSP+1(SP) (direct)2數(shù)據出棧POP direct11010000direct(direct)(SP)SP SP-12第3章 MCS-51指令系統(tǒng)

29、 有關MCS-51堆棧操作的過程,已在第2章中介紹過,這里只強調堆棧操作應注意的問題: (1) 由于MCS-51堆棧操作指令中的操作數(shù)只能使用直接尋址方式,不能使用寄存器尋址方式,如將累加器A壓入堆棧時,指令格式為:PUSH Acc ;Acc是累加器A的寄存器名,本質上屬于直接尋址 在堆棧操作指令中,累加器Acc不能簡寫為A。 第3章 MCS-51指令系統(tǒng) (2) 在子程序開始處安排若干條PUSH指令,把需要保護的特殊功能寄存器內容壓入堆棧(即內部RAM),在子程序返回指令前,安排相應的POP指令,將寄存器原來內容彈出,但PUSH和POP指令必須成對,且入棧順序與出棧順序相反,因此子程序結構如

30、下: PUSH PSW;保護現(xiàn)場 PUSH Acc ;子程序實體 POP Acc ;恢復現(xiàn)場 POP PSW RET;子程序返回 第3章 MCS-51指令系統(tǒng) 5. 字節(jié)交換指令字節(jié)交換指令 表3-5 MCS-51交換指令 指令名稱指令格式機器碼功 能指令周期字節(jié)交換指令XCH A,Rn11001rrrA和Rn內容對調1XCH A,direct11000101directA和(direct)內容對調1XCH A,Ri1100011iA和(Ri)內容對調1低4位對調XCHD A,Ri1101011iA低4位和(Ri)低4位對調1累加器半字節(jié)交換SWAP A11000100A高4位與A低4位對調1

31、第3章 MCS-51指令系統(tǒng) 【例3.4】 假設累加器A的內容為12H,而R0的內容為34H,則執(zhí)行: XCH A,R0指令后,累加器A的內容為34H,R0的內容為12H,即A和R0的內容交換了,這與數(shù)據傳送指令不同,數(shù)據傳送指令執(zhí)行后,源操作數(shù)內容傳送到目的操作數(shù)中覆蓋了目的操作數(shù)原來的內容。 第3章 MCS-51指令系統(tǒng) 【例3.5】 設累加器A為1EH,R0的內容為2FH,內部RAM 2F單元的內容為37H,則執(zhí)行: XCHD A,R0指令后,累加器A的內容為17H,內部RAM 2FH單元的內容將為3EH,即A與寄存器R0指定的內存單元的低4位對調,而高4位不變。 第3章 MCS-51指

32、令系統(tǒng) 3.1.2 算術運算指令算術運算指令 1. 加法指令加法指令 表3-6 MCS-51加法指令 指令名稱指令格式機器碼功能指令周期不帶進位加法指令 ADD A,Rn00101rrrAA+Rn1ADD A,direct00100101directAA+(direct)1ADD A,Ri0010011iAA+(Ri)1ADD A,#data00100100dataAA+data1 帶進位加法指令 ADDC A,Rn00111rrrAA+Rn+Cy1ADDC A,direct00110101directAA+(direct)+Cy1ADDC A,Ri0011011iAA+(Ri)+Cy1ADD

33、C A,#data00110100dataAA+data+Cy1 第3章 MCS-51指令系統(tǒng) 由表3-6可見: (1) 所有加法指令的目的操作數(shù)均是累加器A,源操作數(shù)支持寄存器、直接、寄存器間接、立即數(shù)等四種尋址方式,因此可以將內部RAM(00FFH)、特殊功能寄存器以及8位立即數(shù)與累加器A相加,結果存放在累加器A中。 (2) 執(zhí)行加法指令將影響進位標志Cy、溢出標志OV、輔助進位標志Ac以及奇偶標志P。 加法運算時,若b7位有進位,則Cy為1;反之為0。b7有進位,表示兩個無符號數(shù)相加時,結果大于255,累加器A只能存放和的低8位。 第3章 MCS-51指令系統(tǒng) 計算機并不知道參加運算的兩

34、個數(shù)是無符號數(shù),還是有符號數(shù),程序員只能通過溢出標志OV來判別帶符號數(shù)相加是否溢出。對于帶符號數(shù)來說,b7是符號位(0表示正數(shù),1表示負數(shù)),且負數(shù)以補碼形式出現(xiàn)。于是當兩個正數(shù)相加時,如果累加器A的b7為1,表示結果是負數(shù),這是不可能的。即和大于+127;同理,當兩個負數(shù)相加時,如果累加器A的b7為0,表示結果是正數(shù),同樣是不可能的。即和小于-128。即在加法指令中,溢出標志OV為1的條件是:兩個操作數(shù)的符號相同(即b7位同為0或1),但結果的符號位相反。對于帶符號數(shù)加法運算來說,當溢出標志OV為1,結果不正確。 兩數(shù)相加后,若b3位向b4位進位,則Ac為1;反之為0。 由于奇偶標志P總是體

35、現(xiàn)累加器A中“1”的奇偶性,因此P也會改變。 第3章 MCS-51指令系統(tǒng) (3) 帶進位加法指令中的累加器A除了加源操作數(shù)外,還需要加上程序狀態(tài)字PSW寄存器中的進位標志Cy。設置帶進位加法指令的目的是為了實現(xiàn)多字節(jié)加法運算。例如,可通過如下指令將存放在30H、31H單元中的16位二進制數(shù)與存放在32H、33H單元中的16位二進制數(shù)相加(假設結果存放在30H、31H中): 第3章 MCS-51指令系統(tǒng) MOV A,30H ;將被加數(shù)低8位傳送到累加器A中ADD A,32H;與加數(shù)低8位,即32H單元內容相加,結果存放在A中MOV 30H,A;將和的低8位保存到30H單元中MOV A,31H;

36、將被加數(shù)高8位傳送到累加器A中ADDC A,33H;與加數(shù)高8位,即33H單元內容相加,結果存放在累加器A中;由于低8位相加時,結果可能大于0FFH,產生進位,因此在高 8位相加時用; ADDC指令MOV 31H,A;將和的高8位保存到31H單元中 第3章 MCS-51指令系統(tǒng) 2. 減法指令減法指令 表表3-7 MCS-51減法指令減法指令 指令名稱指令格式機器碼功 能指令周期帶借位減法指令SUBB A,Rn10011rrrAARnCy1SUBB A,direct10010101directAA(direct)Cy1SUBB A,Ri1001011iAA(Ri)Cy1SUBB A,#data

37、10010100dataAAdataCy1第3章 MCS-51指令系統(tǒng) MCS-51只有帶借位的減法指令,被減數(shù)是累加器A,減數(shù)可能是內部RAM、特殊功能寄存器或立即數(shù),操作結果存放在累加器A中。與加法指令類似,操作結果同樣會影響標志位: Cy為1,表示被減數(shù)小于減數(shù),產生借位; OV同樣用于判別兩個帶符號數(shù)相減后,差是否超出8位帶符號數(shù)所能表示的范圍(-128+127)。當兩個異號數(shù)相減時,差的符號與被減數(shù)相反,則溢出標志OV為1,結果不正確。例如,被減數(shù)為正數(shù),減數(shù)為負數(shù),相減后,結果應該是正數(shù),但如果累加器A的b7為1,即負數(shù),則表明結果不正確。 第3章 MCS-51指令系統(tǒng) 相減時,如

38、果b3位向b4位借位,則Ac為1;反之為0。 奇偶標志P總是體現(xiàn)累加器A中“1”的奇偶性,因此P也會變化。 由于MCS-51指令系統(tǒng)只有帶借位的減法指令,因此,當需要執(zhí)行不帶借位的減法指令時,可先通過“CLR C”指令,將進位標志Cy清零。 第3章 MCS-51指令系統(tǒng) 【例3.6】 用減法指令求內部RAM兩單元的差值(假設被減數(shù)存放在內部RAM 30H單元中,減數(shù)存放在31H單元中,差放在40H單元中)。MOV A,30H;先把被減數(shù)傳送到累加器A中CLR C;進位標志Cy清零SUBB A,31H;與31H單元內容相減 MOV 40H,A ;將結果傳送到40H單元中 第3章 MCS-51指令

39、系統(tǒng) 3. 加加1指令指令 表表3-8 MCS-51加加1指令指令 指令名稱指令格式機器碼功 能指令周期增量指令 INC A00000100AA+11INC Rn00001rrrRnRn+11INC direct00000101direct(direct)(direct)+11INC Ri0000011i(Ri)(Ri)+11INC DPTR10100011DPTRDPTR+12第3章 MCS-51指令系統(tǒng) 加1指令不影響標志位,只有操作對象為累加器A時,才影響奇偶標志位P。 當操作數(shù)初值為0FFH,則加1后,將變?yōu)?0H。 盡管加1指令與加數(shù)為1的加法指令同樣會使操作數(shù)增1,但彼此并不完全相

40、同,例如: INC A;通過增量指令使累加器A內容加1 該指令除了影響奇偶標志位P外,不影響其他標志位。 ADD A,#01H;通過加法指令使累加器A內容加1 該指令同樣會使累加器A內容加1,但這條指令將影響Cy、OV、Ac以及P標志位,且該指令的機器碼占用兩個字節(jié)。 當操作數(shù)是某一I/O口,如“ INC P1 ”時,先將P1口鎖存器內容讀出,加1后,再寫入P1口鎖存器中,因此INC Pi(i=0,1,2,3)屬于“讀改寫”指令。 第3章 MCS-51指令系統(tǒng) 4. 減減1指令指令 表表3-9 MCS-51減減1指令指令 指令名稱指令格式機器碼功 能指令周期減1指令 DEC A00010100

41、AA11DEC Rn00011rrrRnRn11DEC direct00010101direct(direct)(direct)11DEC Ri0001011i(Ri)(Ri)11第3章 MCS-51指令系統(tǒng) 5. 乘法指令乘法指令 表表3-10 MCS-51乘法指令乘法指令 指令名稱指令格式機器碼功 能指令周期ABMUL AB10100100BAAB4 被乘數(shù)放在累加器A(8位無符號數(shù))中,乘數(shù)放在寄存器B(8位無符號數(shù))中,乘積(16位無符號數(shù))的高8位放在寄存器B中,低8位放在累加器A中。 該指令影響標志位:當結果大于255時,OV為1;反之為0。進位標志Cy總為0;AC保持不變;奇偶標

42、志P隨累加器A中“1”的個數(shù)變化而變化。 第3章 MCS-51指令系統(tǒng) 6. 除法指令除法指令 表3-11 MCS-51除法指令 指令名稱指令格式機器碼功 能指令周期ABDIV AB10000100A(商)ABB(余數(shù))AB4 被除數(shù)放在累加器A(8位無符號數(shù))中,除數(shù)放在寄存器B(8位無符號數(shù))中,商(8位無符號數(shù))放在累加器A中,余數(shù)(8位無符號數(shù))放在寄存器B中。 該指令影響標志位:如果除數(shù)(即寄存器B)不為0,執(zhí)行該指令后,溢出標志OV、進位標志Cy總為0;如果除數(shù)為0,執(zhí)行后,結果將不確定,且OV為1,Cy仍為0。AC保持不變;奇偶標志P位隨累加器A中“1”的個數(shù)變化而變化。 第3章

43、 MCS-51指令系統(tǒng) 7. 十進制加法調正指令十進制加法調正指令 【例3.7】 BCD碼25存放在累加器A中,即A=00100101B;另一BCD碼36存放在寄存器R2中,即R2=00110110B。當通過“ADD A,R2”指令相加時,CPU視為兩個二進制數(shù)相加,運算結果如下: A 0 0 1 0 0 1 0 1 + R20 0 1 1 0 1 1 0 A 0 1 0 1 1 0 1 1 (結果是5BH,即十進制的91) 第3章 MCS-51指令系統(tǒng) 而我們知道25+36=61,之所以得不到正確結果是因為在BCD中,用二進制表示十進制數(shù)時,僅使用09,即二進制00001001十個數(shù)碼。因此

44、,相加后,當?shù)?位大于1001時,應該加06H,使低4位(即BCD碼個位)向b4進位,獲得正確結果,例如: A 0 1 0 1 1 0 1 1+ 6校正 0 0 0 0 0 1 0 1 A 0 1 1 0 0 0 0 1 (結果是61) 顯然,高4位也存在類似情況,即根據運算結果需要加60H校正。第3章 MCS-51指令系統(tǒng) 【例3.8】 假設BCD碼19存放在累加器A中,即A=00011001B;另一BCD碼38存放在寄存器R2中,即R2=00111000B。當通過“ADD A,R2”指令相加時,運算結果如下: A 0 0 0 1 1 0 0 1 + R20 0 1 1 1 0 0 0 A

45、0 1 0 1 0 0 0 1 (結果是51H,不正確) 第3章 MCS-51指令系統(tǒng) 而19+38=57,之所以得不到正確結果是因為8+9=17,在二進制加法中為11H,同樣需要加6校正。因此,當b3位向b4位進位,即輔助進位標志Ac有效時,要加6校正。事實上,設置輔助進位標志Ac的目的就是為了判別BCD加法運算是否需要校正。同樣,高位也存在類似問題,當b7有進位,即Cy為1時,也需要加60H進行校正。 可見用ADD指令完成BCD碼加法運算時,高4位或低4位大于1001,以及Ac或Cy有效時,必須加06、60或66進行校正,才能獲得正確的結果。 第3章 MCS-51指令系統(tǒng) 表表3-12 M

46、CS-51BCD加法調正指令加法調正指令 指令名稱指令格式機器碼功 能指令周期BCD加法調正DA A11010100 根據進位標志Cy、輔助進位標志Ac以及累加器A中結果,將累加器A內容轉化為BCD碼形式1 該指令用于BCD加法校正,需放在ADD指令后,例如: ADD A,R2 ;兩個BCD碼相加 DA A ;將累加器A中的結果校正后轉化為BCD 第3章 MCS-51指令系統(tǒng) 值得注意的是:十進制調正指令一般放在加法指令后,用于十進制加法調正,不能單獨使用“DA A”指令將累加器A中的內容轉化為BCD碼。 MCS-51沒有提供BCD碼減法調正指令,但可以通過“補碼”概念,將BCD碼減法運算變成

47、BCD碼加法運算。我們知道兩位BCD可以表示0099,需要用8位二進制存放;三位BCD可以表示000999,需要用12位二進制存放;四位BCD可以表示00009999之間的數(shù),需要用16位二進制存放,因此:XY-xy=XY+100-xy 第3章 MCS-51指令系統(tǒng) (100的BCD需要用三位二進制存放,其中的1自然丟失。) 當XYxy時,“XY+100-xy”就是XY-xy;當XYxy時,“XY+100-xy”是“XY-xy”的補碼。 為了能用減法指令求出“100-xy”的BCD碼,可用“9AH”表示“100-xy”算式中十進制數(shù)“100”(因為“9AH”加“6”調正后就是“100H”)。

48、第3章 MCS-51指令系統(tǒng) 【例3.9】 假設兩位BCD碼形式的被減數(shù)、減數(shù)分別存放在VAR1和VAR2單元中,試編寫一程序段求“VAR1-VAR2”,結果存放在VAR3單元中。 參考程序如下:CLR C; 清進位標志CyMOV A, #9AH; 把BCD碼“100”等效表示碼送累加器ASUBB A, VAR2; 計算“100-VAR2”,結果為BCD形式ADD A, VAR1; 加被減數(shù)DA A; 調正 MOV VAR3, A; 保存“VAR1-VAR2”結果 第3章 MCS-51指令系統(tǒng) 【例3.10】 將R2中以壓縮形式存放的兩位BCD碼減1。 與上例有所不同,減1相當于加99(其實9

49、AH減1就是99H)。因此,實現(xiàn)兩位BCD碼減1的程序如下: MOV A, R2 ADD A, #99H DA A MOV R2, A 對于3位BCD碼來說,XYZ-xyz=ZYX+1000-xyz。 當XYZxyz時,“XYZ+1000-xyz”就是XYZ-xyz;當XYZxyz時,“XYZ+1000-xyz”是“XYZ-xyz”的補碼。同理,為了能用減法指令求出“1000-xyz”的BCD碼,可用“99AH”表示“1000-xyz”算式中十進制數(shù)“1000”(因為“99AH”加“6”調正后就是“1000H”)。 第3章 MCS-51指令系統(tǒng) 【例3.11】 三位壓縮形式BCD碼被減數(shù)存放在

50、81H、80H單元中,減數(shù)存放在31H、30H單元中,試編寫一程序段求出兩者的差,結果存放在81H、80H單元中。 CLR CMOV A, #9AHSUBB A, 30H; 低8位相減MOV R2, A; 暫時保存低8位中間結果MOV A, #09HSUBB A, 31H; 高4位相減 ANL A, #0FH; 屏蔽高位 第3章 MCS-51指令系統(tǒng) MOV R3, A; 暫時保存高8位中間結果MOV R0, #80HMOV A, R0; 取被減數(shù)低8位ADD A, R2; 低8位相加DA A; 調正MOV R0, A; 保存和的十位、個位INC R0; R0加1MOV A, R0; 取被減數(shù)

51、百位ADDC A, R3; 百位相加DA A; 調正ANL A, #0FH ; 屏蔽高4位 MOV R0, A; 保存百位 第3章 MCS-51指令系統(tǒng) 【例3.12】 將R3/R2中以壓縮形式存放的三位BCD碼減1。 三位BCD減1,相當于加999(其實99AH減1就是999H)。因此,實現(xiàn)三位BCD碼減1的程序如下: MOV A, R2;取十位、個位ADD A, #99HDA AMOV R2, A;保存加99后十、個位結果MOV A, R3;取百位ADDC A, #09HDA A;百位加9并調正ANL A, #0FH;屏蔽高4位 MOV R3, A;保存百位 第3章 MCS-51指令系統(tǒng)

52、3.1.3 邏輯運算指令邏輯運算指令 邏輯運算在計算機指令系統(tǒng)中,占有極其重要的位置。MCS-51提供了豐富的邏輯運算指令,包括邏輯非(即取反運算)、與、或、異或以及循環(huán)移位操作等。 表3-13 MCS-51邏輯運算指令 A指令名稱指令格式機器碼功 能指令周期累加器A清零CLR A11100100A01邏輯非(取反)CPL A11110100A1第3章 MCS-51指令系統(tǒng) 邏輯與邏輯與 ANL A,Rn01011rrrAARn1ANL A,direct01010101directAA(direct)1ANL A,Ri0101011iAA(Ri)1ANL A,#data01010100data

53、AAdata1ANL direct,A01010010direct(direct)(direct)A1ANL direct,#data01010011directdata(direct)(direct)#data2邏輯或邏輯或 ORL A,Rn01001rrrAARn1ORL A,direct01000101directAA(direct)1ORL A,Ri0100011iAA(Ri)1ORL A,#data01000100dataAAdata1 ORL direct,A01000010direct(direct)(direct)A1ORL direct,#data01000011direct

54、data(direct)(direct)#data2第3章 MCS-51指令系統(tǒng) 指令名稱指令名稱指令格式指令格式機器碼機器碼功能功能指令周期指令周期邏輯異或邏輯異或XRL A,Rn01101rrrAARn1XRL A,direct01100101directAA(direct)1XRL A,Ri0110011iAA(Ri)1XRL A,#data01100100dataAAdata1 XRL direct,A01100010direct(direct)(direct) A1XRL direct,#data01100011directdata(direct)(direct) #data2循環(huán)循

55、環(huán)移位移位向左向左循環(huán)循環(huán)移位移位左循環(huán)移位左循環(huán)移位RL A 00100011 b7b01帶帶Cy左循左循環(huán)環(huán)RLC A 00110011 Cy b7b01向右向右循環(huán)循環(huán)移位移位右循環(huán)移位右循環(huán)移位RR A 00000011 b7b01帶帶Cy右循右循環(huán)環(huán)RRC A 00010011Cy b7b01第3章 MCS-51指令系統(tǒng) 這類指令的特點是不影響程序狀態(tài)字寄存器PSW中的標志位。只有帶進位Cy循環(huán)移位時,才影響Cy和奇偶標志P。 所有邏輯運算均按位進行,例如當A=10100101B,與立即數(shù)01011010B相與,即執(zhí)行指令: ANL A, # 01011010B后,累加器A為0。 根

56、據“0和0、1相與的結果均為0,1和1、0相與結果不變”的原理,常用“ANL”指令將操作數(shù)中指定位清零。例如,通過與指令可將P1口鎖存器中的b4、b2位清零,而其他位不變,如: ANL P1, #11101011B 在構造立即數(shù)時,希望清零位設為0,其他位為1。該指令執(zhí)行后,P1口鎖存器各位為xxx0 x0 xx,可見指定位為0,其他位保持不變。 第3章 MCS-51指令系統(tǒng) 常用邏輯或“ORL”指令將操作數(shù)中指定位置1,例如: ORL P1, #00010100B 在構造立即數(shù)時,希望置1位為1,其他位為0。該指令執(zhí)行后,P1口鎖存器各位為xxx1x1xx,可見指定位為1,其他位保持不變。

57、常用邏輯異或“XRL”指令將操作數(shù)中指定位取反,例如: XRL P1, #00010100B 在構造立即數(shù)時,希望取反位為1,其他位為0。 第3章 MCS-51指令系統(tǒng) 左循環(huán)移位“RL A”也常用于實現(xiàn)乘2n(如乘2、4、8等)運算。例如,當需要對累加器A進行乘4運算時,如果A小于3FH,用如下兩條左循環(huán)移位指令完成比用乘法指令效果更好速度快、代碼短。RL A;左循環(huán)移位一次,相當于乘2RL A;再左循環(huán)移位一次 以上兩條指令執(zhí)行時間需要21個機器周期,代碼長度為21字節(jié),通過如下乘法實現(xiàn)需要6個機器周期(2+4),代碼長度為4字節(jié)(3+1)。MOV B, #04H; 3字節(jié),執(zhí)行時間為2個

58、機器周期 MUL AB; 1字節(jié),執(zhí)行時間為4個機器周期 第3章 MCS-51指令系統(tǒng) 3.1.4 位操作指令位操作指令 位操作指令在單片機指令系統(tǒng)占有重要地位,這是因為單片機在控制系統(tǒng)中主要用于控制線路通、斷,繼電器的吸合與釋放等。因此,多數(shù)8位機依然保留了一位機功能,即提供了位尋址功能和位操作指令。 MCS-51單片機具有豐富的位操作指令,在位運算指令中,進位標志Cy的作用類似于字節(jié)運算指令中的累加器A,因此Cy在位操作指令中,被稱為“位累加器”。MCS-51內部RAM字節(jié)地址20H2FH單元是位存儲區(qū)(16字節(jié)8位,共128個位),位存儲器地址編碼為007FH,即20H字節(jié)地址b0位的位

59、地址為00H,b1位的位地址為01H,2FH字節(jié)地址的b7位的位地址為7FH。此外,許多特殊功能寄存器,如P0P3口鎖存器、程序狀態(tài)字PSW、定時/計數(shù)器控制寄存器TCON等均可按位尋址。因此,位存儲器包括了內部RAM中20H2FH單元的位存儲區(qū)以及特殊功能寄存器中支持位尋址的所有位。 第3章 MCS-51指令系統(tǒng) 表3-14 MCS-51位操作指令 指令名稱指令名稱指令格式指令格式機器碼機器碼功能功能指令周期指令周期位傳送位傳送MOV C, bit10100010bitC(bit)1MOV bit, C10010010bit(bit)C2位位變變量量修修改改位清零位清零CLR C110000

60、11C01CLR bit11000010bit(bit)01位置位置1SETB C11010011C11SETB bit11010010bit(bit)11位取反位取反CPL C10110011C1CPL bit10110010bit(bit)1位位邏邏輯輯運運算算邏輯與邏輯與ANL C, bit10000010bitCC(bit)2ANL C, /bit10110000bitCC2邏輯或邏輯或ORL C, bit01110010bitCC(bit)2ORL C, /bit10100000bitCC2第3章 MCS-51指令系統(tǒng) MCS-51沒有提供位異或運算指令,當需要位異或運算時,可通過位

溫馨提示

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

評論

0/150

提交評論