載入與儲存協處理器概述

“載入與儲存協處理器”定址模式分成 4 個子模式。它們用於計算載入與儲存協處理器指令的地址。此定址模式的一般語法在後續部分提供。

一般語法

opcode [condition] [L] cpname, cpdest, addr_mode

其中:

 opcode

指定指令操作。

 condition

16 個條件之一。請參閱條件程式碼狀態

 L

指定位 [22]、N 位:
如果 L 設定為 1,則 N 位置為 1,並指定長載入或長儲存。如果 L 未置位,則 N 位是零,並指定短載入或短儲存。如需有關詳細資訊,請參閱 LDC/LDC2 指令STC/STC2 指令

 cpname

協處理器名稱 (p0..p15)

 cpdest

指定目標協處理器暫存器。

 

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

子模式

說明

 [basereg, #+/-value*4]

偏移量選項:
建立地址序列。第一個地址是將 8 位立即數偏移量乘以四後加到基址暫存器,或從中減去。後續的地址由前一個地址遞增四得到。請參閱載入與儲存協處理器:立即數偏移量 (AM 5)

 [basereg #+/-value*4]!

事先變址選項:
建立地址序列。第一個地址是將 8 位立即數偏移量乘以四後加到基址暫存器,或從中減去。如果傳遞了某個條件,則將值寫回基址暫存器。後續的地址由前一個地址遞增四得到。請參閱載入與儲存協處理器:立即數事先變址 (AM 5)

 [basereg], #+/-value*4

事後變址選項:
建立地址序列。如果傳遞某個條件,則第一個地址是將 8 位立即數偏移量乘以四後加到基址暫存器,或從中減去。然後將值寫回基址暫存器。
後續的地址由前一個地址遞增四得到。請參閱載入與儲存協處理器:立即數事後變址 (AM 5)

 [basereg], option

非變址選項:
建立地址序列。第一個地址是基址暫存器 basereg 的值。後續的地址由前一個地址遞增四得到。基址暫存器不更新,因此各個位可以由 option 用於指定其它協處理器選項。請參閱載入與儲存協處理器:非變址 (AM 5)

一般編碼

下表顯示此定址模式的編碼:

  

編碼 - 定址模式 5

31

 

 

28

27

26

25

24

23

22

21

20

19

 

 

16

 condition

 1

 1

 0

 P

 U

 N

 W

 L

 basereg

15

 

 

12

11

 

 

8

7

 

 

 

 

 

 

0

 cpdest

 cpnum

 value

其中:

 P

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

 U

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

 N

此位有依賴於協處理器的含義。建議使用此位區分要傳輸的不同大小的值。

 W

有兩個含義:
P == 0:
如果 W == 0,則執行非變址定址。為此 U 位必須是 U == 1,否則結果未定義或無法預知。
如果 W == 1,則執行事後變址定址。
P == 1:
如果 W == 0,則基址暫存器不更新(偏移量定址)。
如果 W == 1,計算的記憶體地址將寫回基址暫存器(事先變址定址)。

 L

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

 cpnum

協處理器編號

 

W 位的含義取決於 P 的設定:

 

 P==0

 P==1

 W==0

執行非變址定址。為此 U 位必須是 U == 1,否則結果未定義或無法預知。

基址暫存器不更新(偏移量定址)。

 W==1

執行事後變址定址。

計算的記憶體地址寫回基址暫存器(事先變址定址)。