“多重載入與儲存”定址模式分成 4 個子模式。載入指令從記憶體載入 reg 指定的部分、甚至是全部通用暫存器。儲存指令將 reg 指定的部分、甚至是全部通用暫存器儲存到記憶體。此定址模式產生地址是有順序的;因此,reg 指定的暫存器按照升序從自低到最的記憶體地址進行載入。此定址模式的一般語法在後續部分提供。
LDM|STM [condition] addr_mode basereg[!], reg {,reg}
其中:
condition |
16 個條件之一。請參閱條件程式碼狀態。 |
basereg |
addr_mode 使用的基址暫存器。 |
! |
設定 W 位 (21)。 |
reg |
要載入的有效暫存器。 |
addr_mode 是以下 4 種子模式之一:
子模式 |
說明 |
---|---|
IA |
之後遞增。 |
IB |
之前遞增。 |
DA |
之後遞減。 |
DB |
之前遞減。 |
下表顯示此定址模式的編碼:
31 |
|
28 |
27 |
26 |
25 |
24 |
23 |
22 |
21 |
20 |
19 |
|
16 |
15 |
|
0 |
condition |
1 |
0 |
0 |
P |
U |
S |
W |
L |
basereg |
reglist |
其中:
位 [24] |
是 P 位。請參閱下文。 |
位 [23] |
是 U 位。 |
位 [22] |
是 S 位。 |
位 [21] |
是 W 位。 |
位 [20] |
是 L 位。 |
位 [15:0] |
reglist 存在一個位專用於每個暫存器:位[0] 表示 R0,位[15] 表示 R15 ( PC )。至少應設定一個位。 |
P 位(位 [24])的含義取決於 U 位的設定:
|
U==0 |
U==1 |
P==0 |
basereg 中包含的地址超出範圍頂部一個字。 |
basereg 中包含的地址低於範圍底部一個字。 |
P==1 |
basereg 中包含的地址在範圍底部訪問。 |
basereg 中包含的地址在範圍頂部 (U == 1) 訪問。 |
對於指令塊傳輸,IA、IB、DA 及 DB 定址模式最為有用,特別是“多重載入與儲存”指令使用定址模式時,數據載入與儲存使用同樣的方式。
“多重載入與儲存”指令用於訪問堆疊時,彈出與壓入操作按照相反的方向調整堆疊,此時便需要這些不同的定址模式。
以下是提供的堆疊操作替代性語法:
堆疊 |
語法 |
說明 |
---|---|---|
空白升序 |
EA |
堆疊指針指向第一個未使用的位置,並向記憶體位置增加的方向移動。 |
完全升序 |
FA |
堆疊指針指向使用的上一個位置,並向記憶體位置增加的方向移動。 |
空白降序 |
ED |
堆疊指針指向未使用的第一個位置,並向記憶體位置減小的方向移動。 |
完全降序 |
FD |
堆疊指針指向使用的上一個位置,並向記憶體位置減小的方向移動。 |