MCS-51共有111條指令,可分為5類:
[1].數(shù)據(jù)傳送類指令(共29條)
[2].算數(shù)運(yùn)算類指令(共24條)
[3].邏輯運(yùn)算及移位類指令(共24條)
[4].控制轉(zhuǎn)移類指令(共17條)[5].布爾變量操作類指令(共17條)
一些特殊符號(hào)的意義
在介紹指令系統(tǒng)前,我們先了解一些特殊符號(hào)的意義,這對(duì)今后程序的編寫都是相當(dāng)有用的。電子元件郵購(gòu)網(wǎng)
Rn——當(dāng)前選中的寄存器區(qū)的8個(gè)工作寄存器R0—R7(n=0-7)。
Ri——當(dāng)前選中的寄存器區(qū)中可作為地址寄存器的兩個(gè)寄存器R0和R1(i=0,1)
direct—內(nèi)部數(shù)據(jù)存儲(chǔ)單元的8位地址。包含0—127(255)內(nèi)部存儲(chǔ)單元地址和特殊功能寄存地址。
#data—指令中的8位常數(shù)。
#data16—指令中的16位常數(shù)。
addr16—用于LCALL和LJMP指令中的16目的地地址,目的地址的空間為64kB程序存儲(chǔ)器地址。
#addr11—用于ACALL和AJMP指令中的11目的地地址,目的地址必須放在與下條指令第一個(gè)字節(jié)同一個(gè)2kB程序存儲(chǔ)器空間之中。
rel—8位帶符號(hào)的偏移字節(jié),用于所有的條件轉(zhuǎn)移和SJMP等指令中,偏移字節(jié)對(duì)于下條指令的第一個(gè)字節(jié)開始的-128——+127范圍內(nèi)。單片機(jī)學(xué)習(xí) HPOO
本文引用地址:http://www.ex-cimer.com/article/201611/321694.htm
@—間接寄存器尋址或基址寄存器的前綴。
/—為操作的前綴,聲明對(duì)該位操作書取反。
DPTR—數(shù)據(jù)指針。
bit—內(nèi)部RAM和特殊功能寄存器的直接尋址位。
A—累加器。
B—累加器B。用于乘法和除法指令中。
C—進(jìn)位標(biāo)志位。
(x)—某地址單元中的內(nèi)容。
((x))—由X尋址單元中的內(nèi)容。
MCS-51的尋址方式
尋址的“地址”即為操作數(shù)所在單元的地址,絕大部分指令執(zhí)行時(shí)都需要用到操作數(shù),那么到哪里去取得操作數(shù)呢?最易想到的就是告訴CPU操作數(shù)所在的地址單元,從那里可取得響應(yīng)的操作數(shù),這便是“尋址”之意。MCS-51的尋址方式很多,使用起來(lái)也相當(dāng)方便,功能也很強(qiáng)大,靈活性強(qiáng)。這便是MCS-51指令系統(tǒng)“好用”的原因之一。下面我們分別討論幾種尋址方式的原理。杭州電子元件郵購(gòu)網(wǎng)地址:www.hpoo.net
[1].直接尋址
指令中操作數(shù)直接以單元地址形式出現(xiàn),例如:
MOVA,68H
這條指令的意義是把內(nèi)部RAM中的68H單元中的數(shù)據(jù)內(nèi)容傳送到累加器A中。值得注意的是直接尋址方式只能使用8位二進(jìn)制地址,因此這種尋址方式僅限于內(nèi)部RAM進(jìn)行尋址。低128位單元在指令中直接以單元地址的形式給出。對(duì)于特殊功能寄存器可以使用其直接地址進(jìn)行訪問(wèn),還可以以它們的符號(hào)形式給出,只是特殊功能寄存器只能用直接尋址方式訪問(wèn),而無(wú)其它方法。
[2].寄存器尋址
寄存器尋址對(duì)選定的8個(gè)工作寄存器R0-R7進(jìn)行操作,也就是操作數(shù)在寄存器中,因此指定了寄存器就得到了操作數(shù),寄存器尋址的指令中以寄存器的符號(hào)來(lái)表示寄存器,例如:
MOVA,R1
這條指令的意義是把所用的工作寄存器組中的R3的內(nèi)容送到累加器A中。推薦電子制作郵購(gòu)網(wǎng)站:www.hpoo.net
值得一提的是工作狀態(tài)寄存器的選擇是通過(guò)程序狀態(tài)字寄存器來(lái)控制的,在這條指令前,應(yīng)通過(guò)PSW設(shè)定當(dāng)前工作寄存器組。
[3].寄存器間接尋址
寄存器尋址方式,寄存器中存放的是操作數(shù),而寄存器間接尋址方式,寄存器中存放的則為操作數(shù)的地址,也即操作數(shù)是通過(guò)寄存器指向的地址單元得到的,這便是寄存器間接尋址名稱的由來(lái)。
例如指令:
MOVA,@R0
這條指令的意義是R0寄存器指向地址單元中的內(nèi)容送到累加器A中。假如R0=#56H,那么是將56H單元中的數(shù)據(jù)送到累加器A中。
寄存器間接尋址方式可用于訪問(wèn)內(nèi)部RAM或外部數(shù)據(jù)存儲(chǔ)器。訪問(wèn)內(nèi)部RAM或外部數(shù)據(jù)存儲(chǔ)器的低256字節(jié)時(shí),可通過(guò)R0和R1作為間接寄存器。然而有必要指出,內(nèi)部RAM的高128字節(jié)地址與專用積存器的地址是重疊的,所以這種尋址方式不能用于訪問(wèn)特殊功能寄存器。
外部數(shù)據(jù)存儲(chǔ)器的空間為64kB,這時(shí)可采用DPTR作為間址寄存器進(jìn)行訪問(wèn),指令如下:單片機(jī)設(shè)計(jì)
MOVXA,@DPTR
這條指令的意義是與上述類似,不再贅述。
[4].立即尋址
立即尋址就是把操作數(shù)直接在指令中給出,即操作數(shù)包含在指令中,指令操作碼的后面緊跟著操作數(shù),一般把指令中的操作數(shù)稱為立即數(shù),因此而得名。為了與直接尋址方式相區(qū)別,在立即數(shù)前加上“#”符號(hào),例如:
MOVXA,#0EH
這條指令的意義是將0EH這個(gè)操作數(shù)送到累加器A中。
[5].變址尋址
變址尋址是以DPTR或PC作為基址寄存器,以累加器A作為變址寄存器,將兩寄存器的內(nèi)容相加形成16位地址形成操作數(shù)的實(shí)際地址。例如:
MOVA,@A+DPTR
MOVXA,@A+PC
JMP@A+DPTR單片機(jī)設(shè)計(jì)
在這三條指令中,A作為偏移量寄存器,DPTR或PC作為變址寄存器,A作為無(wú)符號(hào)數(shù)與DPTR或PC的內(nèi)容相加,得到訪問(wèn)的實(shí)際地址。其中前兩條是程序存儲(chǔ)器讀指令,后一條是無(wú)條件轉(zhuǎn)移指令。
[6].位尋址
在MCS-51單片機(jī)中,RAM中的20H—2FH字節(jié)單元對(duì)應(yīng)的位地址為00H—7FH,特殊功能寄存器中的某些位也可進(jìn)行為尋址,這些單元既可以采用字節(jié)方式訪問(wèn)它們,也可采用位尋址的方式訪問(wèn)它們。
[7].相對(duì)尋址
相對(duì)尋址方式是為了程序的相對(duì)轉(zhuǎn)移而設(shè)計(jì)的,其夜里是以PC的內(nèi)容為基址,加上給出的偏移量作為轉(zhuǎn)移地址,從而實(shí)現(xiàn)程序的轉(zhuǎn)移。轉(zhuǎn)移的目的地址可參見(jiàn)如下表達(dá)式:
目的地址=轉(zhuǎn)移指令地址+轉(zhuǎn)移指令字接數(shù)+偏移量
值得注意的是,偏移量是有正負(fù)號(hào)之分的,偏移量的取值范圍是當(dāng)前PC值的-128—+127之間。推薦電子制作郵購(gòu)網(wǎng)站:www.hpoo.net
MCS-51數(shù)據(jù)傳送指令
調(diào)頻FM發(fā)射話筒制作套件
數(shù)據(jù)傳送指令共有29條,數(shù)據(jù)傳送指令一般的操作是把源操作數(shù)傳送到目的操作數(shù),指令執(zhí)行完成后,源操作數(shù)不變,目的操作數(shù)等于源操作數(shù)。如果要求在進(jìn)行數(shù)據(jù)傳送時(shí),目的操作數(shù)不丟失,則不能用直接傳送指令,而采用交換型的數(shù)據(jù)傳送指令,數(shù)據(jù)傳送指令不影響標(biāo)志C,AC和OV,但可能會(huì)對(duì)奇偶標(biāo)志P有影響。
[1].以累加器A為目的操作數(shù)類指令(4條)
這4條指令的作用是把源操作數(shù)指向的內(nèi)容送到累加器A。有直接、立即數(shù)、寄存器和寄存器間接尋址方式:
MOV A,data;(data)→(A) 直接單元地址中的內(nèi)容送到累加器A
MOV A,#data;#data→(A) 立即數(shù)送到累加器A中
MOV A,Rn;(Rn)→(A) Rn中的內(nèi)容送到累加器A中
杭州電子元件郵購(gòu)網(wǎng)地址:www.hpoo.net
MOV A,@Ri;((Ri))→(A) Ri內(nèi)容指向的地址單元中的內(nèi)容送到累加器A
[2].以寄存器Rn為目的操作數(shù)的指令(3條)
這3條指令的功能是把源操作數(shù)指定的內(nèi)容送到所選定的工作寄存器Rn中。有直接、立即和寄存器尋址方式:
MOV Rn,data;(data)→(Rn) 直接尋址單元中的內(nèi)容送到寄存器Rn中
MOV Rn,#data;#data→(Rn) 立即數(shù)直接送到寄存器Rn中
MOV Rn,A;(A)→(Rn) 累加器A中的內(nèi)容送到寄存器Rn中電子元件郵購(gòu)
[3].以直接地址為目的操作數(shù)的指令(5條)
這組指令的功能是把源操作數(shù)指定的內(nèi)容送到由直接地址data所選定的片內(nèi)RAM中。有直接、立即、寄存器和寄存器間接4種尋址方式:
MOV data,data;(data)→(data) 直接地址單元中的內(nèi)容送到直接地址單元
MOV data,#data;#data→(data) 立即數(shù)送到直接地址單元
MOV data,A;(A)→(data) 累加器A中的內(nèi)容送到直接地址單元
MOV data,Rn;(Rn)→(data) 寄存器Rn中的內(nèi)容送到直接地址單元電子元件郵購(gòu)
MOV data,@Ri;((Ri))→(data) 寄存器Ri中的內(nèi)容指定的地址單元中數(shù)據(jù)送到直接地址單元
[4].以間接地址為目的操作數(shù)的指令(3條)
這組指令的功能是把源操作數(shù)指定的內(nèi)容送到以Ri中的內(nèi)容為地址的片內(nèi)RAM中。有直接、立即和寄存器3種尋址方式:
MOV @Ri,data;(data)→((Ri)) 直接地址單元中的內(nèi)容送到以Ri中的內(nèi)容為地址的RAM單元
MOV @Ri,#data;#data→((Ri)) 立即數(shù)送到以Ri中的內(nèi)容為地址的RAM單元
MOV @Ri,A;(A)→((Ri)) 累加器A中的內(nèi)容送到以Ri中的內(nèi)容為地址的RAM單元電子制作 HPOO
[5].查表指令(2條)
這組指令的功能是對(duì)存放于程序存儲(chǔ)器中的數(shù)據(jù)表格進(jìn)行查找傳送,使用變址尋址方式:
MOVC A,@A+DPTR;((A))+(DPTR)→(A) 表格地址單元中的內(nèi)容送到累加器A中
MOVC A,@A+PC;((PC))+1→(A),((A))+(PC)→(A) 表格地址單元中的內(nèi)容送到累加器A中
[6].累加器A與片外數(shù)據(jù)存儲(chǔ)器RAM傳送指令(4條)
這4條指令的作用是累加器A與片外RAM間的數(shù)據(jù)傳送。使用寄存器尋址方式:
MOVX @DPTR,A;(A)→((DPTR)) 累加器中的內(nèi)容送到數(shù)據(jù)指針指向片外RAM地址中推薦電子制作郵購(gòu)網(wǎng)站:www.hpoo.net
MOVX A, @DPTR;((DPTR))→(A) 數(shù)據(jù)指針指向片外RAM地址中的內(nèi)容送到累加器A中
MOVX A, @Ri;((Ri))→(A) 寄存器Ri指向片外RAM地址中的內(nèi)容送到累加器A中
MOVX @Ri,A;(A)→((Ri)) 累加器中的內(nèi)容送到寄存器Ri指向片外RAM地址中
[7].堆棧操作類指令(2條)
這4類指令的作用是把直接尋址單元的內(nèi)容傳送到堆棧指針SP所指的單元中,以及把SP所指單元的內(nèi)容送到直接尋址單元中。這類指令只有兩條,下述的第一條常稱為入棧操作指令,第二條稱為出棧操作指令。需要指出的是,單片機(jī)開機(jī)復(fù)位后,(SP)默認(rèn)為07H,但一般都需要重新賦值,設(shè)置新的SP首址。入棧的第一個(gè)數(shù)據(jù)必須存放于SP+1所指存儲(chǔ)單元,故實(shí)際的堆棧底為SP+1所指的存儲(chǔ)單元。單片機(jī)編程器 HPOO
PUSH data;(SP)+1→(SP),(data)→(SP) 堆棧指針首先加1,直接尋址單元中的數(shù)據(jù)送到堆棧指針SP所指的單元中
POP data;(SP)→(data)(SP)-1→(SP), 堆棧指針SP所指的單元數(shù)據(jù)送到直接尋址單元中,堆棧指針SP再進(jìn)行減1操作
[8].交換指令(5條)
這5條指令的功能是把累加器A中的內(nèi)容與源操作數(shù)所指的數(shù)據(jù)相互交換。
XCH A,Rn;(A)←→(Rn)累加器與工作寄存器Rn中的內(nèi)容互換
XCH A,@Ri;(A)←→((Ri))累加器與工作寄存器Ri所指的存儲(chǔ)單元中的內(nèi)容互換電子制作 HPOO
XCH A,data;(A)←→(data)累加器與直接地址單元中的內(nèi)容互換
XCHD A,@Ri;(A3-0)←→((Ri)3-0)累加器與工作寄存器Ri所指的存儲(chǔ)單元中的內(nèi)容低半字節(jié)互換
SWAP A;(A3-0)←→(A7-4)累加器中的內(nèi)容高低半字節(jié)互換
[9].16位數(shù)據(jù)傳送指令(1條)
這條指令的功能是把16位常數(shù)送入數(shù)據(jù)指針寄存器。
MOV DPTR,#data16;#dataH→(DPH),#dataL→(DPL)16位常數(shù)的高8位送到DPH,低8位送到DPL
評(píng)論