為任何微控制器編寫程序包括以特定順序向微控制器發(fā)出命令,這些命令必須按特定順序執(zhí)行才能執(zhí)行特定任務(wù)。微控制器的命令稱為微控制器指令集。
正如一句話是由每個(gè)漢字組成的一樣,微控制器(包括任何計(jì)算機(jī))程序都是由指令組成的。寫在程序中的指令告訴微控制器執(zhí)行哪個(gè)操作。指令集是計(jì)算機(jī)系列獨(dú)有的。在本文當(dāng)中,小編簡(jiǎn)單介紹下8051微控制器指令集,或稱為MCS-51指令集。
由于8051系列微控制器是8位處理器,因此8051微控制器指令集針對(duì)8位控制應(yīng)用進(jìn)行了優(yōu)化。作為典型的8位處理器,8051微控制器指令具有8位操作碼。因此,8051微控制器指令集最多可以有28=256條指令。
指令和組的介紹
在介紹8051單片機(jī)指令集、指令類型和尋址模式之前,首先需要簡(jiǎn)要了解一下8051單片機(jī)指令集(MCS-51指令集)的指令和指令組。
下表格顯示了8051指令組和每組中的指令。8051單片機(jī)指令集中有49個(gè)指令助記符,這49個(gè)助記符分為5組。
尋址模式
尋址模式是一種定位目標(biāo)數(shù)據(jù)的方法,也稱為操作數(shù)。8051系列微控制器允許使用五種尋址模式來尋址操作數(shù),分別是:
立即尋址
寄存器尋址
直接尋址
寄存器——間接尋址
索引尋址
1、立即尋址
在立即尋址模式下,操作碼后面的操作數(shù)是8位或16位的常量數(shù)據(jù)。立即尋址的名稱來自于要存儲(chǔ)在內(nèi)存中的常量數(shù)據(jù)緊跟在操作碼之后的事實(shí)。要存儲(chǔ)的常量值在指令本身中指定,而不是從寄存器中獲取。常量數(shù)據(jù)必須復(fù)制到的目標(biāo)寄存器應(yīng)該與指令中提到的操作數(shù)大小相同。
示例:MOV A,#030H
其中,累加器加載了30(十六進(jìn)制)。操作數(shù)中的#表示它是一個(gè)數(shù)據(jù)而不是寄存器的地址。立即尋址非常快,因?yàn)橐虞d的數(shù)據(jù)在指令本身中給出。
2、寄存器尋址
在寄存器尋址模式下,八個(gè)寄存器(R0–R7)之一被指定為指令中的操作數(shù)。
在PSW寄存器的幫助下選擇合適的Bank很重要。下面看一個(gè)假設(shè)選擇Bank0的寄存器尋址示例。
示例:MOV A,R5
其中,Bank0的寄存器R5的8位內(nèi)容被移動(dòng)到累加器。
3、直接尋址
在直接尋址模式中,數(shù)據(jù)的地址被指定為指令中的操作數(shù)。使用直接尋址模式,可以訪問任何寄存器或片上變量。這包括通用RAM、SFR、I/O端口、控制寄存器。
示例:MOV A,47H
其中,RAM單元47H中的數(shù)據(jù)被移動(dòng)到累加器。
4、寄存器間接尋址
在間接尋址模式或寄存器間接尋址模式中,操作數(shù)的地址被指定為寄存器的內(nèi)容。下面舉個(gè)列子:
示例:MOV A,@R1
@符號(hào)表示尋址方式是間接的。例如,如果R1的內(nèi)容為56H,則操作數(shù)位于內(nèi)部RAM位置 56H。如果RAM單元56H的內(nèi)容是24H,則將24H移入累加器。
在間接尋址模式中只允許使用R0和R1。這些間接尋址模式的寄存器稱為指針寄存器。
5、索引尋址模式
在索引尋址模式下,操作數(shù)的有效地址是基址寄存器和偏移寄存器的總和。基址寄存器可以是數(shù)據(jù)指針 (DPTR) 或程序計(jì)數(shù)器 (PC),而偏移寄存器是累加器 (A)。
在索引尋址模式下,只能使用MOVC和JMP指令。從查找表中檢索數(shù)據(jù)時(shí),索引尋址模式很有用。
示例:MOVC A,@A+DPTR
這里,操作數(shù)的地址是DPTR和Accumulator的內(nèi)容之和。
注意:另外有些朋友可能還會(huì)添加了一些其它尋址模式,例如絕對(duì)尋址模式、相對(duì)尋址模式和長(zhǎng)尋址模式。
指令集中的指令類型
在看指令類型之前,可以先看看805單片機(jī)指令的結(jié)構(gòu)。一條8051指令由一個(gè)操作碼(操作代碼的簡(jiǎn)稱)和后跟零字節(jié)、一字節(jié)或兩字節(jié)大小的操作數(shù)組成。
指令的操作碼部分包含助記符,它指定要執(zhí)行的操作類型。指令的所有助記符或操作碼部分都是一個(gè)字節(jié)大小。至于指令的操作數(shù)部分,它定義了指令正在處理的數(shù)據(jù)。操作數(shù)可以是以下任何一種:
無操作數(shù)
數(shù)據(jù)值
輸入輸出端口
內(nèi)存位置
中央處理器寄存器
其實(shí),可以有多個(gè)操作數(shù),指令格式如下:
助記符、目的操作數(shù)、源操作數(shù)
一條簡(jiǎn)單的指令只包含操作碼。其他指令可以包括一個(gè)或多個(gè)操作數(shù)。指令可以是僅包含操作碼的單字節(jié)指令,也可以是雙字節(jié)指令,其中第二個(gè)字節(jié)是操作數(shù),也可以是三字節(jié)指令,其中操作數(shù)構(gòu)成第二個(gè)和第三個(gè)字節(jié)。
根據(jù)它們執(zhí)行的操作,8051微控制器指令集中的所有指令分為五組,分別是:
數(shù)據(jù)傳輸指令
算術(shù)指令
邏輯指令
布爾或位操作指令
程序分支指令
1、數(shù)據(jù)傳輸指令
數(shù)據(jù)傳輸指令與寄存器或外部程序存儲(chǔ)器或外部數(shù)據(jù)存儲(chǔ)器之間的數(shù)據(jù)傳輸相關(guān)。下面給出了與數(shù)據(jù)傳輸指令相關(guān)的助記符。
- MOV
- MOVC
- MOVX
- PUSH
- POP
- XCH
- XCHD
下表列出了所有可能的數(shù)據(jù)傳輸指令以及其他詳細(xì)信息,例如尋址模式、占用的大小和所需的機(jī)器周期數(shù)。
2、算術(shù)指令
使用算術(shù)指令,可以執(zhí)行加法、減法、乘法和除法。算術(shù)指令還包括加一、減一和稱為十進(jìn)制調(diào)整累加器的特殊指令。
與8051單片機(jī)指令集的算術(shù)指令相關(guān)的助記符有:
算術(shù)指令不會(huì)了解數(shù)據(jù)格式,即有符號(hào)、無符號(hào)、ASCII、BCD等。此外,算術(shù)指令執(zhí)行的操作會(huì)影響PSW寄存器中的進(jìn)位、溢出、零等標(biāo)志。
下表中整理了與算術(shù)指令相關(guān)的所有可能的助記符。
3、邏輯指令
邏輯指令執(zhí)行邏輯運(yùn)算,如AND、OR、XOR、NOT、Rotate、Clear和Swap。邏輯指令是按位對(duì)數(shù)據(jù)字節(jié)執(zhí)行的。與邏輯指令相關(guān)的助記符如下:
- ANL
- ORL
- XRL
- CLR
- CPL
- RL
- RLC
- RR
- RRC
- SWAP
下表顯示了邏輯指令的所有可能助記符。
4、布爾或位操作指令
顧名思義,布爾或位操作指令處理位變量。眾所周知,RAM中有一個(gè)特殊的位尋址區(qū)域,一些特殊功能寄存器 (SFR) 也是位尋址的。
布爾或位操作指令對(duì)應(yīng)的助記符為:
- CLR
- SETB
- MOV
- JC
- JNC
- JB
- JNB
- JBC
- ANL
- ORL
- CPL
這些指令可以在位級(jí)別執(zhí)行設(shè)置、清除和/或補(bǔ)碼等。下表中指定了布爾指令的所有可能助記符。
5、程序分支指令
8051微控制器指令集中的最后一組指令是程序分支指令,這些指令控制程序邏輯的流程。程序分支指令的助記符如下。
- LJMP
- AJMP
- SJMP
- JZ
- JNZ
- CJNE
- DJNZ
- NOP
- LCALL
- ACALL
- RET
- RETI
- JMP
除NOP(無操作)外,所有這些指令都會(huì)以某種方式影響程序計(jì)數(shù)器(PC)。其中一些指令在將控制權(quán)轉(zhuǎn)移到程序的其他部分之前具有決策能力。
下表顯示了與程序分支指令相關(guān)的所有助記符。
總結(jié)
以上就是關(guān)于8051微控制器指令集以及尋址模式的相關(guān)內(nèi)容介紹,記住這些指令集是非常有必要的,因?yàn)闉槿魏挝⒖刂破骶帉懗绦虬ㄒ蕴囟樞蛳蛭⒖刂破靼l(fā)出命令,這些命令必須按特定順序執(zhí)行才能執(zhí)行任務(wù)。
評(píng)論
查看更多