MCS-51單片機(jī)指令系統(tǒng)概述和分類指令_第1頁(yè)
MCS-51單片機(jī)指令系統(tǒng)概述和分類指令_第2頁(yè)
MCS-51單片機(jī)指令系統(tǒng)概述和分類指令_第3頁(yè)
MCS-51單片機(jī)指令系統(tǒng)概述和分類指令_第4頁(yè)
MCS-51單片機(jī)指令系統(tǒng)概述和分類指令_第5頁(yè)
已閱讀5頁(yè),還剩87頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、MCS-51單片機(jī)指令系統(tǒng)概述和分類指令2第一節(jié) MCS-51指令系統(tǒng)的分類、格式及一般說明第二節(jié) 尋址方式第三節(jié) 分類指令 3高級(jí)語言如C+匯編語言如MCS-51指令匯編目標(biāo)文件按照語法格式編寫源程序*.ASM *.C按照語法格式將源程序翻譯成機(jī)器代碼計(jì)算機(jī)識(shí)別的二進(jìn)制代碼*.OBJ第一節(jié) MCS-51指令系統(tǒng)的分類、格式及一般說明一、111條 MCS-51指令的分類方法按照每條指令執(zhí)行時(shí)間劃分: 1、單機(jī)器周期(12個(gè)振蕩周期)有64條 2、雙機(jī)器周期(24個(gè)振蕩周期)有45條 3、四機(jī)器周期(48個(gè)振蕩周期)有2條按照每條指令翻譯成字節(jié)數(shù)劃分: 1、單字節(jié)指令,有49條 2、雙字節(jié)指令,

2、有45條 3、三字節(jié)指令,有17條按照指令功能劃分: 數(shù)據(jù)傳遞與交換、算術(shù)運(yùn)算、邏輯運(yùn)算、程序轉(zhuǎn)移、布爾處理操作、CPU控制等6類。 布爾處理操作類指令又稱位操作指令。45一般分為兩部分:操作碼和操作數(shù)操作碼 :規(guī)定指令進(jìn)行什么操作 操作數(shù):表示指令操作的對(duì)象,可以是數(shù)或是數(shù)據(jù)所在的地址,但最終對(duì)象都是數(shù)據(jù)。匯編語言格式為:標(biāo)號(hào): 操作碼助記符 目的操作數(shù), 源操作數(shù) ;注釋 MAIN: MOV A , #20H ; # 二、指令格式按指令的字節(jié)數(shù)(機(jī)器語言)不同,分為一字節(jié)指令,二字節(jié)指令,三字節(jié)指令 1. 一字節(jié)指令8位編碼,既包含操作碼,又包含操作數(shù)如果指令無操作數(shù)(如指令:NOP)或,

3、操作數(shù)都在Rn,A,B, DPTR, C中,則該指令一定是一字節(jié)指令。6如 INC DPTR INC A 若是有工作寄存器,則指令碼中的rrr三位的不同編碼來指定該寄存器MOV A,Rn指令碼為11101rrr (E8HEFH)二字節(jié)指令16位編碼,既包含操作碼,又包含操作數(shù)如果指令操作數(shù)只有一個(gè)8位直接地址或立即數(shù),則該指令一定是二字節(jié)指令。操作碼 24H操作數(shù) 22HADD A,#22HADD A,22H操作碼 25H操作數(shù) 22H操作碼 04H操作碼 A3H73. 三字節(jié)指令 24位編碼,既包含操作碼,又包含操作數(shù) 如果指令操作數(shù)有兩個(gè)8位直接地址或是立即數(shù),或是16位直接地址, 則該指

4、令一定是三字節(jié)指令。操作碼 85H源操作數(shù) 4FHMOV 5EH,4FH操作碼 75H目的操作數(shù) 5EHMOV 5EH,#4FH操作碼 90H操作數(shù)高八位 5EH操作數(shù)低八位 4FHMOV DPTR, # 5E4FH目的操作數(shù) 5EH源操作數(shù) 4FH8三、 指令描述符號(hào)介紹Rn當(dāng)前選中的寄存器組中的8個(gè)工作寄存器R0R7(n=07)。Ri當(dāng)前選中的寄存器組中的可作為間接尋址寄存器使用的2個(gè)工作寄存器R0、R1(i=0,1)。direct8位的內(nèi)部數(shù)據(jù)存儲(chǔ)器單元中的地址??梢允莾?nèi)部RAM單元地址或?qū)S眉拇嫫鞯刂贰?75H、 0A5H 、P1#data包含在指令中的8位立即數(shù)。 # 75H、 #

5、80H、 # 0A5H#data16包含在指令中的16位立即數(shù)。 # 2480H、 # 0D256Haddr1616位目的地址。用于長(zhǎng)轉(zhuǎn)移指令中,能轉(zhuǎn)移到64KB程序存儲(chǔ)器地址空間的任何地方。addr1111位目的地址。目的地址應(yīng)與下一條指令第一個(gè)字節(jié)在同一個(gè)2KB程序存儲(chǔ)器的地址空間之內(nèi)。rel8位帶符號(hào)的偏移字節(jié),簡(jiǎn)稱偏移量。偏移量相對(duì)于下一條指令的第一個(gè)字節(jié)計(jì)算,在-128-+127范圍內(nèi)取值。9間址寄存器或基址寄存器的前綴, 如Ri,DPTR。/ 位操作數(shù)的前綴,表示對(duì)該位操作數(shù)取反, 如/bit。片內(nèi)RAM的直接地址或寄存器。()直接尋址方式中,表示直接地址X中的內(nèi)容。注釋用(())

