ARM指令尋址方式之: 數據處理指令的尋址方式
4.1 數據處理指令的尋址方式
4.1.1 數據處理指令的尋址方式概要
數據處理指令的基本語法格式如下。
opcode> {cond>} {S} Rd>,Rn>,shifter_operand>
其中shifter_operand>有下面11種形式,如表4.1所示。
表4.1 shifter_operand>的尋址方式
語 法 | 尋 址 方 式 | |
1 | #immediate> | 立即數尋址 |
2 | Rm> | 寄存器尋址 |
3 | Rm>, LSL #shift_imm> | 立即數邏輯左移 |
4 | Rm>, LSL Rs> | 寄存器邏輯左移 |
5 | Rm>, LSR #shift_imm> | 立即數邏輯右移 |
6 | Rm>, LSR Rs> | 寄存器邏輯右移 |
7 | Rm>, ASR #shift_imm> | 立即數算術右移 |
8 | Rm>, ASR Rs> | 寄存器算術右移 |
9 | Rm>, ROR #shift_imm> | 立即數循環右移 |
10 | Rm>, ROR Rs> | 寄存器循環右移 |
11 | Rm>, RRX | 寄存器擴展循環右移 |
數據處理指令的尋址方式根據shifter_operand>的不同,相應的分為11種。
4.1.2 指令解碼
圖4.1顯示了數據處理指令不同尋址方式下的解碼格式。
圖4.1 數據操作指令編碼格式
編碼格式中各域含義如下。
· opcode>:確定具體指令。
· S:標識指令是否影響程序狀態寄存器CPSR條件標志。
· Rd:指令操作的目的寄存器。
· Rn:指令第一源操作數。
· bit[11∶0]:移位操作,詳見本章移位操作一節。
· bit[25]:被用來區分是立即數移位操作還是寄存器移位操作。
如果指令編碼出現下面情況:bit[25] = 0并且bit[4] = 1并且bit[7] = 1,則指令并非數據處理指令,它可能是Load/Store指令或算術指令。
4.1.3 移位操作
數據處理指令是在算術邏輯單元ALU中完成。ARM處理器一個顯著特征就是可以在操作數進入ALU之前,對操作數進行指定位數的左移或右移操作。這種功能明顯增強了數據處理操作的靈活性。
移位操作可能產生進位,更新程序狀態寄存器CPSR的進位標志C。移位操作有下面3種基本方式。
1.立即數方式
沒有任何一條ARM指令可以包含一個32位的立即數,數據處理指令編碼格式中,第二個操作數有12位。指令的編碼格式如圖4.1所示。
指令中的立即數是由一個8 bit的常數移動4 bit偶數位(0,2,4,…,26,28,30)得到的。所以,每一條指令都包含一個8 bit的常數X和移位值Y,得到的立即數=X循環右移(2×Y)。
注意 | 8位立即數一定要移偶數位。 |
下面列舉了一些有效的立即數。
0xFF、0x104、0xFF0、0x FF00、0x FF000、0x FF000000、0x F000000F
下面是一些無效的立即數。
0x101、0x102、0x FF1、0x FF04、0x FF003、0x FFFFFFFF、0x F000001F
下面是一些應用立即數的指令。
MOV r0,#0 ;送0到r0
ADD r3,r3,#1 ;r3的值加1
CMP r7,#1000 ;r7的值和1000比較
BIC r9,r8,#0x FF00 ;將r8中8~15位清零,結果保存在r9中
評論