“其它載入與儲存”定址模式分成 6 個子模式。它們用於計算載入與儲存有符號或無符號半字、載入有符號位元組或載入與儲存雙字指令的地址。此定址模式的一般語法在後續部分提供。
LDR|STR [condition] H|SH|SB|D dest, addr_mode
其中:
LDR |
指定“載入暫存器”指令。 |
STR |
指定“儲存暫存器”指令。 |
condition |
16 個條件之一。請參閱條件程式碼狀態。 |
H |
將指令擴充套件到“載入暫存器半字”( LDRH ) 指令或“儲存暫存器半字”( STRH ) 指令。如需有關詳細資訊,請參閱 LDRH 指令或 STRH 指令。 |
SH |
將指令擴充套件到“載入暫存器有符號半字”( LDRSH ) 指令。如需有關詳細資訊,請參閱 LDRSH 指令。 |
SB |
將指令擴充套件到“載入暫存器有符號位元組”( LDRSB ) 指令。如需有關詳細資訊,請參閱 LDRSB 指令。 |
D |
|
dest |
指定目標暫存器。 |
addr_mode 是以下 6 種子模式之一:
子模式 |
說明 |
---|---|
[basereg, #+/-value] |
偏移量選項: |
[basereg, +/-indexreg] |
偏移量選項: |
[basereg #+/-value]! |
事先變址選項: |
[basereg, +/-indexreg]! |
事先變址選項: |
[basereg], #+/-value |
事後變址選項: |
[basereg], +/-indexreg |
事後變址選項: |
下表顯示“定址模式 3”的編碼:
31 |
|
|
28 |
27 |
26 |
25 |
24 |
23 |
22 |
21 |
20 |
19 |
|
|
16 |
condition |
0 |
0 |
0 |
P |
U |
1 |
W |
L |
basereg |
15 |
|
|
12 |
11 |
|
|
8 |
7 |
6 |
5 |
4 |
3 |
|
|
0 |
dest |
immH |
1 |
S |
H |
1 |
immL |
31 |
|
|
28 |
27 |
26 |
25 |
24 |
23 |
22 |
21 |
20 |
19 |
|
|
16 |
condition |
0 |
0 |
0 |
P |
U |
0 |
W |
L |
basereg |
15 |
|
|
12 |
11 |
|
|
8 |
7 |
6 |
5 |
4 |
3 |
|
|
0 |
dest |
SBZ |
1 |
S |
H |
1 |
indexreg |
其中:
P |
P == 0 表示事後變址定址。基址暫存器值用作記憶體地址。偏移量應用於基址暫存器的值,並寫回基址暫存器。 |
U |
表示是偏移量加到基址還是從中減去: |
W |
W 的含義取決於 P 的設定: |
L |
表示“載入”或“儲存”: |
S |
表示有符號或無符號半字訪問: |
H |
表示半字訪問或位元組訪問: |
如果 S 與 H 表示無符號位元組(S == 0 且 H == 0),則指令不使用此定址模式。這是一個乘法指令,即 SWP 或 SWPB 指令,或是算術或載入/儲存指令擴充套件區中未分配的指令。
無符號位元組通過指令 LDRB、LDRBT、STRB 及 STRBT 訪問。這些指令使用定址模式 2。如需有關詳細資訊,請參閱“定址模式 2:載入與儲存字或無符號位元組”。