6、在間接尋址方式中,表示由間址寄存器X指出的地址單元中的內(nèi)容。注釋用 箭頭左邊的內(nèi)容被箭頭右邊的內(nèi)容所代替。注釋用DPTR數(shù)據(jù)指針,可用作16位地址寄存器。bit內(nèi)部RAM或?qū)S眉拇嫫髦械闹苯訉ぶ肺弧累加器。ACC 直接尋址方式的累加器。B專用寄存器,用于乘法和除法指令中。CY進(jìn)位標(biāo)志或進(jìn)位位,或布爾處理機(jī)中的累加器。10第二節(jié) 尋址方式1、寄存器尋址2、 直接尋址3、 寄存器間接尋址4、 立即尋址5、 變址尋址6、 相對(duì)尋址7、 位尋址返回本章首頁(yè)尋址方式找到存放數(shù)據(jù)的地址,提取操作數(shù).111.寄存器尋址方式 操作數(shù)給出形式為寄存器, 操作對(duì)象(數(shù)據(jù))存放在寄存器當(dāng)中 例如: MOV A ,

7、R0 MOV R0 , A寄存器:a.工作寄存器:Rn b.部分專用寄存器:A、B、DPTR、C 這里源操作數(shù)和目標(biāo)操作數(shù)均采用寄存器尋址。12如果程序狀態(tài)寄存器PSW的RS1RS0=10(選中第二組工作寄存器,對(duì)應(yīng)地址為10H17H),設(shè)累加器A的內(nèi)容為4AH,則執(zhí)行MOV R1,A 指令后,內(nèi)部RAM 11H單元的值就變?yōu)?AH,如寄存器尋址示意圖所示。 寄存器尋址示意圖 4AH11H內(nèi)部RAM4AHAR110RS1RS0132.直接尋址方式: 操作數(shù)給出形式為單元地址, 操作對(duì)象(數(shù)據(jù))存放在單元地址當(dāng)中 例如: MOV A ,5BH MOV 5BH , A直接地址:a. 內(nèi)部RAM低1

8、28字節(jié)區(qū) b.專用寄存器區(qū)(直接尋址是訪問SFR區(qū)的唯一方法)既可用單元地址形式給出,也可用寄存器符號(hào)給出MOV A ,P1 (二字節(jié)指令)MOV A ,90H (二字節(jié)指令)14直接尋址示意圖 88H2BH內(nèi)部 RAM88HA例如指令:MOV A,2BH 執(zhí)行的操作是將內(nèi)部RAM 中地址為2BH的單元內(nèi)容傳送到累加器A中,其操作數(shù)2BH就是存放數(shù)據(jù)的單元地址,因此該指令是直接尋址。 設(shè)內(nèi)部RAM 2BH單元的內(nèi)容是88H,那么指令MOV A,2BH的執(zhí)行過程如立即數(shù)尋址示意圖所示。153.寄存器間接尋址方式: 寄存器尋址: 寄存器當(dāng)中存放的是操作對(duì)象 寄存器間接尋址:寄存器當(dāng)中存放的是操作

9、對(duì)象(數(shù)據(jù))的地址,而不是操作對(duì)象本身。例如: MOV 30H, #20H MOV R0 , #30H MOV A ,R0 ;R0 A A=30H MOV A ,R0 ; (R0) A A=20H 寄存器間接尋址范圍: a.訪問內(nèi)部RAM(SFR 不能用于寄存器間接尋址) : 只能使用R0和R1來作為間接寄存器,用Ri表示(i0、1) MOV A,Ri b.訪問外部低256字節(jié) :MOVX A,Ri c.訪問外部RAM所有64K字節(jié): MOVX A,DPTR d.訪問內(nèi)部RAM SP, SP隱含了 PUSH B 相當(dāng)于 MOV SP,B POP B 相當(dāng)于 MOV B,S注意:SFR不能用間接

10、尋址方式,只能用 直接尋址方式16片內(nèi)RAMR0A30H寄存器間接尋址示意圖34H30H34H例如:MOV R0,A ;內(nèi)部RAM(R0)A 其指令操作過程示意圖如下圖所示。174 .立即尋址方式: # 操作數(shù)就是操作對(duì)象(數(shù)據(jù))本身, 此時(shí)把指令中操作數(shù)稱為立即數(shù),用#data表示例如: MOV A , # 3AH MOV DPTR,#3F00H MOV 30H, #30H 唯一一條16位立即尋址指令: MOV DPTR , #data162BHA2BH例:MOV A,#2BH立即數(shù)尋址示意圖 MOV DPTR , #3425H MOVX A,DPTR 通常與MOVX A,DPTR 類指令搭

11、配使用,#data16中表示的是16位的地址185.變址尋址方式: 變址尋址是指將基址寄存器與變址寄存器的內(nèi)容相加,結(jié)果作為操作數(shù)的地址。DPTR或PC是基址寄存器,累加器A是變址寄存器。該類尋址方式主要用于查表操作即訪問程序存儲(chǔ)器(ROM)中的數(shù)據(jù)表格,專門針對(duì)程序存儲(chǔ)器的尋址方式。例如,指令 MOVC A,A+DPTR 執(zhí)行的操作是將累加器A和基址寄存器DPTR的內(nèi)容相加,相加結(jié)果作為操作數(shù)存放的地址,再將操作數(shù)取出來送到累加器A中。只有三條: MOVC A, A+DPTR ; A(A+DPTR) MOVC A, A+PC ; A(A+PC) JMP A+DPTR ;程序跳轉(zhuǎn)到以 A+DP

12、TR 為地址的單元19變址尋址示意圖10HA2010H2000HDPTR99H99HMOVC A,A+DPTR20 .相對(duì)尋址方式: 相對(duì)尋址是指程序計(jì)數(shù)器PC的當(dāng)前內(nèi)容與指令中的操作數(shù)相加,其結(jié)果作為跳轉(zhuǎn)指令的轉(zhuǎn)移地址(也稱目的地址)。相對(duì)尋址用于修改PC值,主要用于實(shí)現(xiàn)程序的分支轉(zhuǎn)移(跳轉(zhuǎn))。相當(dāng)于C語言中的goto語句。例如:SJMP rel ;PCrelPC注意兩點(diǎn):a.當(dāng)前PC值:執(zhí)行完該條相對(duì)尋址指令后的PC值 所以有:目的地址指令地址指令長(zhǎng)度rel b.rel為8位補(bǔ)碼:128+127,負(fù)數(shù)表示向后轉(zhuǎn)移,正數(shù)表示向前轉(zhuǎn)移 以指令地址為基點(diǎn):向地址增大方向,最大可轉(zhuǎn)移(127指令長(zhǎng)

13、度)個(gè)單元地址,向地址減小方向,最大可轉(zhuǎn)移(128指令長(zhǎng)度)個(gè)單元地址。只適用于程序存儲(chǔ)器空間21例如,SJMP 06H ;PCPC+2+06H指令操作示意圖如圖3-5所示。80H08H0300H0301H0302H轉(zhuǎn)移指令地址PC當(dāng)前PC值0308HPCrel(06H)22七、 位尋址 位尋址只能對(duì)有位地址的單元作位尋址操作。位尋址其實(shí)是一種直接尋址方式,不過其地址是位地址。在進(jìn)行位操作時(shí),用進(jìn)位位C作為位累加器。位地址在指令中用bit表示。MOV C,3AHMOV PSW.3 , C尋址范圍: a. 內(nèi)部RAM中的位尋址區(qū):16個(gè)字節(jié)單元 :20H2FH 128位 :00H7FH b.專用

14、寄存器的可尋址位: 可供位尋址的專用寄存器11個(gè),實(shí)際尋址位83個(gè),即有些位不能尋址表示方法: 直接使用位地址:例如PSW第5位 :0D5H位名稱 :F0單元地址加位 : 專用寄存器符號(hào)名加位 : 23尋址方式小結(jié):寄存器尋址: 工作寄存器R0R7,A,B,DPTR直接尋址: 片內(nèi)RAM低128字節(jié)和專用寄存器區(qū),這是SFR區(qū)的 唯一尋址方式。寄存器間接尋址: 片內(nèi)RAM (R0, R1,SP) 片外RAM (R0, R1,DPTR)變址尋址: 程序存儲(chǔ)器(用于訪問程序存儲(chǔ)器中的數(shù)據(jù)表格)相對(duì)尋址: 程序存儲(chǔ)器256字節(jié)范圍(解決在ROM內(nèi)部程序的轉(zhuǎn)移)24第三節(jié) 分類指令 按照指令的功能,可

15、以把MSC-51的111條指令分成五類:l 數(shù)據(jù)傳送類指令(29條)l 算術(shù)運(yùn)算類指令(24條)l 邏輯操作類指令(24條)l 控制轉(zhuǎn)移類指令(17條)l 位操作類指令 (17條) 25數(shù)據(jù)傳送類指令小節(jié)內(nèi)部RAM間的數(shù)據(jù)傳送指令(16條)訪問外部RAM的數(shù)據(jù)傳送指令(4條)訪問ROM程序存儲(chǔ)器的數(shù)據(jù)傳送指令(2條)交換類指令(5條)堆棧指令(2條)26一、 數(shù)據(jù)傳送類指令 數(shù)據(jù)傳送類指令共29條 內(nèi)部RAM間的數(shù)據(jù)傳送指令(16條)訪問外部RAM的數(shù)據(jù)傳送指令(4條)訪問ROM程序存儲(chǔ)器的數(shù)據(jù)傳送指令(2條)交換類指令(5條)堆棧指令(2條)27通用格式為: MOV , 傳送指令的約定:從右

16、向左傳送數(shù)據(jù),是將源操作數(shù)送到目的操作數(shù)。指令執(zhí)行后,源操作數(shù)不變,目的操作數(shù)被源操作數(shù)取代。 數(shù)據(jù)傳送類指令用到的助記符有MOV、MOVX、MOVC、XCH、XCHD、SWAP、PUSH、POP8種。28以A為目的操作數(shù)的指令(4條)MOV A,Rn ; A (Rn) 如:MOV A,R2MOV A,direct ; A (direct) 如: MOV A,30H MOV A,0E3HMOV A,Ri ; A (Ri) 如: MOV A,R0MOV A,#data ; A data 如:MOV A,#36H MOV A,#0D2H29以Rn為目的操作數(shù)的指令(3條)MOV Rn ,A ; (

17、 Rn ) (A)如:MOV R0,A MOV Rn ,direct ; ( Rn ) (direct)如: MOV R3,30HMOV Rn ,#data ; ( Rn) data如:MOV R7,#36H MOV R1,#30 MOV R6,#01101100B30以直接地址為目的操作數(shù)的指令(5條)MOV direct,A ; direct (A) 如:MOV 30H,AMOV direct,Rn ; direct ( Rn ) 如:MOV P1,R2MOV direct1,direct2 ; (direct1) (direct2 ) 如:MOV 38H,60HMOV direct,Ri

18、 ; direct ( Ri ) )如: MOV TL0,R1MOV direct,#data ; direct data 如: MOV 58H,#36H 31以間接地址為目的操作數(shù)的指令(3條)MOV Ri,A ; (Ri) ( A ) 如:MOV R0,AMOV Ri,direct ; (Ri) ( direct )如:MOV R1,36H MOV R0,SBUFMOV Ri,#data ; (Ri) data 如: MOV R1,#48 MOV R0,#0D6H32不允許的操作有:RiRi RnRn RiRn注意:MOV Rn,Rn x MOV Ri, Rix MOV Rn, Rix M

