數據處理運算元概述

“數據處理運算元”定址模式分為 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”的編碼:

  

編碼 - 定址模式 1、32 位立即數

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

  

編碼 - 定址模式 1、立即數移位

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

 

編碼 - 定址模式 1、暫存器移位

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

擴充套件循環右移

 

移位的位數可以指定為立即數或暫存器值。

移位的暫存器運算元

MOV R4, R2, LSL #3

此指令將 R2 移動三位,並將值寫入 R4

 

更多資訊

請參閱彙編器指令