其它載入與儲存概述

“其它載入與儲存”定址模式分成 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

將指令擴充套件到 LDRD 指令或 STRD 指令。如需有關詳細資訊,請參閱 LDRD 指令STRD 指令

 dest

指定目標暫存器。

 

addr_mode 是以下 6 種子模式之一:

子模式

說明

 [basereg, #+/-value]

偏移量選項:
將 8 位立即數偏移量的值加到基址暫存器,或從中減去。請參閱其它載入與儲存:立即數偏移量 (AM 3)。

 [basereg, +/-indexreg]

偏移量選項:
將變址暫存器的值加到基址暫存器,或從中減去。請參閱其它載入與儲存:暫存器偏移量 (AM 3)

 [basereg #+/-value]!

事先變址選項:
將 8 位立即數偏移量的值加到基址暫存器,或從中減去。如果傳遞了某個條件,則將值寫回基址暫存器。請參閱其它載入與儲存:立即數事先變址 (AM 3)。

 [basereg, +/-indexreg]!

事先變址選項:
將變址暫存器的值加到基址暫存器,或從中減去。如果傳遞了某個條件,則將值寫回基址暫存器。請參閱其它載入與儲存:暫存器事先變址 (AM 3)。

 [basereg], #+/-value

事後變址選項:
將 8 位立即數偏移量的值加到基址暫存器,或從中減去。然後將值寫回基址暫存器。請參閱其它載入與儲存:立即數事後變址 (AM 3)

 [basereg], +/-indexreg

事後變址選項:
如果傳遞某個條件,則將變址暫存器的值加到基址暫存器,或從中減去。然後將值寫回基址暫存器。請參閱其它載入與儲存:暫存器事後變址 (AM 3)。

一般編碼

下表顯示“定址模式 3”的編碼:

  

編碼 - 定址模式 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

 

編碼 - 定址模式 3、暫存器偏移量/變址

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 表示事後變址定址。基址暫存器值用作記憶體地址。偏移量應用於基址暫存器的值,並寫回基址暫存器。
P == 1
表示偏移量定址或事先變址定址。(這由 W 位確定。)記憶體地址是通過將偏移量應用於基址暫存器值而產生的。

 U

表示是偏移量加到基址還是從中減去:
如果 U == 1,則偏移量加到基址上。
如果 U == 0,則偏移量從基址中減去。

 W

W 的含義取決於 P 的設定:
如果 P == 0,則 W 必須是 0。否則結果將會無法預知。
如果 P == 1
如果 W == 0,則基址暫存器不更新(偏移量定址)。
如果 W == 1,則計算的記憶體地址寫回基址暫存器(事先變址定址)。

 L

表示“載入”或“儲存”:
L==1
表示“載入”。
L == 0
表示“儲存”。

 S

表示有符號或無符號半字訪問:
S == 0
表示無符號半字訪問。
S == 1
表示有符號半字訪問。

 H

表示半字訪問或位元組訪問:
H == 0
表示位元組訪問。
H == 1
表示半字訪問。

無符號位元組

如果 SH 表示無符號位元組(S == 0H == 0),則指令不使用此定址模式。這是一個乘法指令,即 SWPSWPB 指令,或是算術或載入/儲存指令擴充套件區中未分配的指令。

無符號位元組通過指令 LDRBLDRBTSTRBSTRBT 訪問。這些指令使用定址模式 2。如需有關詳細資訊,請參閱“定址模式 2:載入與儲存字或無符號位元組”。

有符號儲存

如果 SL 表示有符號儲存指令(S == 1L == 0),則指令是載入/儲存擴充套件區中未分配的指令。有符號位元組與半字使用指令 STRBSTRH 儲存。