19、OV #data, Ax 等等指令是非法指令。MOV指令在片內(nèi)RAM的允許操作圖33十六位數(shù)據(jù)傳送指令(1條)MOV DPTR,#data16 ; (DPH) dataH8 ,(DPL) dataL8 如:MOV DPTR,#2368H MOV DPH,#23H MOV DPL,#68H MOV DPTR,#3532634舉例:設(shè)內(nèi)部RAM40H單元的內(nèi)容為30H,30H單元的內(nèi)容為20H,20H單元的內(nèi)容為10H,端口P1的內(nèi)容為AAH,試問結(jié)果如何?MOV R0, #40HMOVA ,R0MOVR1,AMOVB,R1MOV R1,P1MOV P2,P1MOV40H,#10H問:R0=? R

20、1=? B=? (40H)=? (30H)=? P2=? (20H)=?;A=30H; R1=30H; B=20H; (30H)=AAH; P2=AAH; (40H)=10H改為MOV R0, 40H; A=20H; R1=20H; B=10H; (20H)=AAH; P2=AAH; (40H)=10H35程序存儲(chǔ)器數(shù)據(jù)傳送指令(查表指令)(2條)MOVC A,A+DPTR ; A (A)+(DPTR) 一般DPTR放表的首地址,A放所查數(shù)據(jù)在表中的偏移;查表范圍為64KB空間,稱為遠(yuǎn)程查表。MOVC A, A+PC ; A (A) + (PC) PC的值為下條指令的地址, A放所查數(shù)據(jù)相對(duì)P

21、C值的偏移;查表范圍為最大為256B空間,稱為近程查表。注意:內(nèi)外程序存儲(chǔ)器在邏輯上連續(xù)統(tǒng)一,傳送單向,只讀。 這類指令用于訪問程序存儲(chǔ)器中的數(shù)據(jù)表格。36例1:近程查表地址 標(biāo)號(hào) 語句 2000 HBA:INC A ;A=(00H-0FH)2001 MOVC A,A+PC ;查表2002 RET TAB:DB 30H ;0的ASC碼 DB 31H ;1的ASC碼 。 DB 39H ;9的ASC碼 DB 41H ;A的ASC碼 。 DB 46H ;F的ASC碼例如A初值01H,查表得31H; A初值0FH,查表得46H37例2 遠(yuǎn)程查表設(shè)程序中的數(shù)據(jù)表格為:執(zhí)行程序:1000H:MOV A,#

22、10H1002H:PUSH DPH1004H:PUSH DPL1006H:MOV DPTR,#7000H1009H:MOVC A,A+DPTR ; 100AH: POP DPH100CH:POP DPL 結(jié)果為:(A)= ,(PC)= ,(DPTR)=7010H:02H 7011H:04H7012H:06H7013H:08H02H 100EH 原值高低字節(jié)互換A (10H+7000H)38累加器A與片外RAM的數(shù)據(jù)傳送指令(4條) 用間址方式MOVX A,Ri ; A (Ri),且使/RD=0MOVX A, DPTR ; A (DPTR),且使/RD=0MOVX Ri,A ; (Ri) (A)

23、 ,且使/WR=0MOVX DPTR , A ; (DPTR ) (A) ,且使/WR=0注意:1、外部數(shù)據(jù)的傳送只能使用A2、 DPTR兩條指令以DPTR為片外RAM16位地址指針,尋址范圍為64KB空間;P2輸出高8位地址,P0口輸出低8位地址和數(shù)據(jù),分時(shí)復(fù)用3、 Ri兩條指令以R0或R1作低8位地址指針,由P0口送出,尋址范圍為256B空間(P2口仍可作通用I/O口)。39例:將外部RAM中F5H單元中的內(nèi)容送到0645H單元中MOVDPTR,#0645HMOVR0,#0F5HMOVXA , R0MOVXDPTR , AMOVR0,#0F5HMOVX A ,R0例:將外部RAM中0F5H

24、單元中的內(nèi)容送到A單元中。40交換指令(5條)1、字節(jié)交換指令XCH A,Rn ;(A) ( Rn )XCH A,direct ;(A) ( direct )XCH A,Ri ;(A) ( Ri ) 2、半字節(jié)交換指令(1)低半字節(jié)交換指令XCHD A,Ri ; (A) 0 3 ( Ri ) ) 03將A的低4位與Ri間址單元的低4位內(nèi)容交換,高4位不變。41如:設(shè)( A ) =36H, ( R1 ) =65H, ( 65H ) =42H XCHD A,R1 ; ( A ) =32H, ( 65H ) =46H(2)累加器A高、低半字節(jié)交換指令SWAP A ; ( A ) 03 (A ) 47

25、 如:設(shè)(A)=36H SWAP A ;(A)=63H42堆棧操作指令(2條)進(jìn)棧:PUSH direct ;先(SP)+1SP,后 (direct ) ( SP ) 出棧:POP direct ;先( SP) direct,后(SP)1SP如:PUSH 0E0H ;實(shí)際是(SP)+1SP,( A ) ( SP ) POP 05H ;實(shí)際是( SP ) R5 , (SP)1SP注意:其操作數(shù)為直接地址,不能用寄存器名。POP ACC 正確POP A 錯(cuò)誤43例、進(jìn)入中斷服務(wù)程序,要將DPTR、PSW和A的內(nèi)容保護(hù)起來。設(shè)DPTR0123H,PSW25H,A=10H,當(dāng)前SP=30H,問執(zhí)行下列

