MSR[condition] CPSR_bit, #value
MSR[condition] CPSR_bit, source
MSR[condition] SPSR_bit, #value
MSR[condition] SPSR_bit, source
其中:
condition |
16 個條件之一。請參閱條件程式碼狀態。 |
bit |
有效的掩碼位: |
value |
8 位立即數 |
source |
源暫存器 |
MSR 指令將 value 或是 source 中包含的值移動到 CPSR 或 SPSR。
MSR 指令可用於更新處理器模式、條件程式碼標誌或啟用中斷。要選擇 CPSR,位 [22] 需要設定為 0。要選擇 SPSR,位 [22] 需要設定為 1。
condition 必須是有效值;否則將指令當作 NOP。
N |
Z |
C |
V |
Q |
S |
I |
F |
T |
TM |
TM |
TM |
TM |
|
|
|
|
|
31 |
|
28 |
27 |
26 |
25 |
24 |
23 |
22 |
21 |
20 |
19 |
|
16 |
15 |
|
12 |
11 |
|
8 |
7 |
|
0 |
condition |
0 |
0 |
1 |
1 |
0 |
R |
1 |
0 |
bitmask |
SBO |
rotate_ value |
value |
31 |
|
28 |
27 |
26 |
25 |
24 |
23 |
22 |
21 |
20 |
19 |
|
16 |
15 |
|
12 |
11 |
|
8 |
7 |
6 |
5 |
4 |
3 |
|
0 |
condition |
0 |
0 |
0 |
1 |
0 |
R |
1 |
0 |
bitmask |
SBO |
SBZ |
0 |
0 |
0 |
0 |
source |
1 ;@.text
2
3 ;@.globl funcmsr
4
5 ;@.align 0
6
7 ;@ * * * MSR (Adressing Mode 1) * * *
8
9
10 AREA example, CODE, READONLY
11
12 CPSR
13 @ Select CPSR - set bit 22 to 0
14 00000000 E10F1000 MRS R1, CPSR
15 00000004 E2011000 AND R1, R1, #0xFFDFFFFF
16
17 @ Select flag field mask bit
18 00000008 E320F001 MSR CPSR_F, #1
19
20 00000012 E3A02001 MOV R2, #1
21
22 @ Select extension field mask bit
23 00000016 E3811B40 ORR R1, R1, #0x10000
24 00000020 E120F000 MSR CPSR_X, R1
25
26 SPSR
27 @ Select SPSR - set bit 22 to 1
28 00000024 E14F1000 MRS R1, SPSR
29 00000028 E3811980 ORR R1, R1, #0x200000
30
31 @ Select flag field mask bit
32 00000032 E360F001 MSR SPSR_F, #1
33
34 00000036 E3A02001 MOV R2, #1
35
36 @ Select extension field mask bit
37 00000040 E3811B40 ORR R1, R1, #0x10000
38 00000044 E160F000 MSR SPSR_X, R1
39
40 END