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