Armv7-M Interworking机制

这篇具有很好参考价值的文章主要介绍了Armv7-M Interworking机制。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1 前言

        由于历史原因(从ARM7TDMI开始), ARM处理器一直支持两种形式上相对独立的指令集, 它们分别是:

         32位的ARM指令集,对应处理器状态:

        ARM状态,在32位存储器上效率较高,能够同时访问32位的数据和地址空间,具有更好的代码效率和执行速度;
         16位的Thumb指令集,对应处理器状态:

        Thumb状态,指令长度短,代码密度高(目标码体积小),在16位存储器(数据总线为16位的存储系统)上效率较高,内存占用小,有利于降低功耗,所以常用于嵌入式系统中对代码体积功耗敏感的场景。        

 2 Interworking

        两种指令集各有有点,可以取长补短,混合编程(Interworking),ARM将之定义为处理器的两种执行状态(Execution states)。当对性能要求较高时,可以采用ARM状态;当对代码密度和功耗要求较高时,则可以采用Thumb状态。

       具体来说,Thumb指令是ARM指令的一个受限子集,在Thumb状态下,不能直接访问所有的处理器寄存器,只有r0~r7(low registers)是可以被任意访问的,在Thumb状态下使用低组寄存器和在ARM状态下使用没有区别。寄存器r8~r12(high registers)只能通过MOV、ADD或CMP指令访问。CMP指令和所有操作r0~r7的数据处理指令都会影响CPSR中的条件标志位。一些Thumb指令还使用到了程序计数器PC(r15)链接地址寄存器LR(r14)堆栈指针寄存器SP(r13)。在Thumb状态下,读取r15寄存器时,bit[0]值为0,bit[31∶1]包含了PC的值。当对r15进行写入时,bit[0]被忽略,bit[31∶1]:0被设置成PC的值。

       为此,ARM处理器支持从ARM状态到Thumb状态相互无缝转换的能力,即可以根据需要动态切换指令集。在ARM状态下,通过执行指令“BX Rm”(Rm为一个寄存器地址),处理器可以跳转到Thumb状态的指令集中;在Thumb状态下,也可以通过执行指令“BX Rm”跳转回ARM状态,像BX这种可以用来切换状态的指令被称为interworking instructions。

        直至Thumb-2指令集的出现,它通过在原Thumb的基础上引入很多32位指令发展而来(Thumb是Thumb-2的子集),同时支持16位和32位的指令,集两种指令集之大成,再也不用考虑在Thumb和ARM两种状态之间来回切换了。

        由于ARMV7只支持Thumb-2指令集,interworking instructions使用时必须严格标识执行状态为Thumb状态(EPSR.T == 1),否则就会错误异常。具体来说,Thumb状态的标志位会存储在interworking address的bit[0]上,而interworking address在以下指令中使用:

        ① BXBLX(BLX and BX interwork on the value in Rm, BX Rm);

        ② POP interworks on the value loaded to the PC,例如:

push {r0-r3, lr}         ;子程序入口

pop {r0-r3, pc}         ;子程序出口

        ③  使用LDRLDM(此两条指令皆为32位指令)加载PC(an LDR or LDM that loads the PC),例如:

LDR PC, [Rn] ;转移地址存储在 Rn 所指向的存储器中;

        当PC被以上指令更新时,bit[0]会被忽略,[31:1]:’0’会被用于写入PC;随后,就会发生分支转移;

        而bit[0]也不是完全没意义,ARMV7下bit[0]必须为1,它会被用来更新EPSR.T,一旦EPSR.T == 0的情况出现,就会导致NVSTATE UsageFault exception(用法错误异常)。文章来源地址https://www.toymoban.com/news/detail-851297.html

到了这里,关于Armv7-M Interworking机制的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【ARM Cortex-M 系列 3 番外篇 -- ARMv6, ARMv7, ARMv8, ARMv9 架构差异及精简指令集 与 复杂指令集 介绍】

    上篇文章:ARM Cortex-M 系列 2.1 – RT-Thread Cortex-M7 异常处理及 hardfault 处理分析 ARM架构是一种处理器架构,全称为高级精简指令集计算机(Advanced RISC Machine)。它是英国ARM公司设计的一种精简指令集( RISC )处理器架构,和复杂指令集( CISC )处理器架构相对。 CISC 与 RISC 差异

    2024年02月08日
    浏览(34)
  • 树莓派(armv7l,arm32)buster配置Python虚拟环境、安装PyQt5、安装PySide2、ui和rc文件导出为py文件

    要从头设置好一台可用于开发的树莓派,可以参考树莓派 4B 无屏幕,连接WiFi、SSH、VNC,系统换源、pip换源,安装中文输入法 树莓派(或者说arm平台)使用Python虚拟环境的正确方式是使用 pipenv ,官网教程贴在这里pipenv-PyPi,建议先看懂,再进行树莓派的Python相关开发 PyQt5或者

    2024年01月20日
    浏览(35)
  • 从ARM V7汇编层分析 if else和swith 语句效率

            if else和swith case是两种常用的分支选择结构,从C语言的角度来看,代码是顺序执行的,很难判断两者的效率孰高孰低。可以确定的是,swith语句只能处理整形变量,而if else语句可以处理更复杂的条件分支。当条件变量为单一的整形值的判断时,两者是可以互相替代的

    2024年03月22日
    浏览(25)
  • Arm机密计算架构技术(Armv9 CCA) 白皮书

    快速链接: . 👉👉👉 个人博客笔记导读目录(全部) 👈👈👈 付费专栏-付费课程 【购买须知】: 【精选】ARMv8/ARMv9架构入门到精通-[目录] 👈👈👈 联系方式-加入交流群 ---- 联系方式-加入交流群 1. 概述 在本篇文章中,我们将介绍机密计算(Confidential Computing)在现代计算平台

    2024年02月07日
    浏览(38)
  • 【ARM Cache 系列文章 9 番外篇 -- ARMv9 Core 介绍】

    请阅读 【ARM Cache 系列文章专栏导读】 2021年5月Arm公布了其最新3款CPU和3款GPU核心设计,三款新 CPU 分别是旗舰核心 Cortex-X2 、高性能核心 Cortex-A710 、高能效核心 Cortex-A510 CPU,三款新GPU核心则覆盖高中端和入门级。 这是继2021年3月推出重要的创新——全新64位指令集Armv9、2021年

    2024年02月11日
    浏览(37)
  • 【ARM Cache 系列文章 9 番外篇 -- ARMv9 系列 Core 介绍】

    请阅读 【ARM Cache 系列文章专栏导读】 2021年5月Arm公布了其最新3款CPU和3款GPU核心设计,三款新 CPU 分别是旗舰核心 Cortex-X2 、高性能核心 Cortex-A710 、高能效核心 Cortex-A510 CPU,三款新GPU核心则覆盖高中端和入门级。 这是继2021年3月推出重要的创新——全新64位指令集Armv9、2021年

    2024年02月13日
    浏览(28)
  • 【ARM架构】ARMv8-A 系统中的安全架构概述

    一个安全或可信的操作系统保护着系统中敏感的信息,例如,可以保护用户存储的密码,信用卡等认证信息免受攻击。 安全由以下原则定义: 保密性:保护设备上的敏感信息,防止未经授权的访问。有以下几种方法可以做到,比如密码和加密密钥。 完整性:使用公钥来保护

    2024年02月21日
    浏览(37)
  • [笔记]ARMv7/ARMv8 交叉编译器下载

    开发 Cortex-A7、Cortex-A72 或其他 ARM 架构 profile 芯片时,经常需要下载对应架构的交叉编译器,所以写这篇笔记,用于记录一下交叉编译器下载流程,免得搞忘。 编译环境:ubuntu 虚拟机 下载地址 我们可以从 ARM 官网的 Arm Developer下载交叉编译器,这个网站也包含几乎所有的 A

    2024年02月02日
    浏览(38)
  • 汇编实现1-100累加(ARMv7)

    代码 运行效果

    2024年02月16日
    浏览(32)
  • ARMV7架构知识点记录

    ​ ARM会定期发布该架构的新版本。它们会添加新功能或对现有行为进行更改。此类更改几乎总是向后兼容的,这意味着在旧版本的体系结构上运行的用户代码将继续在新版本上正确运行。当然,为了利用新特性而编写的代码无法在缺乏这些特性的旧处理器上运行。在体系结构

    2024年02月20日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包