Thumb-2指令系统

一、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】清零
--------------------------------------------------------------------------------------------------------------------------------------------
MRS ,                                                   将状态传送到寄存器中
--------------------------------------------------------------------------------------------------------------------------------------------
MSR -,                                     传送到状态寄存器中
--------------------------------------------------------------------------------------------------------------------------------------------
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                 控制寄存器(堆栈选择,特权优先级)   
-------------------------------------------------------------------------------------------------------------------------------     
  

你可能感兴趣的:(单片机从头学)