“數據處理運算元”定址模式分為 11 個子模式。它們用於計算數據處理指令中的移位器運算元。此定址模式的一般語法在後續部分提供。
opcode [condition] [S] dest, op1, addr_mode
其中:
opcode |
指定指令的操作。 |
condition |
16 個條件之一。請參閱條件程式碼狀態。 |
S |
更新條件程式碼標誌(位 20) |
dest |
指定目標暫存器。 |
op1 |
指定包含第一個運算元的暫存器。 |
addr_mode 是以下 11 種子模式之一:
子模式 |
說明 |
---|---|
# imm |
給數據處理指令提供常數運算元。請參閱數據處理運算元:立即數 (AM 1)。 |
op2 |
提供暫存器值。請參閱數據處理運算元:暫存器 (AM 1)。 |
op2 , ASR # sh_imm |
提供暫存器值,按 sh_imm 算術右移。請參閱數據處理運算元:按立即數算術右移 (AM 1)。 |
op2 , ASR op3 |
提供暫存器值,按暫存器 op3 中的值算術右移。請參閱數據處理運算元:按暫存器算術右移 (AM 1)。 |
op2 , LSL # sh_imm |
提供暫存器值,按 sh_imm 邏輯左移。請參閱數據處理運算元:按立即數邏輯左移 (AM 1)。 |
op2 , LSL op3 |
提供暫存器值,按暫存器 op3 中的值邏輯左移。請參閱數據處理運算元:按暫存器邏輯左移 (AM 1)。 |
op2 , LSR # sh_imm |
提供暫存器值,按 sh_imm 邏輯右移。請參閱數據處理運算元:按立即數邏輯右移 (AM 1)。 |
op2 , LSR op3 |
提供暫存器值,按暫存器 op3 中的值邏輯右移。請參閱數據處理運算元:按暫存器邏輯右移 (AM 1)。 |
op2 , ROR # sh_imm |
提供暫存器值,按 sh_imm 循環移位。請參閱數據處理運算元:按立即數循環右移 (AM 1)。 |
op2 , ROR op3 |
提供暫存器值,按暫存器 op3 中的值循環移位。請參閱數據處理運算元:按暫存器循環右移 (AM 1)。 |
op2 , RRX |
提供暫存器值,循環移動一位。請參閱數據處理運算元:擴充套件循環右移 (AM 1)。 |
下表顯示“定址模式 1”的編碼:
31 |
|
|
28 |
27 |
26 |
25 |
24 |
|
|
21 |
20 |
19 |
|
|
16 |
condition |
0 |
0 |
1 |
opcode |
S |
op1 |
15 |
|
|
12 |
11 |
|
|
8 |
7 |
|
|
|
|
|
|
0 |
dest |
rt_imm |
imm_8 |
31 |
|
|
28 |
27 |
26 |
25 |
24 |
|
|
21 |
20 |
19 |
|
|
16 |
condition |
0 |
0 |
0 |
opcode |
S |
op1 |
15 |
|
|
12 |
11 |
|
|
|
7 |
6 |
5 |
4 |
3 |
|
|
0 |
dest |
sh_imm |
shift |
0 |
op2 |
31 |
|
|
28 |
27 |
26 |
25 |
24 |
|
|
21 |
20 |
19 |
|
|
16 |
condition |
0 |
0 |
0 |
opcode |
S |
op1 |
15 |
|
|
12 |
11 |
|
|
8 |
7 |
6 |
5 |
4 |
3 |
|
|
0 |
dest |
op3 |
0 |
shift |
1 |
op2 |
其中:
位 [11:0] |
包含移位器運算元。如需有關詳細資訊,請參閱“移位器運算元”。 |
位 [25] |
是 I 位。它用於區分立即數移動器運算元和基於暫存器的移位器運算元。 |
bit [25] |
== |
0 |
bit [4] |
== |
1 |
bit [7] |
== |
1 |
移位器運算元是移位器產生的。移位器產生進位,由某些指令寫入進位標誌。第一個源暫存器 op1 使用按立即數左移的形式暫存器,立即數設定為 0。
移位器運算元可以是以下三種基本格式之一:
這些格式將在後續部分介紹。
立即數運算元值是按偶數位循環移位 8 位常數產生的。因此,每個指令包含一個 8 位常數,以及應用於該常數的 4 位循環移位。
下面是一些有效的常數:
0xFF, 0x14, 0xFF0, 0xFF00, 0xFF000, 0xFF000000, 0xF000000F
下面是一些無效的常數:
0x101, 0x102, 0xFF1, 0xFF003, 0xFFFFFFF, 0xF000001F
ADD R2, R2, #FF
此指令將 255 加到暫存器 R2 的值上。
暫存器運算元值是暫存器值。它直接用作數據處理指令的運算元。
ADD R2, R1, R0
此指令將 R0 的值加到 R1 上。結果儲存到 R2。
移位的暫存器運算元值是暫存器值,在用作數據處理指令的運算元之前,它進行過移位或循環移位。移位有五種型別:
ASR |
算術右移 |
LSL |
邏輯左移 |
LSR |
邏輯右移 |
ROR |
循環右移 |
RRX |
擴充套件循環右移 |
移位的位數可以指定為立即數或暫存器值。