26、入棧后結(jié)果如何?PUSH DPL;SP=31H,(31H)23HPUSH DPH;SP= (32H)PUSH PSW;SP= (33H)PUSH ACC;SP= (34H)POP DPL;DPL10H,SP33H。POP DPH;DPH SP POP PSW;PSW SP POP ACC;ACC SP32H01H31H25H34H10H25H32H01H33H23H30H44三、算術(shù)運(yùn)算指令 共24條指令,分成七個(gè)小類 不帶進(jìn)位加法指令(4條)帶進(jìn)位加法指令(4條)帶借位減法指令(4條)加1指令(5條)減1指令(4條)乘除法指令(2條)進(jìn)制數(shù)調(diào)整指令(1條)主要是對(duì)8位無符號(hào)數(shù)進(jìn)行算術(shù)運(yùn)算。算

27、術(shù)運(yùn)算結(jié)果將影響PSW的有關(guān)位。45、不帶進(jìn)位加法指令(4條)ADD A,Rn ;( A ) ( A ) + ( Rn )ADD A,direct ; ( A ) ( A ) + ( direct ) ADD A,Ri ; ( A ) ( A ) + ( Ri ) ADD A,#data ; ( A ) ( A ) +#data注意:如果位3有進(jìn)位,則半進(jìn)位標(biāo)志位AC置1,否則清零。如果位7有進(jìn)位,則進(jìn)位標(biāo)志位CY置1,否則清零。如果兩個(gè)數(shù)(看作有符號(hào)數(shù)時(shí))相加溢出,則OV置1,否則清零。如果兩個(gè)同符號(hào)數(shù)相加的結(jié)果變號(hào)即溢出,則OV置1,否則清零。46例:(A)=0C3H,(R0)=0AAH執(zhí)

28、行“ADD A,R0”的和為6DH,標(biāo)志位CY= ,OV= ,AC= , P= 。OV=C7 C6 對(duì)第6、第7位的進(jìn)位位C7、C6異或。例:(A)=0BAH,(R0)=88H執(zhí)行“ADD A,R0”的和為42H,標(biāo)志位CY= ,OV= ,AC= , P= 。OV=C7 C6 對(duì)第6、第7位的進(jìn)位位C7、C6異或。1 1 0 11 1 1 0兩個(gè)同符號(hào)數(shù)相加的結(jié)果變號(hào),則OV置1,否則清零。47帶進(jìn)位加法指令(4條)ADDC A,Rn ; (A)(A)+ (Rn) +CYADDC A,direct ; (A)(A) + (direct) +CYADDC A,Ri ; (A)(A) + (Ri)

29、 +CY ADDC A,#data ; (A)(A) +#data +CY C為來自PSW狀態(tài)寄存器中的進(jìn)位位C。 把源操作數(shù)指出的內(nèi)容和進(jìn)位標(biāo)志CY都同累加器A的內(nèi)容相加,結(jié)果放于A中。多用于多字節(jié)數(shù)的加法。48例:兩個(gè)16位無符號(hào)數(shù)相加。設(shè)被加數(shù)在內(nèi)部RAM中30H(低位)、31H中,加數(shù)存放在內(nèi)部RAM中40H (低位) 、41H單元中,將相加的結(jié)果存放到30H、31H和32H單元中。MOV R0,#30H;被加數(shù)低8位地址MOV R1,#40H;加數(shù)低8位地址CLRC;清CYMOVA,R0;取被加數(shù)低8位ADD A,R1;與加數(shù)低8位相加MOVR0,A;和存入30H單元 INCR0;指

30、向高8位地址INC R1 MOVA,R0;取被加數(shù)高8位ADDC A,R1;與加數(shù)高8位及進(jìn)位位相加MOVR0,A;結(jié)果存入31H單元CLR A;清AADDC A,#00H;處理進(jìn)位INC R0;MOVR0,A;進(jìn)位存入32H49、帶借位減法指令(4條)SUBB A,Rn ; (A)(A) - CY - (Rn)SUBB A,direct ; (A)(A) - CY - (direct) SUBB A,Ri ; (A)(A) - CY - (Ri)SUBB A,#data ; (A)(A) - CY - #data 注意:如果位3有借位,則半進(jìn)位標(biāo)志位AC置1,否則清零。如果位7有借位,則進(jìn)位

31、標(biāo)志位CY置1,否則清零。如果兩個(gè)數(shù)(看作有符號(hào)數(shù)時(shí))相減溢出,則OV置1,否則清零。如果兩個(gè)異號(hào)數(shù)相減的結(jié)果與被減數(shù)符號(hào)不同即溢出,OV置1,否則清零。 無不帶借位減法指令,需要時(shí),先執(zhí)行一條CLR C指令既可。例:(A)=0D1H,(R0)=54H (CY)=1 執(zhí)行“SUBB A,R0”的結(jié)果為 ,標(biāo)志位CY= ,OV= ,AC= ,P= 。 7CH 0 1 1 1 50、加1指令(5條)INC A ; (A) (A)+1INC Rn ; ( Rn ) ( Rn ) +1INC direct ; (direct ) (direct ) +1INC Ri ; ( Ri ) ( Ri ) +

32、1INC DPTR ; ( DPTR ) ( DPTR ) +1說明:INC A 影響P外,不影響PSW其它位(即標(biāo)志位CY、AC、OV)。例:MOV A,#0FEH ;P=1 INC A;P=051 、減1指令(4條)DEC A ; (A) (A)-1DEC Rn ; ( Rn ) ( Rn ) -1DEC direct ; (direct ) (direct ) -1DEC Ri ; ( Ri ) ( Ri ) -1DEC DPTR ; 無此指令說明:DEC A 影響P外,不影響PSW其它位(即標(biāo)志位CY、AC、OV)。例:MOV A,#0FFH ;P=0 DEC A;P=152、乘除法指

33、令(2條,單字節(jié)四周期指令)1、乘法指令 MUL AB ; (A) x (B)B158,A70說明:(1)為無符號(hào)乘法; (2)若結(jié)果的B0 (乘積大于255) ,則OV=1,若B=0,則OV=0;CY總是清零,AC不影響,P影響。2、除法指令 DIV AB ; (A)/ (B)的商A,余數(shù)B說明:(1)為無符號(hào)除法; (2)若除數(shù)B=0 (除法無意義) ,則OV=1,若B 0,則OV=0;CY總是清零,AC不影響,P影響。53 、十進(jìn)制數(shù)調(diào)整指令(1條)DA A ;調(diào)整累加器內(nèi)容為BCD碼(二進(jìn)制編碼的十進(jìn)制) 說明:(1)此指令跟在ADD或ADDC指令之后,將A中的和調(diào)整為BCD碼,并且A

34、DD或ADDC的兩個(gè)操作數(shù)是BCD碼,即兩個(gè)BCD碼相加必須經(jīng)過DA A指令后,才能得到正確的BCD碼的結(jié)果。(2)調(diào)整方法:若(A03 ) 9或AC=1,則(A03 ) +6 (A03 ) ;若( A47 )9或CY=1,則(A47 ) +6 (A47 );若( A47 ) 9且(A03 ) 9,則(A)66H (A); 二-十進(jìn)制編碼BCD碼 例:求十進(jìn)制數(shù)876的BCD碼876BCD =1000 0111 0110 876= 36CH =0011 0110 1100B54BCD碼(Binary Coded Decimal)二進(jìn)制代碼表示的十進(jìn)制數(shù)。8421 BCD碼BCD碼運(yùn)算十進(jìn)制調(diào)整

35、:計(jì)算機(jī)實(shí)際按二進(jìn)制法則計(jì)算,加入 十進(jìn)制調(diào)整操作,可計(jì)算BCD碼。55例:計(jì)算BCD碼 56+67=? 0101 0110 56BCD + 0110 0111 + 67BCD 1011 1101 產(chǎn)生非BCD碼和半進(jìn)位 + 0110 0110 +66H調(diào)整1 0010 0011 帶進(jìn)位結(jié)果: 123 56執(zhí)行DA A后,CPU根據(jù)累加器的值,以及AC、CY的狀態(tài),來自動(dòng)的對(duì)A進(jìn)行修正,不需人為的干預(yù)。注意:1、DA指令不對(duì)減法進(jìn)行修正例:MOV A,#16 ADD A,#16 DA A A=? MOV A,#56H ADD A,#67H DA A A=? CY=? 20H 23H 157四、

36、邏輯運(yùn)算指令 包括與、或、異或、清除、求反、移位等操作。這類指令一般不影響標(biāo)志位CY、AC和OV。 共24條指令,分成五個(gè)小類。 、邏輯“與”指令(6條)、邏輯“或”指令(6條)、邏輯“異或”指令(6條)、累加器A清0與取反指令(2條) 、移位指令(4條)邏輯運(yùn)算是按位進(jìn)行的;當(dāng)需要只改變字節(jié)數(shù)據(jù)的某幾位,而其余位不變時(shí),不能使用直接傳送方法,只能通過邏輯運(yùn)算完成。58、邏輯“與”,“或”,“異或”指令(18條) ANL(ORL,XRL) A,Rn ANL(ORL,XRL) A,direct ANL(ORL,XRL) A,Ri ANL(ORL,XRL) A,#data ANL(ORL,XRL)

37、 direct,A ANL(ORL,XRL) direct,#data59說明:(1)目的操作數(shù)只能是A或者direct; 按位進(jìn)行操作(2)前4條指令僅影響標(biāo)志位P;后兩條不影響標(biāo)志位;(3)“與”運(yùn)算常用于使某些位清0;“或”或運(yùn)算常用于使某些位置1;“異或”運(yùn)算常用于使某些位取反或不變:用1異或使對(duì)應(yīng)位取反,用0異或使對(duì)應(yīng)位不變,例:試分析下列程序執(zhí)行結(jié)果 MOV A,0FFH ANL P1,00H ORL P1,55H XRL P1,A;(A)0FFH;SFR中P1口清零;P1口內(nèi)容為55H;P1口內(nèi)容為0AAH60、累加器A清0與取反指令(2條)1、累加器A清 0 指令CLR A ;

38、 (A) 0 說明:只影響標(biāo)志位P。2、累加器A取反指令(按位取反)CPL A ;(A) (/A) ,相當(dāng)于0FFH - A A 說明:不影響標(biāo)志位。如: (A)=56H CPL A ;結(jié)果為0A9H61 、移位指令(4條)1、累加器A循環(huán)左移RL A ;2、累加器A循環(huán)右移RR A ;3、累加器A帶進(jìn)位位循環(huán)左移RLC A ;4、累加器A帶進(jìn)位位循環(huán)右移RRC A ; 說明:(1)各條指令每次只移動(dòng)一位;(2)左移一位相當(dāng)于乘以2;右移一位相當(dāng)于除以2;(3)帶進(jìn)位位移動(dòng)的影響標(biāo)志位CY和P。 RL A RR A RLC A RRC A620 0 1 1 1 1 0 1 3BH0 1 1 1

