文章目录
- 1 Cortex-M3内核的指令系统
- 1.1 指令系统简介
- 1.2 数据传送指令
- 1.3 中断开关指令
- 1.4 条件跳转指令
- 1.5 运算指令
1 Cortex-M3内核的指令系统
1.1 指令系统简介
指令系统简介:
- Cortex-M3使用的是Thumb-2指令集,长度可为16位或者32位。指令可以带后缀,如有条件的执行。示例:
CBZ R0, label
,如果R0为0,则跳转;否则什么都不做。
典型写法:
指令分类:
- 数据传送指令。
- 数据处理指令。
- 子程序调用及无条件跳转指令。
- 标志位与条件转移指令。
- 饱和运算指令。
- 其它指令。
1.2 数据传送指令
存储器访问:
-
LDR/LDRB Rd, =LABEL
,加载符合LABEL对应的地址,存储到Rd中。 -
LDR/LDRB Rd, [Rs]
,从Rs寄存器取出地址,读取相应的32位/8位数据,存储到Rd寄存器。 -
STR/STRB Rd, [Rs]
,从Rs寄存器中取出地址,将Rd中的32位/8位数据存储到相应的地址处。
批量存储器访问:
-
LDMIA, Rd!, {Rn, ... , Rm}
,从Rd处连续多次递增地址读取32位数据,存储到后面指令的寄存器列表。 -
STMDB, Rd!, {Rn, ... , Rm}
,从Rd处连续多次递减地址存储32位数据,数据来自后面的寄存器列表。
IA(Increase After)表示在操作完成后递增地址;DB(Decrease Before)表示在操作开始前递减地址。
!操作结束后,将最终的地址保存到Rd寄存器中。
MRS和MSR:
MRS和MSR用于访问xPSR、PSP、MSP等:
-
MRS Rn, <SReg>
,加载寄存器的值到Rn。 -
MSR <SReg>, Rn
:存储Rn的值到寄存器中。
1.3 中断开关指令
中断开关:
-
CPSID I
:关中断。 -
CPSIE I
:开中断。
1.4 条件跳转指令
无条件跳转:
-
BX Rn
:移到寄存器reg给出的地址,比如BX LR可用于子程序的返回。
比较条件并跳转:
-
CBZ Rn, <label>
:如果Rn的寄存器不为0,则跳转到label对应的指令,否则执行下一条指令。 -
CBNZ Rn, <label>
:如果Rn寄存器值不为0,则跳转到label对应的指令,否则执行下一条指令。
1.5 运算指令
逻辑或操作:
-
ORR Rd, Rn, #imm12
:Rd = Rn | imm12。
参考资料: