
嵌入式系統 - 編址模式
編址模式是指訪問給定記憶體位置的方式。執行此指令有五種不同的方式或五種編址模式,如下所示:
- 立即定址模式
- 直接定址模式
- 暫存器直接定址模式
- 暫存器間接定址模式
- 索引定址模式
立即定址模式
讓我們從一個例子開始。
MOV A, #6AH
一般來說,我們可以寫成:
MOV A, #data
它被稱為立即,因為 8 位資料立即傳輸到累加器(目標運算元)。
下圖描述了上述指令及其執行過程。操作碼 74H 儲存在地址 0202。資料 6AH 儲存在程式儲存器地址 0203。讀取操作碼 74H 後,程式儲存器下一個地址的資料被傳輸到累加器 A(E0H 是累加器的地址)。由於指令為 2 位元組並在一個週期內執行,因此程式計數器將增加 2 並指向程式儲存器的 0204。

注意 - 6AH 前面的 '#' 符號表示運算元是資料(8 位)。如果沒有 '#',十六進位制數將被視為地址。
直接定址模式
這是另一種定址運算元的方式。這裡,資料的地址(源資料)作為運算元給出。讓我們舉個例子。
MOV A, 04H
暫存器組#0(第 4 個暫存器)的地址為 04H。當執行 MOV 指令時,儲存在暫存器 04H 中的資料被移動到累加器。由於暫存器 04H 儲存資料 1FH,因此 1FH 被移動到累加器。
注意 - 與立即定址模式不同,我們在直接定址模式中沒有使用 '#'。如果我們使用了 '#',則資料值 04H 將被傳輸到累加器,而不是 1FH。
現在,讓我們看一下下面的圖示。它顯示了指令如何執行。

如上圖所示,這是一個 2 位元組指令,需要 1 個週期才能完成。PC 將增加 2 並指向 0204。MOV A,address 指令的操作碼為 E5H。當執行地址 0202 處的指令(E5H)時,累加器被啟用並準備接收資料。然後 PC 轉到下一個地址 0203 並查詢地址 04H 的位置,源資料(要傳輸到累加器)位於該位置。在 04H 處,控制單元找到資料 1F 並將其傳輸到累加器,因此執行完成。
暫存器直接定址模式
在這種定址模式下,我們直接使用暫存器名稱(作為源運算元)。讓我們嘗試透過示例來理解。
MOV A, R4
一次,暫存器可以取值從 R0 到 R7。有 32 個這樣的暫存器。為了僅使用 8 個變數來定址暫存器而使用 32 個暫存器,使用了暫存器組。有 4 個暫存器組,命名為 0 到 3。每個組包含 8 個暫存器,命名為 R0 到 R7。
一次只能選擇一個暫存器組。暫存器組的選擇可以透過名為處理器狀態字(PSW)的特殊功能暫存器(SFR)實現。PSW 是一個 8 位 SFR,其中每個位都可以根據需要進行程式設計。位從 PSW.0 到 PSW.7 指定。PSW.3 和 PSW.4 用於選擇暫存器組。
現在,讓我們看一下下面的圖示,以清楚地瞭解其工作原理。

操作碼 EC 用於 MOV A,R4。操作碼儲存在地址 0202,當它被執行時,控制直接轉到相應暫存器組的 R4(在 PSW 中選擇)。如果選擇了暫存器組#0,則暫存器組#0 的 R4 中的資料將被移動到累加器。這裡 2F 儲存在 04H。04H 表示暫存器組#0 的 R4 的地址。
資料(2F)移動以粗體突出顯示。2F 從資料記憶體位置 0C H 傳輸到累加器,並顯示為虛線。0CH 是暫存器組#1 的暫存器 4(R4)的地址位置。上述指令為 1 位元組,需要 1 個週期才能完成執行。這意味著您可以透過使用暫存器直接定址模式來節省程式記憶體。
暫存器間接定址模式
在這種定址模式下,資料的地址儲存在暫存器中作為運算元。
MOV A, @R0
這裡 R0 內的值被視為地址,該地址儲存要傳輸到累加器的資料。例如:如果 R0 的值為 20H,並且地址 20H 處儲存了資料 2FH,則執行此指令後,值 2FH 將被傳輸到累加器。請參見下圖。

因此,MOV A,@R0 的操作碼為 E6H。假設選擇了暫存器組#0,則暫存器組#0 的 R0 儲存資料 20H。程式控制移動到 20H,在那裡它找到資料 2FH 並將其傳輸到累加器。這是一個 1 位元組指令,程式計數器增加 1 並移動到程式儲存器的 0203。
注意 - 只有 R0 和 R1 才能構成暫存器間接定址指令。換句話說,程式設計師可以使用 @R0 或 @R1 建立指令。所有暫存器組都允許。
索引定址模式
我們將舉兩個例子來理解索引定址模式的概念。請檢視以下指令:
MOVC A,@A+DPTR
和
MOVC A,@A+PC
其中 DPTR 是資料指標,PC 是程式計數器(兩者都是 16 位暫存器)。考慮第一個示例。
MOVC A, @A+DPTR
源運算元為 @A+DPTR。它包含來自此位置的源資料。這裡我們將 DPTR 的內容與累加器當前內容相加。此加法將提供一個新地址,該地址是源資料的地址。然後將此地址指向的資料傳輸到累加器。

操作碼為 93H。DPTR 的值為 01FE,其中 01 位於 DPH(高 8 位),FE 位於 DPL(低 8 位)。累加器的值為 02H。然後執行 16 位加法,01FE H+02H 的結果為 0200 H。地址 0200H 處的資料將被傳輸到累加器。累加器中以前的值(02H)將被來自 0200H 的新資料替換。累加器中的新資料在圖示中突出顯示。
這是一個 1 位元組指令,需要 2 個週期才能執行,並且與以前的指令(每個指令都是 1 個週期)相比,此指令所需的執行時間較長。
另一個示例MOVC A,@A+PC的工作方式與上述示例相同。這裡不是將 DPTR 與累加器相加,而是將程式計數器(PC)中的資料與累加器相加以獲得目標地址。