39、 1 0 1 0 7AH0 0 1 1 1 1 0 1 3BH1 0 0 1 1 1 1 0 9EH0 0 1 1 1 1 0 1 3BH1 0 0 1 1 1 1 0 9EH0 0 1 1 1 1 0 1 3BH0 1 1 1 1 0 1 1 7BH1 0 1 1 63五、控制轉(zhuǎn)移類指令 包括無條件轉(zhuǎn)移、條件轉(zhuǎn)移、子程序調(diào)用和返回指令等,共17條。 只有比較轉(zhuǎn)移指令影響標(biāo)志。、無條件轉(zhuǎn)移指令(4條) 、條件轉(zhuǎn)移指令(8條)、子程序調(diào)用和返回指令(4條)、空操作指令(1條)641、長(zhǎng)轉(zhuǎn)移指令LJMP addr16 ; (PC) addr16說明:轉(zhuǎn)移范圍:64KB全部程序空間任何單元。如:LJ

40、MP NEXT(PC)、無條件轉(zhuǎn)移指令(4條)652、絕對(duì)轉(zhuǎn)移指令A(yù)JMP addr11 ;先(PC) (PC)+2 ;再( PC100 ) addr11, ( PC1511 )不變說明:(1)兩字節(jié)編碼 (2)轉(zhuǎn)移范圍:含有下一條指令首地址的同一個(gè)2KB范圍,即 高5位地址相同 ;如:2800H AJMP SUB 若SUB543H 則PC?(PC)A10A9A80 0 0 0 1A7A6A5A4A3A2A1A02D43H66 3、短轉(zhuǎn)移指令SJMP rel ;先(PC)+2(PC),后(PC)+rel(PC) 說明:(1)兩字節(jié)編碼 (2)rel是補(bǔ)碼形式存在,轉(zhuǎn)移范圍:-128+127;對(duì)

41、應(yīng)rel值為:00H7FH(0+127)、80HFFH(-128-1);如:HERE: SJMP HERE ;無限循環(huán)執(zhí)行本指令,REL= ? SJMP $ ;與上條指令相同例:1100H SJMP25HPC=?1100H SJMPE7HPC=?FEH三種跳轉(zhuǎn)對(duì)比AJMP addr11 LJMP addr16 SJMP rel11位地址,跳轉(zhuǎn)2K 16位地址,跳轉(zhuǎn)64K 8位地址,跳轉(zhuǎn)256 256 2K 64K6768 4、間接轉(zhuǎn)移指令JMP A+DPTR ;(A)+(DPTR)(PC)說明:(1)具有多分枝轉(zhuǎn)移功能,即散轉(zhuǎn)功能,又叫散轉(zhuǎn)指令; (2)轉(zhuǎn)移范圍:是以DPTR為首地址的256B

42、。 DPTR作為基址寄存器,A作為變址寄存器。轉(zhuǎn)移范圍64KB.69例 根據(jù)累加器A中的命令鍵鍵值,設(shè)計(jì)命令鍵操作程序入口跳轉(zhuǎn)表。CLR C RLC A MOV DPTR,JPTAB JMP A+DPTRJPTAB: AJMP CCS0 AJMP CCS1 AJMP CCS2 AJMP CCS3 :1、本程序?yàn)榈湫偷纳⑥D(zhuǎn)程序,非常適合類似根據(jù)鍵盤值跳轉(zhuǎn)。2、A必須取偶數(shù)的原因是:AJMP為雙字節(jié)指令;如果全部改為 LJMP三字節(jié)指令,則A必須為0、3、6、9、12時(shí),程序才能正 確散轉(zhuǎn)。70、條件轉(zhuǎn)移指令(8條) 均為相對(duì)尋址方式。 1、累加器A為零(非零)轉(zhuǎn)移指令(2條)JZ rel ;當(dāng)A

43、=0時(shí),(PC)+2+rel(PC)轉(zhuǎn)移; ;當(dāng)A0時(shí),順序執(zhí)行(PC)+2(PC) 。JNZ rel ;當(dāng)A0時(shí), (PC)+2+rel(PC)轉(zhuǎn)移; ;當(dāng)A=0時(shí),順序執(zhí)行(PC)+2(PC) 。71例 將外部RAM的一個(gè)數(shù)據(jù)塊(首址為DATAl)傳送到內(nèi)部RAM(首址為DATA2),遇到傳送的數(shù)據(jù)為零時(shí)停止。解: START:MOV R0,DATA2 ; 置內(nèi)部RAM數(shù)據(jù)指針 MOV DPTR,DATAl ; 置外部RAM數(shù)據(jù)指針 LOOPl:MOVX A,DPTR ; 外部RAM單元內(nèi)容送A JZ LOOP2 ; 判傳送數(shù)據(jù)是否為零,A為零則轉(zhuǎn)移 MOV R0,A ; 傳送數(shù)據(jù)不為零,

44、送內(nèi)部RAM INC R0 修改地址指針 INC DPTR SJMP LOOP1 ; 繼續(xù)傳送 LOOP2:RET ; 結(jié)束傳送,返回主程序72 2、比較轉(zhuǎn)移指令(4條)均為三字節(jié)指令。一般形式為: CJNE X1(目的操作數(shù)),X2(源操作數(shù)),rel語句說明:CJNE X1 , X2,rel ;若X1 X2 ,則(PC)+3+rel ( PC ) ,且0CY ; ;若X1 0,Y=2; X=0,Y=0 X0,轉(zhuǎn)NEX1 MOV A,#FEH ;X0,則A= -2 SJMP NEX2NEX1:MOV A,#02HNEX2:MOV 41H,A SJMP $76 3、減1非零條件轉(zhuǎn)移指令(2條)

