8051定址方式
在本節中,我們將瞭解8051微控制器的不同定址方式。在8051中,存在1位元組、2位元組指令,以及極少數的3位元組指令。操作碼長度為8位。由於操作碼是8位資料,因此共有256種可能性。在256種可能性中,實現了255個操作碼。
時鐘頻率為12MHz,因此僅需1 µs即可執行64種指令型別,其餘指令則需2 µs。乘法和除法運算需要4 µs才能執行。
8051共有六種定址方式。
立即定址方式
暫存器定址方式
直接定址方式
暫存器間接定址方式
索引定址方式
隱含定址方式
立即定址方式
在此立即定址方式中,資料直接包含在指令中。資料緊跟在操作碼之後。以下是一些立即定址方式的示例。
MOVA, #0AFH; MOVR3, #45H; MOVDPTR, #FE00H;
在這些指令中,#符號用於表示立即數。在最後一條指令中,使用了DPTR。DPTR代表資料指標。使用它可以指向外部資料儲存器位置。在第一條指令中,立即數為AFH,但在開頭添加了一個0。因此,當資料以A到F開頭時,資料前應加上0。
暫存器定址方式
在暫存器定址方式中,源或目標資料應位於暫存器(R0到R7)中。以下是一些暫存器定址方式的示例。
MOVA, R5; MOVR2, #45H; MOVR0, A;
在8051中,沒有像MOV R5, R7這樣的指令。但是,我們可以使用指令MOV R5, 07H或MOV 05H, R7來獲得相同的結果。但是,這兩條指令只有在選擇的暫存器組為RB0時才有效。要使用其他暫存器組並獲得相同的效果,必須將該暫存器組的起始地址與暫存器編號相加。例如,如果選擇了RB2,並且想要訪問R5,則地址將為(10H + 05H = 15H),因此指令將如下所示:MOV 15H, R7。這裡10H是暫存器組2的起始地址。
直接定址方式
在直接定址方式中,源或目標地址是透過在指令中使用8位資料來指定的。此模式只能使用內部資料儲存器。以下是一些直接定址方式的示例。
MOV80H, R6; MOVR2, 45H; MOVR0, 05H;
第一條指令將暫存器R6的內容傳送到埠P0(埠0的地址為80H)。第二條指令是從45H讀取內容到R2。第三條指令用於將暫存器R5(當選擇暫存器組RB0時)的資料複製到暫存器R5。
暫存器間接定址方式
在此模式下,源或目標地址位於暫存器中。透過使用暫存器間接定址模式,可以訪問內部或外部地址。R0和R1用於8位地址,DPTR用於16位地址,其他暫存器不能用於定址。讓我們看一些此模式的示例。
MOV0E5H, @R0; MOV@R1, 80H
在指令中,@符號用於表示暫存器間接定址。在第一條指令中,它表示使用了R0暫存器。如果R0的內容為40H,則該指令將獲取位於內部RAM的40H位置的資料。在第二條指令中,如果R1的內容為30H,則表示埠P0的內容將儲存在內部RAM的30H位置。
MOVXA, @R1; MOV@DPTR, A;
在這兩條指令中,MOVX中的X表示外部資料儲存器。只能在暫存器間接模式下訪問外部資料儲存器。在第一條指令中,如果R0儲存的是40H,則A將獲得外部RAM位置40H的內容。在第二條指令中,A的內容將被寫入DPTR指向的位置。
索引定址方式
在索引定址方式中,只能從程式儲存器訪問源儲存器。目標運算元始終是暫存器A。以下是一些索引定址方式的示例。
MOVCA, @A+PC; MOVCA, @A+DPTR;
MOVC指令中的C指的是程式碼位元組。對於第一條指令,假設A儲存的是30H。PC值為1125H。程式儲存器位置1155H(30H + 1125H)的內容將被移動到暫存器A。
隱含定址方式
在隱含定址方式中,只有一個運算元。這些型別的指令只能對特定暫存器進行操作。這些型別的指令也稱為暫存器專用指令。以下是一些隱含定址方式的示例。
RLA; SWAPA;
這些是1位元組指令。第一個用於將A暫存器的內容左移。第二個用於交換A中的半位元組。
資料結構
網路
關係資料庫管理系統(RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP