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 <Rd>,#<immed_8>                                             将 8 位立即数传送到目标寄存器
--------------------------------------------------------------------------------------------------------------------------------------------
MOV <Rd>,<Rn>                                                         将低寄存器值传送给低目标寄存器
--------------------------------------------------------------------------------------------------------------------------------------------
MOV <Rd>,<Rm>                                                        将高或低寄存器值传送给高或低目标寄存器
--------------------------------------------------------------------------------------------------------------------------------------------
MVN <Rd>,<Rm>                                                        将寄存器值取反后传送给目标寄存器
--------------------------------------------------------------------------------------------------------------------------------------------
MOV{s}.W <Rd>,#<modify_constant(immed_12)>     将12位立即数传送到目标寄存器中
--------------------------------------------------------------------------------------------------------------------------------------------
MOV{s}.W <Rd>,<Rm>{,<shift>}                                 将移位后的寄存器值传送到寄存器中    
--------------------------------------------------------------------------------------------------------------------------------------------
MOVT .W <Rd>,#<immed_16>                                   将16位立即数传送到寄存器的高半字【31:16】中
--------------------------------------------------------------------------------------------------------------------------------------------
MOVW.W <Rd>,#<immed_16>                                   将16位立即数传送到寄存器的低半字节【15:0】中
                                                                                     并将高半字节【31:16】清零
--------------------------------------------------------------------------------------------------------------------------------------------
MRS<c> <Rd>,<psr>                                                   将状态传送到寄存器中
--------------------------------------------------------------------------------------------------------------------------------------------
MSR<c> <psr>-<fields>,<Rn>                                     传送到状态寄存器中
--------------------------------------------------------------------------------------------------------------------------------------------
1)MOV 指令
例:          MOV R8 ,R3                    ;把 R3 的数据传送给 R8
                 MVN R8 ,R3                    ;把 R3 的数据取反后再传送给 R8
2)MRS 和 MSR 指令
         这两条指令用于特权级别下访问特殊功能寄存器,APSR除外。指令语法如下:
                             MRS <Rn>, <SReg>              ;加载特殊功能寄存器值到Rn
                             MSR <Sreg>, <Rn>               ;存储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                 控制寄存器(堆栈选择,特权优先级)   
-------------------------------------------------------------------------------------------------------------------------------     
  

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值