45、DJNZ Rn,rel ;(Rn)-1Rn; ;若(Rn)0, 則(PC)+2+rel PC ; ;若(Rn) = 0, 則結(jié)束循環(huán), 順序執(zhí)行(PC)+2 PC DJNZ direct,rel ;( direct )-1 direct ; ;若(direct)0,則(PC)+3+rel PC ; ;若(direct) = 0,則結(jié)束循環(huán), 順序執(zhí)行(PC)+3 PC 說明: Rn、direct相當(dāng)于控制循 環(huán)的計(jì)數(shù)器 。 計(jì)數(shù)器=0?計(jì)數(shù)器-1(PC)+relPC結(jié)束循環(huán),順序執(zhí)行YN77例:將外部RAM地址1000H10FFH的256個(gè)單元清零。MOVR2,#0FFHMOVDPTR,#10

46、00HCLRALOOP: MOVXDPTR,AINC DPTRDJNZ R2,LOOPRETMOVXDPTR,A78MOVDPTR,#2000HPUSHDPLPUSHDPHMOVDPTR,#3000HMOVR2,DPLMOVR3,DPHL1:POPDPHPOPDPLMOVXA,DPTRINCDPTRPUSHDPLPUSHDPHMOVDPL,R2MOVDPH,R3MOVXDPTR,AINCDPTRMOVR2,DPLMOVR3,DPHDJNZ35H,L1RET例:把2000H開始的外部RAM單元中的數(shù)據(jù)傳送到3000H開始的外部RAM單元,數(shù)據(jù)個(gè)數(shù)放在內(nèi)部RAM35單元中。79、子程序調(diào)用和返回指

47、令(4條) 1、主程序轉(zhuǎn)向子程序,必須執(zhí)行LCALL ACALL語句,此時(shí)CPU把子程序的 入口地址給PC,程序轉(zhuǎn)入子程序執(zhí)行, 同時(shí)CPU把主程序的斷點(diǎn)地址自動(dòng)入棧 保護(hù),以便子程序執(zhí)行完返回主程序。 2、子程序返回主程序,必須執(zhí)行RET 此時(shí)CPU把保護(hù)在棧頂?shù)臄帱c(diǎn)地址數(shù)據(jù) 彈出給PC,程序返回主程序的斷點(diǎn)。 3、PC是16bit,分高8bit/低8bit地址,而 RAM是8bit,故2次入/出棧,注意順序 LCALLRET主程序子程序斷點(diǎn)801、絕對(duì)調(diào)用指令A(yù)CALL addr11 ; (PC)+2(PC) ;(SP)+1 (SP), (PC07 )(SP) ;(SP)+1 (SP),

48、(PC815)(SP) ;addr11(PC010), ( PC1115不變) AJMP addr11轉(zhuǎn)移范圍:含有下一條指令首地址 高5位的同一個(gè)2KB范圍。A10A9A81 0 0 0 1A7A6A5A4A3A2A1A081 2、長(zhǎng)調(diào)用指令LCALL addr16 ;(PC)+3(PC) ; (SP) +1(SP), (PC 07 ) (SP) ; (SP) +1(SP), (PC 815) (SP) ;addr16 (PC) LJMP addr16說明: 轉(zhuǎn)移范圍:整個(gè)程序存儲(chǔ)空間,64KB范圍。如:LCALL SUBPRO 例 設(shè)(SP)=5FH,符號(hào)地址“SUBRTN”指向5678H

49、,執(zhí)行指令0123H LCALL SUBRTN0126H . 5678H SUBRTN: 結(jié)果: (60H) ? (61H) ? (PC) ?分析:26H(60H),(SP)+1(SP),26H (SP) 01H(61H),(SP)+1(SP),01H (SP) 5678H (PC),轉(zhuǎn)去執(zhí)行“SUBRTN”子程序26H 01H 5678H82 3、返回指令(2條) 子程序返回指令RET ;(SP) PC 815 , (SP) -1SP ; (SP) PC 07 , (SP) -1SP例(SP) =63H,(62H)=07H,(63H)=30H 執(zhí)行RET后,(SP)= ? (PC)= ? 中

50、斷服務(wù)程序返回指令RETI ;(SP) PC 815 , (SP) -1SP ; (SP) PC 07 , (SP) -1SP ;開放中斷邏輯61H 3007H 子程序調(diào)用和轉(zhuǎn)移的對(duì)比83LCALLRET主程序子程序斷點(diǎn)程序LJMP轉(zhuǎn)移不需要返回,沒有斷點(diǎn)入棧保護(hù)84、空操作指令 1條NOP; (PC)+1 ( PC )仍然取指令,并譯碼,但不做任何操作,只是為了耗費(fèi)一個(gè)機(jī)器周期,作用:測(cè)試,延時(shí)例:要求從P1口的輸出10個(gè)方波,每個(gè)方波周期為10個(gè)機(jī)器周期:MOVR1,#20;1TNOP;1TNOP;1TDJNZR1, LOOP;2T85六、 位操作類指令 包括位變量傳送、邏輯運(yùn)算、控制轉(zhuǎn)移等指令,共17條,分成4個(gè)小類。只有部分指令影響CY標(biāo)志。、位數(shù)據(jù)傳送指令(2條)、位修正指令(6條)、位邏輯運(yùn)算指令(4條)、位條件轉(zhuǎn)移類指令(5條) 位地址的表示方法:(1)直接用位地址 如:D4H(2)用特殊功能寄存器名加位數(shù) 如:(3)用SFR直接地址加位數(shù) 如:(4)用位名稱 如:RS1(5)用偽指令bit定義的有名字的位地址 如:SUB.REG bit RS1, FLAGRUN bit 02H進(jìn)位位CY作為位累加器C,利用C完成位的傳送和邏輯運(yùn)算。位尋址區(qū)包括20H

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論