一、Thumb-2指令分类
二、统一汇编语言
三、16-bit Thumb-2 指令集编码格式
四、32-bit Thumb-2指令集编码格式
五、条件执行
六、未定义及不可预测指令
七、寄存器域编码 0b1111 的用途
八、寄存器域编码 0b1101的用途
九、Cortex-M3 常用的 Thumb-2 指令
1、数据传送指令
2、LOAD/STORE 指令
3、多数据 LOAD/STORE 指令
4、算术四则运算指令
5、逻辑操作指令
6、移位和循环指令
7、符号扩展指令
8、字节调序指令
9、位域处理指令
10、子程序调用和无条件执行指令
11、程序状态寄存器标志位的更新指令
12、指令隔离指令和存储器隔离指令
13、饱和运算指令
14、IF-THEN 指令
15、比较跳转指令
16、SXTB、SXTH、UXTB、UXTH
17、TBB 和TBH指令
十、Thumb-2 指令 与 ARM 体系架构下的指令比较
十一、基于 Cortex-M3 的 Thumb-2 指令集
Cortex-M3 常用的 Thumb-2 指令
1、数据传送指令
处理器的基本功能之一就是数据传送。Cortex-M3 中的数据传送类型包括:
* 两个寄存器间传送数据;
* 寄存器与特殊功能寄存器间传送数据;
* 把一个立即数加载到寄存器。
数据传送指令
--------------------------------------------------------------------------------------------------------------------------------------------
指 令 功能描述
--------------------------------------------------------------------------------------------------------------------------------------------
MOV ,# 将 8 位立即数传送到目标寄存器
--------------------------------------------------------------------------------------------------------------------------------------------
MOV , 将低寄存器值传送给低目标寄存器
--------------------------------------------------------------------------------------------------------------------------------------------
MOV , 将高或低寄存器值传送给高或低目标寄存器
--------------------------------------------------------------------------------------------------------------------------------------------
MVN , 将寄存器值取反后传送给目标寄存器
--------------------------------------------------------------------------------------------------------------------------------------------
MOV{s}.W ,# 将12位立即数传送到目标寄存器中
--------------------------------------------------------------------------------------------------------------------------------------------
MOV{s}.W ,{,} 将移位后的寄存器值传送到寄存器中
--------------------------------------------------------------------------------------------------------------------------------------------
MOVT .W ,# 将16位立即数传送到寄存器的高半字【31:16】中
--------------------------------------------------------------------------------------------------------------------------------------------
MOVW.W ,# 将16位立即数传送到寄存器的低半字节【15:0】中
并将高半字节【31:16】清零
--------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------
1)MOV 指令
例: MOV R8 ,R3 ;把 R3 的数据传送给 R8
MVN R8 ,R3 ;把 R3 的数据取反后再传送给 R8
2)MRS 和 MSR 指令
这两条指令用于特权级别下访问特殊功能寄存器,APSR除外。指令语法如下:
MRS , ;加载特殊功能寄存器值到Rn
MSR , ;存储Rn 的值到特殊功能寄存器
其中,SReg 可以是表2-69中的一个
MRS/MSR可以使用的特殊功能寄存器
-------------------------------------------------------------------------------------------------------------------------------
符号 功能
-------------------------------------------------------------------------------------------------------------------------------
IPSR 当前服务中断号寄存器
EPSR 执行状态寄存器(读回来的总是0)。它里面含有T位,在Cortex-M3中T位必须是1
APSR 上条指令结果的标志
IEPSR IPSR + EPSR
IAPSR IPSR + APSR
EAPSR EPSR + APSR
PSR xPSR = APSR + EPSR +IPSR
MSP 主堆栈指针
PSP 进入堆栈指针
PRIMASK 常规异常屏蔽寄存器
BASEPRI 常规异常的优先级阈值寄存器
BASEPRI_MAX 等同 BASEPRI,但是施加了写的限制,新的优先级比较比旧的高(更小的数)
FAULTMASK Fault 屏蔽寄存器(同时还包含了PRIMASK的功能,因为 Fault 的优先级更高)
CONTROL 控制寄存器(堆栈选择,特权优先级)
-------------------------------------------------------------------------------------------------------------------------------