版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、1,第三章 MCS-51單片機(jī)指令系統(tǒng),第一節(jié) MCS-51指令系統(tǒng)的分類、格式及一般說明 第二節(jié) 尋址方式 第三節(jié) 分類指令,2,高級語言 如C+,匯編語言 如MCS-51指令,匯編,目標(biāo)文件,按照語法格式編寫源程序*.ASM *.C,按照語法格式將源程序翻譯成機(jī)器代碼,計(jì)算機(jī)識別的二進(jìn)制代碼*.OBJ,第一節(jié) MCS-51指令系統(tǒng)的分類、格式及一般說明,3,一、111條 MCS-51指令的分類方法,按照每條指令執(zhí)行時(shí)間劃分: 1、單機(jī)器周期(12個(gè)振蕩周期)有64條 2、雙機(jī)器周期(24個(gè)振蕩周期)有45條 3、四機(jī)器周期(48個(gè)振蕩周期)有2條 按照每條指令翻譯成字節(jié)數(shù)劃分: 1、單字節(jié)
2、指令,有49條 2、雙字節(jié)指令,有45條 3、三字節(jié)指令,有17條 按照指令功能劃分: 數(shù)據(jù)傳遞與交換、算術(shù)運(yùn)算、邏輯運(yùn)算、程序轉(zhuǎn)移、布爾處理操作、CPU控制等6類。 布爾處理操作類指令又稱位操作指令。,4,一般分為兩部分:操作碼和操作數(shù) 操作碼 :規(guī)定指令進(jìn)行什么操作 操作數(shù):表示指令操作的對象,可以是數(shù)或是數(shù)據(jù)所在的地址,但最終對象都是數(shù)據(jù)。 匯編語言格式為:標(biāo)號: 操作碼助記符 目的操作數(shù), 源操作數(shù) ;注釋 MAIN: MOV A , #20H ; #,二、指令格式,按指令的字節(jié)數(shù)(機(jī)器語言)不同,分為一字節(jié)指令,二字節(jié)指令,三字節(jié)指令,1. 一字節(jié)指令 8位編碼,既包含操作碼,又包含
3、操作數(shù) 如果指令無操作數(shù)(如指令:NOP)或,操作數(shù)都在Rn,A,B, DPTR, C中,則該指令一定是一字節(jié)指令。,5,如 INC DPTR INC A 若是有工作寄存器,則指令碼中的rrr三位的不同編碼來指定該寄存器 MOV A,Rn 指令碼為11101rrr (E8HEFH),二字節(jié)指令 16位編碼,既包含操作碼,又包含操作數(shù) 如果指令操作數(shù)只有一個(gè)8位直接地址或立即數(shù),則該指令一定是二字節(jié)指令。,ADD A,#22H,ADD A,22H,6,3. 三字節(jié)指令 24位編碼,既包含操作碼,又包含操作數(shù) 如果指令操作數(shù)有兩個(gè)8位直接地址或是立即數(shù),或是16位直接地址, 則該指令一定是三字節(jié)指
4、令。,7,三、 指令描述符號介紹,Rn當(dāng)前選中的寄存器組中的8個(gè)工作寄存器R0R7(n=07)。 Ri當(dāng)前選中的寄存器組中的可作為間接尋址寄存器使用的2個(gè)工作寄存器R0、R1(i=0,1)。 direct8位的內(nèi)部數(shù)據(jù)存儲器單元中的地址??梢允莾?nèi)部RAM單元地址或?qū)S眉拇嫫鞯刂贰?75H、 0A5H 、P1 #data包含在指令中的8位立即數(shù)。 # 75H、 # 80H、 # 0A5H #data16包含在指令中的16位立即數(shù)。 # 2480H、 # 0D256H addr1616位目的地址。用于長轉(zhuǎn)移指令中,能轉(zhuǎn)移到64KB程序存儲器地址空間的任何地方。 addr1111位目的地址。目的地址
5、應(yīng)與下一條指令第一個(gè)字節(jié)在同一個(gè)2KB程序存儲器的地址空間之內(nèi)。 rel8位帶符號的偏移字節(jié),簡稱偏移量。偏移量相對于下一條指令的第一個(gè)字節(jié)計(jì)算,在-128-+127范圍內(nèi)取值。,8,間址寄存器或基址寄存器的前綴, 如Ri,DPTR。 / 位操作數(shù)的前綴,表示對該位操作數(shù)取反, 如/bit。 片內(nèi)RAM的直接地址或寄存器。 ()直接尋址方式中,表示直接地址X中的內(nèi)容。注釋用 (())在間接尋址方式中,表示由間址寄存器X指出的地址單元中的內(nèi)容。注釋用 箭頭左邊的內(nèi)容被箭頭右邊的內(nèi)容所代替。注釋用,DPTR數(shù)據(jù)指針,可用作16位地址寄存器。 bit內(nèi)部RAM或?qū)S眉拇嫫髦械闹苯訉ぶ肺弧?A累加器。
6、 ACC 直接尋址方式的累加器。 B專用寄存器,用于乘法和除法指令中。 CY進(jìn)位標(biāo)志或進(jìn)位位,或布爾處理機(jī)中的累加器。,9,第二節(jié) 尋址方式,1、寄存器尋址 2、 直接尋址 3、 寄存器間接尋址 4、 立即尋址 5、 變址尋址 6、 相對尋址 7、 位尋址,返回本章首頁,尋址方式找到存放數(shù)據(jù)的地址,提取操作數(shù).,10,1.寄存器尋址方式 操作數(shù)給出形式為寄存器, 操作對象(數(shù)據(jù))存放在寄存器當(dāng)中 例如: MOV A ,R0 MOV R0 , A 寄存器:a.工作寄存器:Rn b.部分專用寄存器:A、B、DPTR、C 這里源操作數(shù)和目標(biāo)操作數(shù)均采用寄存器尋址。,11,如果程序狀態(tài)寄存器PSW的R
7、S1RS0=10(選中第二組工作寄存器,對應(yīng)地址為10H17H),設(shè)累加器A的內(nèi)容為4AH,則執(zhí)行MOV R1,A 指令后,內(nèi)部RAM 11H單元的值就變?yōu)?AH,如寄存器尋址示意圖所示。,寄存器尋址示意圖,12,2.直接尋址方式: 操作數(shù)給出形式為單元地址, 操作對象(數(shù)據(jù))存放在單元地址當(dāng)中 例如: MOV A ,5BH MOV 5BH , A 直接地址:a. 內(nèi)部RAM低128字節(jié)區(qū) b.專用寄存器區(qū)(直接尋址是訪問SFR區(qū)的唯一方法) 既可用單元地址形式給出,也可用寄存器符號給出 MOV A ,P1 (二字節(jié)指令) MOV A ,90H (二字節(jié)指令),13,直接尋址示意圖,88H,2
8、BH,內(nèi)部,RAM,88H,A,例如指令: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ù)尋址示意圖所示。,14,3.寄存器間接尋址方式: 寄存器尋址: 寄存器當(dāng)中存放的是操作對象 寄存器間接尋址:寄存器當(dāng)中存放的是操作對象(數(shù)據(jù))的地址,而不是操作對象本身。 例如: MOV 30H, #20H MOV R0 , #30H MOV A ,R0 ;R0 A A=30H MOV A ,R0 ; (R0) A A=2
9、0H,寄存器間接尋址范圍: 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不能用間接尋址方式,只能用 直接尋址方式,15,片內(nèi)RAM,R0,A,30H,寄存器間接尋址示意圖,34H,30H,34H,例如:MOV R0,A ;內(nèi)部RAM(R0)A 其指令操作過程示意圖如下圖所
10、示。,16,4 .立即尋址方式: # 操作數(shù)就是操作對象(數(shù)據(jù))本身, 此時(shí)把指令中操作數(shù)稱為立即數(shù),用#data表示 例如: MOV A , # 3AH MOV DPTR,#3F00H MOV 30H, #30H 唯一一條16位立即尋址指令: MOV DPTR , #data16,例:MOV A,#2BH,立即數(shù)尋址示意圖,MOV DPTR , #3425H MOVX A,DPTR 通常與MOVX A,DPTR 類指令搭配使用,#data16中表示的是16位的地址,17,5.變址尋址方式: 變址尋址是指將基址寄存器與變址寄存器的內(nèi)容相加,結(jié)果作為操作數(shù)的地址。DPTR或PC是基址寄存器,累加
11、器A是變址寄存器。該類尋址方式主要用于查表操作即訪問程序存儲器(ROM)中的數(shù)據(jù)表格,專門針對程序存儲器的尋址方式。,例如,指令 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+DPTR 為地址的單元,18,變址尋址示意圖,10H,A,2010H,2000H,DPTR,99H,MOVC A,A+DPTR,19, .相對尋址方式: 相對尋址是指程序
12、計(jì)數(shù)器PC的當(dāng)前內(nèi)容與指令中的操作數(shù)相加,其結(jié)果作為跳轉(zhuǎn)指令的轉(zhuǎn)移地址(也稱目的地址)。相對尋址用于修改PC值,主要用于實(shí)現(xiàn)程序的分支轉(zhuǎn)移(跳轉(zhuǎn))。相當(dāng)于C語言中的goto語句。 例如:SJMP rel ;PCrelPC,注意兩點(diǎn): a. 當(dāng)前PC值:執(zhí)行完該條相對尋址指令后的PC值 所以有:目的地址指令地址指令長度rel b. rel為8位補(bǔ)碼:128+127,負(fù)數(shù)表示向后轉(zhuǎn)移,正數(shù)表示向前轉(zhuǎn)移 以指令地址為基點(diǎn): 向地址增大方向,最大可轉(zhuǎn)移(127指令長度)個(gè)單元地址, 向地址減小方向,最大可轉(zhuǎn)移(128指令長度)個(gè)單元地址。,只適用于程序存儲器空間,20,例如,SJMP 06H ;PCP
13、C+2+06H 指令操作示意圖如圖3-5所示。,80H,08H,0300H,0301H,0302H,轉(zhuǎn)移指令地址PC,當(dāng)前PC值,0308H,PC,rel(06H),21,七、 位尋址,位尋址只能對有位地址的單元作位尋址操作。位尋址其實(shí)是一種直接尋址方式,不過其地址是位地址。在進(jìn)行位操作時(shí),用進(jìn)位位C作為位累加器。位地址在指令中用bit表示。 MOV C,3AH MOV PSW.3 , C,尋址范圍: a. 內(nèi)部RAM中的位尋址區(qū):16個(gè)字節(jié)單元 :20H2FH 128位 :00H7FH b.專用寄存器的可尋址位: 可供位尋址的專用寄存器11個(gè),實(shí)際尋址位83個(gè),即有些位不能尋址,表示方法:
14、直接使用位地址:例如PSW第5位 :0D5H 位名稱 :F0 單元地址加位 : 0D0H.5 專用寄存器符號名加位 : PSW.5,22,尋址方式小結(jié):,寄存器尋址: 工作寄存器R0R7,A,B,DPTR 直接尋址: 片內(nèi)RAM低128字節(jié)和專用寄存器區(qū),這是SFR區(qū)的 唯一尋址方式。 寄存器間接尋址: 片內(nèi)RAM (R0, R1,SP) 片外RAM (R0, R1,DPTR) 變址尋址: 程序存儲器(用于訪問程序存儲器中的數(shù)據(jù)表格) 相對尋址: 程序存儲器256字節(jié)范圍(解決在ROM內(nèi)部程序的轉(zhuǎn)移),23,第三節(jié) 分類指令,按照指令的功能,可以把MSC-51的111條指令分成五類: l 數(shù)據(jù)
15、傳送類指令(29條) l 算術(shù)運(yùn)算類指令(24條) l 邏輯操作類指令(24條) l 控制轉(zhuǎn)移類指令(17條) l 位操作類指令 (17條),24,數(shù)據(jù)傳送類指令小節(jié),內(nèi)部RAM間的數(shù)據(jù)傳送指令(16條) 訪問外部RAM的數(shù)據(jù)傳送指令(4條) 訪問ROM程序存儲器的數(shù)據(jù)傳送指令(2條) 交換類指令(5條) 堆棧指令(2條),25,一、 數(shù)據(jù)傳送類指令,數(shù)據(jù)傳送類指令共29條,內(nèi)部RAM間的數(shù)據(jù)傳送指令(16條) 訪問外部RAM的數(shù)據(jù)傳送指令(4條) 訪問ROM程序存儲器的數(shù)據(jù)傳送指令(2條) 交換類指令(5條) 堆棧指令(2條),26,通用格式為: MOV , 傳送指令的約定:從右向左傳送數(shù)據(jù)
16、,是將源操作數(shù)送到目的操作數(shù)。指令執(zhí)行后,源操作數(shù)不變,目的操作數(shù)被源操作數(shù)取代。 數(shù)據(jù)傳送類指令用到的助記符有MOV、MOVX、MOVC、XCH、XCHD、SWAP、PUSH、POP8種。,27,以A為目的操作數(shù)的指令(4條) MOV A,Rn ; A (Rn) 如:MOV A,R2 MOV A,direct ; A (direct) 如: MOV A,30H MOV A,0E3H MOV A,Ri ; A (Ri) 如: MOV A,R0 MOV A,#data ; A data 如:MOV A,#36H MOV A,#0D2H,28,以Rn為目的操作數(shù)的指令(3條) MOV Rn ,A
17、; ( Rn ) (A) 如:MOV R0,A MOV Rn ,direct ; ( Rn ) (direct) 如: MOV R3,30H MOV Rn ,#data ; ( Rn) data 如: MOV R7,#36H MOV R1,#30 MOV R6,#01101100B,29,以直接地址為目的操作數(shù)的指令(5條) MOV direct,A ; direct (A) 如:MOV 30H,A MOV direct,Rn ; direct ( Rn ) 如:MOV P1,R2 MOV direct1,direct2 ; (direct1) (direct2 ) 如:MOV 38H,60H
18、 MOV direct,Ri ; direct ( Ri ) )如: MOV TL0,R1 MOV direct,#data ; direct data 如: MOV 58H,#36H,30,以間接地址為目的操作數(shù)的指令(3條) MOV Ri,A ; (Ri) ( A ) 如:MOV R0,A MOV Ri,direct ; (Ri) ( direct )如:MOV R1,36H MOV R0,SBUF MOV Ri,#data ; (Ri) data 如: MOV R1,#48 MOV R0,#0D6H,31,不允許的操作有:RiRi RnRn RiRn 注意:MOV Rn,Rn x MOV
19、 Ri, Ri x MOV Rn, Ri x MOV #data, A x 等等指令是非法指令。,MOV指令在片內(nèi)RAM的允許操作圖,32,十六位數(shù)據(jù)傳送指令(1條) MOV DPTR,#data16 ; (DPH) dataH8 ,(DPL) dataL8 如:MOV DPTR,#2368H MOV DPH,#23H MOV DPL,#68H MOV DPTR,#35326,33,舉例:設(shè)內(nèi)部RAM40H單元的內(nèi)容為30H,30H單元的內(nèi)容為20H,20H單元的內(nèi)容為10H,端口P1的內(nèi)容為AAH,試問結(jié)果如何? MOV R0, #40H MOV A ,R0 MOV R1,A MOV B,R
20、1 MOV R1,P1 MOV P2,P1 MOV 40H,#10H 問:R0=? R1=? 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)=10H,34,程序存儲器數(shù)據(jù)傳送指令(查表指令)(2條) MOVC A,A+DPTR ; A (A)+(DPTR) 一般DPTR放表的首地址,A放所查數(shù)據(jù)在表中的偏移;查表范圍為64KB空間
21、,稱為遠(yuǎn)程查表。 MOVC A, A+PC ; A (A) + (PC) PC的值為下條指令的地址, A放所查數(shù)據(jù)相對PC值的偏移;查表范圍為最大為256B空間,稱為近程查表。 注意:內(nèi)外程序存儲器在邏輯上連續(xù)統(tǒng)一,傳送單向,只讀。 這類指令用于訪問程序存儲器中的數(shù)據(jù)表格。,35,例1:近程查表 地址 標(biā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碼 例
22、如A初值01H,查表得31H; A初值0FH,查表得46H,36,例2 遠(yuǎn)程查表 設(shè)程序中的數(shù)據(jù)表格為: 執(zhí)行程序: 1000H:MOV A,#10H 1002H:PUSH DPH 1004H:PUSH DPL 1006H:MOV DPTR,#7000H 1009H:MOVC A,A+DPTR ; 100AH: POP DPH 100CH:POP DPL 結(jié)果為:(A)= ,(PC)= ,(DPTR)=,7010H:02H 7011H:04H 7012H:06H 7013H:08H,02H 100EH 原值高低字節(jié)互換,A (10H+7000H),37,累加器A與片外RAM的數(shù)據(jù)傳送指令(4條
23、) 用間址方式 MOVX A,Ri ; A (Ri),且使/RD=0 MOVX A, DPTR ; A (DPTR),且使/RD=0 MOVX Ri,A ; (Ri) (A) ,且使/WR=0 MOVX DPTR , A ; (DPTR ) (A) ,且使/WR=0 注意:1、外部數(shù)據(jù)的傳送只能使用A 2、 DPTR兩條指令以DPTR為片外RAM16位地址指針,尋址范圍為64KB空間;P2輸出高8位地址,P0口輸出低8位地址和數(shù)據(jù),分時(shí)復(fù)用 3、 Ri兩條指令以R0或R1作低8位地址指針,由P0口送出,尋址范圍為256B空間(P2口仍可作通用I/O口)。,38,例:將外部RAM中F5H單元中的
24、內(nèi)容送到0645H單元中,MOV DPTR,#0645H MOV R0,#0F5H MOVX A , R0 MOVX DPTR , A,MOV R0,#0F5H MOVX A ,R0,例:將外部RAM中0F5H單元中的內(nèi)容送到A單元中。,39,交換指令(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位不變。,40,
25、如:設(shè)( A ) =36H, ( R1 ) =65H, ( 65H ) =42H XCHD A,R1 ; ( A ) =32H, ( 65H ) =46H,(2)累加器A高、低半字節(jié)交換指令 SWAP A ; ( A ) 03 (A ) 47 如:設(shè)(A)=36H SWAP A ;(A)=63H,41,堆棧操作指令(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
26、 ) R5 , (SP)1SP 注意:其操作數(shù)為直接地址,不能用寄存器名。 POP ACC 正確 POP A 錯(cuò)誤,42,例、進(jìn)入中斷服務(wù)程序,要將DPTR、PSW和A的內(nèi)容保護(hù)起來。設(shè)DPTR0123H,PSW25H,A=10H,當(dāng)前SP=30H,問執(zhí)行下列入棧后結(jié)果如何? PUSH DPL ;SP=31H,(31H)23H PUSH 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 SP,32H,
27、01H,31H,25H,34H,10H,25H,32H,01H,33H,23H,30H,43,三、算術(shù)運(yùn)算指令 共24條指令,分成七個(gè)小類 不帶進(jìn)位加法指令(4條) 帶進(jìn)位加法指令(4條) 帶借位減法指令(4條) 加1指令(5條) 減1指令(4條) 乘除法指令(2條) 進(jìn)制數(shù)調(diào)整指令(1條),主要是對8位無符號數(shù)進(jìn)行算術(shù)運(yùn)算。算術(shù)運(yùn)算結(jié)果將影響PSW的有關(guān)位。,44,、不帶進(jìn)位加法指令(4條) ADD A,Rn ;( A ) ( A ) + ( Rn ) ADD A,direct ; ( A ) ( A ) + ( direct ) ADD A,Ri ; ( A ) ( A ) + ( Ri
28、) 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ù)(看作有符號數(shù)時(shí))相加溢出,則OV置1,否則清零。 如果兩個(gè)同符號數(shù)相加的結(jié)果變號即溢出,則OV置1,否則清零。,45,例:(A)=0C3H,(R0)=0AAH 執(zhí)行“ADD A,R0”的和為6DH,標(biāo)志位CY= ,OV= ,AC= , P= 。 OV=C7 C6 對第6、第7位的進(jìn)位位C7、C6異或。 例:(A)=0BAH,(R0)=88H 執(zhí)行“ADD A,R0”的和為42H,標(biāo)志位CY= ,OV= ,A
29、C= , P= 。 OV=C7 C6 對第6、第7位的進(jìn)位位C7、C6異或。,1 1 0 1,1 1 1 0,兩個(gè)同符號數(shù)相加的結(jié)果變號,則OV置1,否則清零。,46,帶進(jìn)位加法指令(4條) ADDC A,Rn ; (A)(A)+ (Rn) +CY ADDC A,direct ; (A)(A) + (direct) +CY ADDC A,Ri ; (A)(A) + (Ri) +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ù)的加法。,47,例:兩
30、個(gè)16位無符號數(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位地址 CLR C ;清CY MOV A,R0 ;取被加數(shù)低8位 ADD A,R1 ;與加數(shù)低8位相加 MOV R0,A ;和存入30H單元 INC R0 ;指向高8位地址 INC R1 MOV A,R0 ;取被加數(shù)高8位 ADDC A,R1 ;與加數(shù)高8位及進(jìn)位位相加 MOV R0,A ;結(jié)果存入31H單元 CLR A ;清A ADDC A,
31、#00H ;處理進(jìn)位 INC R0 ; MOV R0,A ;進(jìn)位存入32H,48,、帶借位減法指令(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)位標(biāo)志位CY置1,否則清零。 如果兩個(gè)數(shù)(看作有符號數(shù)時(shí))相減溢出,則OV置1,否則清零。 如果兩個(gè)異號數(shù)相減的結(jié)果與被減數(shù)符號不同即溢出,
32、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,49,、加1指令(5條) INC A ; (A) (A)+1 INC Rn ; ( Rn ) ( Rn ) +1 INC direct ; (direct ) (direct ) +1 INC Ri ; ( Ri ) ( Ri ) +1 INC DPTR ; ( DPTR ) ( DPTR ) +1 說明:INC A 影響P外,不影響PSW其它位(即標(biāo)
33、志位CY、AC、OV)。 例:MOV A,#0FEH ;P=1 INC A ;P=0,50,、減1指令(4條) DEC A ; (A) (A)-1 DEC Rn ; ( Rn ) ( Rn ) -1 DEC direct ; (direct ) (direct ) -1 DEC Ri ; ( Ri ) ( Ri ) -1 DEC DPTR ; 無此指令 說明:DEC A 影響P外,不影響PSW其它位(即 標(biāo)志位CY、AC、OV)。 例:MOV A,#0FFH ;P=0 DEC A ;P=1,51,、乘除法指令(2條,單字節(jié)四周期指令) 1、乘法指令 MUL AB ; (A) x (B)B158
34、,A70 說明:(1)為無符號乘法; (2)若結(jié)果的B0 (乘積大于255) ,則OV=1,若B=0,則OV=0;CY總是清零,AC不影響,P影響。 2、除法指令 DIV AB ; (A)/ (B)的商A,余數(shù)B 說明:(1)為無符號除法; (2)若除數(shù)B=0 (除法無意義) ,則OV=1,若B 0,則OV=0;CY總是清零,AC不影響,P影響。,52,、十進(jìn)制數(shù)調(diào)整指令(1條) DA A ;調(diào)整累加器內(nèi)容為BCD碼(二進(jìn)制編碼的十進(jìn)制) 說明: (1)此指令跟在ADD或ADDC指令之后,將A中的和調(diào)整為BCD碼,并且ADD或ADDC的兩個(gè)操作數(shù)是BCD碼,即兩個(gè)BCD碼相加必須經(jīng)過DA A指
35、令后,才能得到正確的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);,53,二-十進(jìn)制編碼BCD碼,例:求十進(jìn)制數(shù)876的BCD碼 876BCD =1000 0111 0110 876= 36CH =0011 0110 1100B,BCD碼(Binary Coded Decimal) 二進(jìn)制代碼表示的十進(jìn)制數(shù)。,8421 BCD碼,54,BCD碼運(yùn)算,十進(jìn)制調(diào)整:計(jì)算機(jī)實(shí)際按二進(jìn)制法則計(jì)算,加入 十進(jìn)制調(diào)整
36、操作,可計(jì)算BCD碼。,例:計(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,55,執(zhí)行DA A后,CPU根據(jù)累加器的值,以及AC、CY的狀態(tài),來自動的對A進(jìn)行修正,不需人為的干預(yù)。 注意: 1、DA指令不對減法進(jìn)行修正 例:MOV A,#16 ADD A,#16 DA A A=? MOV A,#56H ADD A,#67H DA A A=? CY=?,20H,23H 1,56,四、邏輯運(yùn)算指令 包括與、或、異或、清
37、除、求反、移位等操作。這類指令一般不影響標(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)算完成。,57,、邏輯“與”,“或”,“異或”指令(18條) ANL(ORL,XRL) A,Rn ANL(ORL,XRL) A,direct ANL(ORL,XRL) A,Ri ANL(ORL,XRL) A,#data ANL(ORL,XRL) direct,A
38、ANL(ORL,XRL) direct,#data,58,說明: (1)目的操作數(shù)只能是A或者direct; 按位進(jìn)行操作 (2)前4條指令僅影響標(biāo)志位P;后兩條不影響標(biāo)志位; (3)“與”運(yùn)算常用于使某些位清0;“或”或運(yùn)算常用于使某些位置1;“異或”運(yùn)算常用于使某些位取反或不變:用1異或使對應(yīng)位取反,用0異或使對應(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)容為0AAH,59,、累加器A清0與取反指令(2條) 1、累加器A清 0 指令 CLR
39、 A ; (A) 0 說明:只影響標(biāo)志位P。 2、累加器A取反指令(按位取反) CPL A ;(A) (/A) ,相當(dāng)于0FFH - A A 說明:不影響標(biāo)志位。 如: (A)=56H CPL A ;結(jié)果為0A9H,60,、移位指令(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)各條指令每次只移動一位; (2)左移一位相當(dāng)于乘以2;右移一位相當(dāng)于除以2; (3)帶進(jìn)位位移動的影響標(biāo)志位CY和P。,61,RL A RR A RLC A RRC A,0 0 1
40、 1 1 1 0 1 3BH,0 1 1 1 1 0 1 0 7AH,0 0 1 1 1 1 0 1 3BH,1 0 0 1 1 1 1 0 9EH,0 0 1 1 1 1 0 1 3BH,1 0 0 1 1 1 1 0 9EH,0 0 1 1 1 1 0 1 3BH,0 1 1 1 1 0 1 1 7BH,1,0,1,1,62,五、控制轉(zhuǎn)移類指令 包括無條件轉(zhuǎn)移、條件轉(zhuǎn)移、子程序調(diào)用和返回指令等,共17條。 只有比較轉(zhuǎn)移指令影響標(biāo)志。 、無條件轉(zhuǎn)移指令(4條),、條件轉(zhuǎn)移指令(8條),、子程序調(diào)用和返回指令(4條),、空操作指令(1條),63,1、長轉(zhuǎn)移指令 LJMP addr16 ; (P
41、C) addr16 說明:轉(zhuǎn)移范圍:64KB全部程序空間任何單元。 如: LJMP NEXT,(PC),、無條件轉(zhuǎn)移指令(4條),64,2、絕對轉(zhuǎn)移指令 AJMP addr11 ;先(PC) (PC)+2 ;再( PC100 ) addr11, ( PC1511 )不變 說明: (1)兩字節(jié)編碼 (2)轉(zhuǎn)移范圍:含有下一條指令首地址的同一個(gè)2KB范圍,即 高5位地址相同 ; 如: 2800H AJMP SUB 若SUB543H 則PC?,(PC),2D43H,65,3、短轉(zhuǎn)移指令 SJMP rel ;先(PC)+2(PC),后(PC)+rel(PC) 說明:(1)兩字節(jié)編碼 (2)rel是補(bǔ)碼
42、形式存在,轉(zhuǎn)移范圍:-128+127;對應(yīng)rel值為:00H7FH(0+127)、80HFFH(-128-1); 如: HERE: SJMP HERE ;無限循環(huán)執(zhí)行本指令,REL= ? SJMP $ ;與上條指令相同 例: 1100H SJMP 25H PC=? 1100H SJMP E7H PC=?,FEH,66,三種跳轉(zhuǎn)對比,AJMP addr11 LJMP addr16 SJMP rel 11位地址,跳轉(zhuǎn)2K 16位地址,跳轉(zhuǎn)64K 8位地址,跳轉(zhuǎn)256 256 2K 64K,67,4、間接轉(zhuǎn)移指令 JMP A+DPTR ;(A)+(DPTR)(PC) 說明:(1)具有多分枝轉(zhuǎn)移功能,
43、即散轉(zhuǎn)功能,又叫散轉(zhuǎn)指令; (2)轉(zhuǎn)移范圍:是以DPTR為首地址的256B。 DPTR作為基址寄存器,A作為變址寄存器。轉(zhuǎn)移范圍64KB.,68,例 根據(jù)累加器A中的命令鍵鍵值,設(shè)計(jì)命令鍵操作程序入口跳轉(zhuǎn)表。 CLR C RLC A MOV DPTR,JPTAB JMP A+DPTR JPTAB: 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)。,69,、條件轉(zhuǎn)移指令
44、(8條) 均為相對尋址方式。 1、累加器A為零(非零)轉(zhuǎn)移指令(2條) JZ rel ;當(dāng)A=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) 。,70,例 將外部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)容
45、送A JZ LOOP2 ; 判傳送數(shù)據(jù)是否為零,A為零則轉(zhuǎn)移 MOV R0,A ; 傳送數(shù)據(jù)不為零,送內(nèi)部RAM INC R0 修改地址指針 INC DPTR SJMP LOOP1 ; 繼續(xù)傳送 LOOP2:RET ; 結(jié)束傳送,返回主程序,71,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 NEX2 N
46、EX1:MOV A,#02H NEX2:MOV 41H,A SJMP $,75,3、減1非零條件轉(zhuǎn)移指令(2條) 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ù)器 。,76,例:將外部RAM地址1000H10FFH的256個(gè)單
47、元清零。,MOV R2,#0FFH MOV DPTR,#1000H CLR A LOOP: MOVX DPTR,A INC DPTR DJNZ R2,LOOP RET,MOVX DPTR,A,77,MOV DPTR,#2000H PUSH DPL PUSH DPH MOV DPTR,#3000H MOV R2,DPL MOV R3,DPH L1:POP DPH POP DPL MOVX A,DPTR INC DPTR,PUSH DPL PUSH DPH MOV DPL,R2 MOV DPH,R3 MOVX DPTR,A INC DPTR MOV R2,DPL MOV R3,DPH DJNZ 3
48、5H,L1 RET,例:把2000H開始的外部RAM單元中的數(shù)據(jù)傳送到3000H開始的外部RAM單元,數(shù)據(jù)個(gè)數(shù)放在內(nèi)部RAM35單元中。,78,、子程序調(diào)用和返回指令(4條),1、主程序轉(zhuǎn)向子程序,必須執(zhí)行LCALL ACALL語句,此時(shí)CPU把子程序的 入口地址給PC,程序轉(zhuǎn)入子程序執(zhí)行, 同時(shí)CPU把主程序的斷點(diǎn)地址自動入棧 保護(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次入/出棧,注意順序,LCALL,RET,
49、主程序,子程序,斷點(diǎn),79,1、絕對調(diào)用指令 ACALL addr11 ; (PC)+2(PC) ;(SP)+1 (SP), (PC07 )(SP) ;(SP)+1 (SP), (PC815)(SP) ;addr11(PC010), ( PC1115不變) AJMP addr11 轉(zhuǎn)移范圍:含有下一條指令首地址 高5位的同一個(gè)2KB范圍。,80,2、長調(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)移范圍:整
50、個(gè)程序存儲空間,64KB范圍。 如:LCALL SUBPRO,例 設(shè)(SP)=5FH,符號地址“SUBRTN”指向5678H,執(zhí)行指令 0123H LCALL SUBRTN 0126H . 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 5678H,81,3、返回指令(2條) 子程序返回指令 RET ;(SP) PC 815 , (SP) -1SP ; (SP) PC 0
51、7 , (SP) -1SP 例(SP) =63H,(62H)=07H,(63H)=30H 執(zhí)行RET后, (SP)= ? (PC)= ? 中斷服務(wù)程序返回指令 RETI ;(SP) PC 815 , (SP) -1SP ; (SP) PC 07 , (SP) -1SP ;開放中斷邏輯,61H 3007H,82,子程序調(diào)用和轉(zhuǎn)移的對比,LCALL,RET,主程序,子程序,斷點(diǎn),程序,LJMP,轉(zhuǎn)移不需要返回,沒有斷點(diǎn)入棧保護(hù),83,、空操作指令 1條 NOP ; (PC)+1 ( PC ) 仍然取指令,并譯碼,但不做任何操作,只是為了耗費(fèi)一個(gè)機(jī)器周期,作用:測試,延時(shí) 例:要求從P1口的P1.1
52、輸出10個(gè)方波,每個(gè)方波周期為10個(gè)機(jī)器周期: MOV R1,#20 LOOP: CPL P1.1 ;1T NOP ;1T NOP ;1T DJNZ R1, LOOP ;2T,84,六、 位操作類指令 包括位變量傳送、邏輯運(yùn)算、控制轉(zhuǎn)移等指令,共17條,分成4個(gè)小類。只有部分指令影響CY標(biāo)志。,、位數(shù)據(jù)傳送指令(2條),、位修正指令(6條),、位邏輯運(yùn)算指令(4條),、位條件轉(zhuǎn)移類指令(5條),位地址的表示方法: (1)直接用位地址 如:D4H (2)用特殊功能寄存器名加位數(shù) 如:PSW.4 (3)用SFR直接地址加位數(shù) 如:D0H.4 (4)用位名稱 如:RS1 (5)用偽指令bit定義的有名字的位地址 如:SUB.REG bit RS1, FLAGRUN bit 02H,進(jìn)位位CY作為位累加器C,利用C完成位的傳送和邏輯運(yùn)算。位尋址區(qū)包括20H2FH和專用寄存器區(qū)的11個(gè)專用寄存器,85, 位數(shù)據(jù)傳送指令 (2條) MOV C,bit ;C(bit) MOV bit,C ;bitC 位狀態(tài)修改指令 (6條) CLR C ;C0 CLR bit ;(bit)0 CPL C ;CC CPL bit ;(bit)(bit) SETB C ;C1 SETB bit ;(bit)1,只允許直接尋址位與位累加器C之
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 混合動力電動汽車結(jié)構(gòu)原理與檢修 第2版 課件 學(xué)習(xí)情景2 混合動力電動汽車高壓維修操作安全
- 年末晚會活動策劃方案(3篇)
- 牛雜店工人管理制度范本(3篇)
- 甲醇爐燃?xì)獍踩芾碇贫?3篇)
- 獸藥質(zhì)檢培訓(xùn)
- 線上幫辦團(tuán)隊(duì)管理制度內(nèi)容(3篇)
- 蔬菜種植后期管理制度(3篇)
- 通信網(wǎng)管中心管理制度(3篇)
- 飯店協(xié)會檔案管理制度(3篇)
- 《GA 1016-2012槍支(彈藥)庫室風(fēng)險(xiǎn)等級劃分與安全防范要求》專題研究報(bào)告
- 2025年廣東省中考語文試卷真題(含答案解析)
- 燙熨治療法講課件
- 2025至2030中國模塊化變電站行業(yè)發(fā)展趨勢分析與未來投資戰(zhàn)略咨詢研究報(bào)告
- 電廠清潔生產(chǎn)管理制度
- 2025年江蘇省事業(yè)單位招聘考試教師招聘體育學(xué)科專業(yè)知識試題
- 機(jī)械設(shè)計(jì)年終述職報(bào)告
- 可信數(shù)據(jù)空間解決方案星環(huán)科技
- 建筑工程監(jiān)理服務(wù)承諾書范文
- 知榮明恥主題班會課件
- 職業(yè)技術(shù)學(xué)院工業(yè)機(jī)器人技術(shù)高職技能考核標(biāo)準(zhǔn)1022(簡化版)
- 聲學(xué)基礎(chǔ)課后題答案
評論
0/150
提交評論