英特爾 XScale(R) 技術主題多重載入與儲存概述

“多重載入與儲存”定址模式分成 4 個子模式。載入指令從記憶體載入 reg 指定的部分、甚至是全部通用暫存器。儲存指令將 reg 指定的部分、甚至是全部通用暫存器儲存到記憶體。此定址模式產生地址是有順序的;因此,reg 指定的暫存器按照升序從自低到最的記憶體地址進行載入。此定址模式的一般語法在後續部分提供。

一般語法

LDM|STM [condition] addr_mode basereg[!], reg {,reg}

其中:

 condition

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

 basereg

addr_mode 使用的基址暫存器。

 !

設定 W 位 (21)。

 reg

要載入的有效暫存器。

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

子模式

說明

 IA

之後遞增。
它形成“多重載入與儲存”指令的地址範圍。請參閱多重載入/儲存:之後遞增 (AM 4)。

 IB

之前遞增。
它形成“多重載入與儲存”指令的地址範圍。請參閱多重載入/儲存:之前遞增 (AM 4)

 DA

之後遞減。
它形成“多重載入與儲存”指令的地址範圍。請參閱多重載入/儲存:之後遞減 (AM 4)

 DB

之前遞減。
它形成“多重載入與儲存”指令的地址範圍。請參閱多重載入/儲存:之前遞減 (AM 4)

一般編碼

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

編碼 - 定址模式 4

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 位。
U == 1
表示從 basereg 向上傳輸。
U == 0
表示從 basereg 向下傳輸。

位 [22]

是 S 位。
S 位表示,對於載入 PC 的“載入”指令,CPSR 是從 SPSR 載入的。在特權模式中,它表示,對於不載入 PC 的“載入”指令以及所有的“儲存”指令,傳輸“使用者”模式庫暫存器。

位 [21]

是 W 位。
W 位表示 basereg 進行更新。
U == 1
表示 baseregreglist 中暫存器數量的四倍遞增。
U == 0
表示 baseregreglist 中暫存器數量的四倍遞減。

位 [20]

是 L 位。
L == 1
表示“載入”指令。
L == 0
表示“儲存”指令。

位 [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

堆疊指針指向使用的上一個位置,並向記憶體位置減小的方向移動。

定義協處理器堆疊時,建議使用 EA 或 FD 堆疊型別。對於此型別的堆疊,協處理器數據可以分別使用一條 STCLDC 指令壓入或彈出。ED 與 FA 協處理器堆疊訪問需要使用多指令序列。

更多資訊

請參閱彙編器指令