|
MCS-51操作指令? |
|
|
(一) 指令系統(tǒng)簡(jiǎn)介 1. 指令分類(lèi)統(tǒng)計(jì) 指令總數(shù):111條 操作碼:255個(gè) 助記符:48個(gè) 單字節(jié)指令:49條 單周期指令:64條 雙字節(jié)指令:48條 雙周期指令:45條 三字節(jié)指令:17條 四周期指令:2條
表3-1 MCS-51指令分類(lèi) 數(shù)據(jù)傳送指令(29) 數(shù)據(jù)處理指令(48) 位操作指令(12) 程序控制指令(22) 1) 內(nèi)部傳送(16) 2) 外部傳送(4) 3) 查表 (2) 4) 交換 (5) 5) 棧操作 (2) 1) 算術(shù)運(yùn)算(24) 2) 邏輯運(yùn)算(24) 1) 位傳送(2) 2) 位置值(4) 3) 位邏輯(6) 1) 調(diào)用及返回(4) 2) 無(wú)條件轉(zhuǎn)移(4) 3) 條件轉(zhuǎn)移 (11) 4) 循環(huán) (2) 5) 空操作 (1)
2. 符號(hào)約定 Rn 表示當(dāng)前工作寄存器中的R0R7 Direct 表示對(duì)內(nèi)部單元直接尋址的8位地址 Ri 表示8位地址指針R0或R1,地址在R0或R1中。 DPTR 表示16位地址指針,地址在DPTR中。 #data 表示8位立即數(shù)。 #data16 表示16位立即數(shù)。 A+基地址 表示以A為變址寄存器。 addr11 表示短轉(zhuǎn)移的11位地址。 addr16 表示長(zhǎng)轉(zhuǎn)移的16位地址。 rel 表示相對(duì)轉(zhuǎn)移的地址偏移量。 bit 表示位地址。 (xx) 表示XX單元的內(nèi)容,如(A)表示寄存器A的內(nèi)容。 ((xx)) 表示以(xx)為指針,所指單元的內(nèi)容。例如, ((DPTR))表示數(shù)據(jù)指針DPTR所指單元的內(nèi)容。 3. 尋址方式 表 F1-1 MCS-51指令系統(tǒng)的尋址方式 尋 址 方 式 尋 址 范 圍 操作數(shù)形式 舉 例 寄存器 尋址 R0-R7 ,DPTR Acc,B,C(Cy 位) 寄存器名 MOV R3,A INC DPTR 直接 尋址 內(nèi)部RAM 00H-7FH 特殊功能寄存器 80H-FFH 8位地址 SFR名 MOV 79H,SP PUSH P1
直接 位尋址 內(nèi)部RAM位尋址區(qū) (20H-2FH): 位地址00H-7FH 可尋址的特殊功能寄存器: 位地址 80H-F7H 8位地址 位名 SFR名.位序 MOV C,78H CLR TR0 ANL C,P0.1
寄存器 間接 尋址 以數(shù)據(jù)指針表示操作數(shù)。 內(nèi)部RAM 00H-7FH @R0 @R1 MOV A, @R0 ADD A, @R1 外部RAM或I/O端口 00H-FFH / 0000H-FFFFH @R0 ,@R1@DPTR MOVX A, @R0 MOVX @DPTR,A 立即 尋址 8位(二進(jìn)制)立即數(shù), # data MOV A,# 1 16位(二進(jìn)制)立即數(shù) # data16 MOV DPTR,#2000H 基址 加 變址 尋址 以變址方式讀程序存貯器 實(shí)際地址=基址+變址偏移量 8位無(wú)符號(hào)變址偏移量由A提供 基址由PC或DPTR提供 @A+DPTR @A+PC MOVC A,@A+DPTR MOVC A,@A+PC
轉(zhuǎn) 移 地 址 的 尋 址 方 式 相對(duì) 尋址 轉(zhuǎn)移地址= 基址+相對(duì)偏移量rel 基址為取指令后的PC 值 8位有符號(hào)數(shù)rel在指令中給出 rel SJMP 0EBH 標(biāo)號(hào) SJMP LOOP 標(biāo)號(hào) 直接 尋址 短轉(zhuǎn)移,指令直接給出11位地址 Addr11或標(biāo)號(hào) AJMP NEW 標(biāo)號(hào) 長(zhǎng)轉(zhuǎn)移,指令直接給出16位地址 Addr16或標(biāo)號(hào) LJMP 2010H (二) 數(shù)據(jù)傳送指令 表 3-2 數(shù)據(jù)傳送指令 操作碼 目標(biāo)操作數(shù) 可選擇的源操作數(shù) 說(shuō) 明 MOV A Rn direct @Ri DPTR Rn;direct;@Ri;# data A;direct;# data A;Rn;direct;@Ri;# data A;direct;# data # data16 內(nèi)部傳送 內(nèi)部傳送 內(nèi)部傳送 內(nèi)部傳送 數(shù)據(jù)指針賦值 PUSH POP 隱含(SP) direct direct 隱含(SP) 壓棧,只能用直接尋址 退棧,只能用直接尋址 XCH A Rn; direct; @Ri 內(nèi)部交換 XCHD SWAP A A @Ri 隱含A 只交換低四位 A的高、低四位互換 MOVX A @Ri @DPTR @Ri; @DPTR A A A與外部數(shù)據(jù)存儲(chǔ)器間傳送 MOVC A @A+DPTR; @A+PC 讀外部程序存儲(chǔ)器 MOV C bit bit C Cy與可尋址位間傳送
1. 數(shù)據(jù)傳送指令的一般性說(shuō)明 指令的一般格式: 操作碼 目標(biāo)操作數(shù),源操作數(shù) 操作碼 說(shuō)明操作的性質(zhì) 操作內(nèi)容一般為 (目標(biāo)操作數(shù))←(源操作數(shù)) 8位操作數(shù)的形式有A、Rn、direct、@Ri、# data 等五種 16位操作數(shù)的形式有DPTR 與 # data16 1位操作數(shù)的形式有 C 與 bit 目標(biāo)與源應(yīng)同類(lèi)型,且有規(guī)定的允許搭配,一般可逆。 A及direct可全搭配,@Ri、Rn不能相互搭配,# data只可作源.。 傳送指令一般不影響標(biāo)志位。 直接改寫(xiě)PSW的情況除外,改寫(xiě)Acc影響P標(biāo)志。 2. 內(nèi)部傳送(MOV) 內(nèi)部RAM、特殊功能寄存器(SFR)之間的數(shù)據(jù)傳送。 注意立即數(shù) #XXH與直接地址XXH 的區(qū)別。 @Ri指針使用要點(diǎn):①與循環(huán)配合,適用于連續(xù)數(shù)據(jù)區(qū)的操作。 ②Ri應(yīng)先賦確定值。i=0,1。 ③是XCHD指令唯一的源操作數(shù)。
3. 外部傳送(MOVX) 以指針?lè)绞阶x、寫(xiě)外部數(shù)據(jù)存儲(chǔ)器或I/O端口。 @DPTR提供16位地址指針,可訪問(wèn)總線(xiàn)擴(kuò)展的整個(gè)64k空間。 @Ri只提供低8位地址指針,適用于256個(gè)地址的小規(guī)模總線(xiàn)擴(kuò)展。 或者由P2口以I/O方式提供高8位(頁(yè)) 地址,采用頁(yè)訪問(wèn)模式。例如: MOV P2,#30H ;由P2口提供高8位地址30H MOV R0,#0 ;低8位地址為00H MOVX A,@R0 ;讀(3000H)單元
應(yīng)用例:將內(nèi)部30H40H單元的內(nèi)容送外部數(shù)據(jù)存儲(chǔ)器,從4000H單元開(kāi)始存放。 MOV R0,#30H MOV R2,#17 MOV DPTR,#4000H LOOP: MOV A,@R0 MOVX @DPTR,A INC R0 INC DPTR DJNZ R2,LOOP ;設(shè)置(內(nèi)部)源指針初值 ;設(shè)置循環(huán)計(jì)數(shù)器初值 ;設(shè)置(外部)目標(biāo)指針初值 ;循環(huán)入口,讀源數(shù)據(jù) ;寫(xiě)目標(biāo)數(shù)據(jù) ;源指針下移 ;目標(biāo)指針下移 ;循環(huán)計(jì)數(shù)器減一,不為0則繼續(xù)循環(huán)
4. 讀外部程序存儲(chǔ)器(MOVC) 讀取外部程序存儲(chǔ)器中的數(shù)據(jù),用于查表。 MOVC A,@A+PC ;(A)←((A)+(PC)+1) PC為本指令的地址,取指令后加一。 變址偏移量(A)是8位無(wú)符號(hào)數(shù),因此查表的范圍在(PC)+1 (PC)+255。 MOVC A,@A+DPTR ;(A)←((A)+(DPTR)) DPTR是16位指針,因此查表的范圍為全64k空間。 應(yīng)用例:查Y(x)函數(shù)表。 3000H MOV A,#表元素序號(hào) 3002H ADD A,#表頭偏移量 3004H MOVC A, @A+PC ORG 30A0H TABLE: DB 17,22,34,58,82,103 表頭偏移量=表頭地址-(MOVC指令地址+1)
5. 棧操作(PUSH / POP) 堆棧在內(nèi)部RAM區(qū)。 PUSH和POP的對(duì)象可以是內(nèi)部RAM單元或SFR。 尋址方式只能用direct。例如, PUSH 30H ;(SP)←(SP)+1,((SP))←(30H) POP DPH ;(DPH)←((SP)),(SP)←(SP)-1
6. 交換(XCH / XCHD /SWAP) XCH 字節(jié)交換:A與內(nèi)部RAM單元或SFR交換。例如 XCH A,R2 ;(A)(R2) XCHD 半字節(jié)交換:A與內(nèi)部RAM單元進(jìn)行低四位交換,只能用寄存器間址@Ri。例如 XCHD A,@R1 ;(A)D0- D 3 ((R1))D0- D 3 SWAP A ;(A)D0- D 3 (A)D4- D 7 應(yīng)用例:拆字,將壓縮BCD碼擴(kuò)展為單字節(jié)BCD碼。
MOV R0, #30H 設(shè)立指針 MOV A, #0 ;(A)=0 XCHD A, @R0 ;(A)=0BH MOV R4, A ;(R4)=0BH XCH A,30H ;(A)=30H SWAP A ;(A)=03H MOV R3,A ;(R3)=03H
(三) 算術(shù)運(yùn)算指令 表 3-3 算術(shù)運(yùn)算指令 操作碼 目標(biāo)操作數(shù) 參與運(yùn)算的操作數(shù) 說(shuō) 明 Cy AC OV P ADD A Rn; direct; @Ri; # data 不帶進(jìn)位加 ADDC A Rn; direct; @Ri; # data 帶進(jìn)位加 SUBB A Rn; direct; @Ri; # data 帶借位減 MUL AB (A)*(B) 積在(B)(A) 0 - DIV AB (A)/(B) 商 (A) ,余數(shù) (B) DA A 只對(duì)加法作十進(jìn)制修正 - - INC A; Rn; direct; @Ri; DPTR 加一 - - - DEC A; Rn; direct; @Ri (無(wú)DPTR) 減一 *“”表示標(biāo)志位根據(jù)運(yùn)算結(jié)果取值,“-”表示對(duì)標(biāo)志位無(wú)影響。
1. 算術(shù)運(yùn)算指令的一般性說(shuō)明 除加1/減1指令外,一般以累加器Acc為目標(biāo),且影響標(biāo)志位。 沒(méi)有不帶借位減指令。用SUBB作不帶借位減運(yùn)算,Cy應(yīng)先清零。 乘法若 積 > 255 , 則OV = 1 除法若 除數(shù) = 0 , 則OV = 1 。 DA A 指令只對(duì)ADD 或ADDC作十進(jìn)制修正。 無(wú) DEC DPTR指令。
2. 加/減指令應(yīng)用例 將內(nèi)部RAM中從30H開(kāi)始存放的10個(gè)雙字節(jié)無(wú)符號(hào)整數(shù)相加,其和送(R5 R4 R3),低字節(jié)在R3。
MOV R0,#30H MOV R2,#10 MOV R3,#0 MOV R4,#0 MOV R5,#0 LOOP:MOV A,@R0 ADD A, R3 MOV R3,A INC R0 MOV A,@R0 ADDC A,R4 MOV R4,A INC R0 MOV A,#0 ADDC A,R5 MOV R5,A DJNZ R2,LOOP
將內(nèi)部RAM中從30H開(kāi)始存放的10個(gè)4位十進(jìn)制正整數(shù)(壓縮BCD碼)相加,其和送(R5 R4 R3),低字節(jié)在R3。
比較A與B中的無(wú)符號(hào)數(shù),大數(shù)存B。 MOV R2,A CLR C ;確保C = 0 SUBB A,B JC DONE ;若有借位,A<B,轉(zhuǎn)DONE 結(jié)束。 MOV B,R2 ;沒(méi)有借位,A>B,將大數(shù)存B。 DONE:
3. 乘/除指令應(yīng)用例 雙字節(jié)數(shù)乘單字節(jié)數(shù):雙字節(jié)數(shù)在(R3R4),單字節(jié)數(shù)在(R2),積送(R3R4R5) MOV A,R2 MOV B,R4 MUL AB (R4)(R2) MOV R5,A MOV R4,B MOV A,R2 MOV B,R3 MUL AB (R3)(R2) ADD A,R4 MOV A,#0 ADDC A,B MOV R3,A
單字節(jié)二進(jìn)制數(shù)轉(zhuǎn)十進(jìn)制(BCD)數(shù):二進(jìn)制數(shù)在A,十進(jìn)制數(shù)存入(R2R3) MOV B,#10 DIV AB 除十, 余個(gè)位 MOV R3,B 個(gè)位存R3 MOV B,#10 DIV AB 再除十, 余十位 MOV R2,A 商為百位,存R2 MOV A,B SWAP A ADD A,R3 十位與個(gè)位合并 MOV R3,A;

|
|
|