op2, ASR op3
其中:
op2 |
指定包含要移位的值的暫存器。 |
ASR |
指示算術右移。 |
op3 |
指定包含移位值的暫存器。 |
if op3[7:0] == 0 then
addr_mode = op2
shifter_carry_out = C Flag
else if op3[7:0] < 32 then
addr_mode = op2 Arithmetic_Shift_Right op3[7:0]
shifter_carry_out = op2[op3[7:0] - 1]
else /* op3[7:0] >= 32 */
if op2[31] == 0 then
addr_mode = 0
shifter_carry_out = op2[31]
else /*op2[31] == 1 */
addr_mode = 0xFFFFFFFF
shifter_carry_out = op2[31]
此數據處理運算元提供算術右移暫存器的有符號值(除以 2 的可變次冪)。
此指令運算元代表算術右移暫存器 op2 的值,移位量等於暫存器 op3 最低有效位元組中的值。在騰出的位中,將插入 op2 ( op2 [31] ) 的符號位。最後移出的位是移位器的進位。如果移位量超過 32,則此位是 op2 的符號位。如果移位量等於 0,則進位是 C 標誌。
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 |
1 |
0 |
1 |
op2 |
如果 R15 指定為暫存器 dest、op3、op2 或 op1,則結果將會無法預知!