arm体系结构与编程_浅谈ARM处理器(二)

这两天写的两篇文章《浅谈ARM处理器》和《浅谈RISC CPU(精简指令集处理器)》,大家比较关注,有读者说能不能再深入一点,今天我就再试着深入的聊一聊。

在前面的文章,我们说到ARM微处理器支持两种指令集,即ARM指令集和THUMB指令集。

今天我们来聊一聊这两种指令集。

3c304df56dd3c3944dc58a7821d4134c.png

ARM处理器的工作状态

两种指令集的更深一步含义,是指ARM处理器会有两种工作状态,即ARM指令集对应的ARM状态,和THUMB指令集对应的THUMB状态。这两种状态,可以通过相应的指令,进行转换。

ARM指令集和THUMB指令集的关系

THUMB指令集是ARM指令集的子集,所有的Thumb指令都有相对应的ARM指令。

Thumb的体系结构还不是很完整,所以不能要求处理器,只支持Thumb代码,却不支持ARM指令集。Thumb代码对通用功能支持较好,对于一些非通用功能,则可以借用ARM指令集。所以应用程序可以混合使用ARM指令和Thumb程序,以达到提升性能和代码密度的目的。同时可以降低功耗、节约成本。

对指令集来讲,用户最关心的是,指令的数量和运行效率,下面我们来做一个比较。

  • THUMB存储空间约为ARM代码的60%~70%。
  • THUMB指令数比ARM代码多约30%~40%。
  • 存储器为32位时,ARM代码比Thumb代码快约40%。
  • 存储器为16位时,Thumb比ARM代码快约40~50%。
  • 使用Thumb代码,存储器的功耗会降低约30%。
a0b622aa801fcd131eadcc8325c71fd8.png

ARM和THUMB工作状态切换方法

ARM指令集和Thumb指令集中,均有切换处理器工作状态的指令(BX),可以在两种工作状态之间相互切换。ARM处理器在初始化(开始)执行代码时,处于ARM状态。

  • 进入Thumb状态

对于“BX Rm”指令,当操作数寄存器的状态位即Rm[0]为1时, 可以采用执行“BX Rm”指令的方法,使微处理器从ARM状态切换到Thumb状态(执行该指令能够将Rm[0]位传送给CPSR[T]位)。

例如:BX Rm指令的Rm[0]值为1,执行其实现ARM处理器从ARM状态切换到Thumb状态(即使得CPSR[T]位置1)。

当处理器处于Thumb状态时发生异常(如IRQ、FIQ、Undef、Abort、SWI等),则异常处理返回时,自动切换到Thumb状态。

  • 切换到ARM状态

对于“BX Rm”指令,当操作数寄存器的状态位即Rm[0]为0时,执行“BX Rm”指令时可以使ARM微处理器从Thumb状态切换到ARM状态。

例如:BX Rm指令的Rm的位[0]值为0,执行其实现ARM处理器从Thumb状态切换到ARM状态(即使得CPSR[T]位置0)。

在处理器进行异常处理时,把PC指针放入异常模式寄存器中,并从异常向量地址开始执行程序,也可以使处理器切换到ARM状态。

adc650fb3d3175e00e1b8c2b4df2b6f4.png

小结

THUMB指令集和ARM指令集相互补充,相互配合的特点,让使用者可以进行更高效,低成本的编程,达到提升性能和代码密度的目的,所以我们很有必要对两种指令集,进行更深入的学习和更细致的比较。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值