详解ARM几个常见的寄存器

谈思汽车 2024-02-08 11:49

 智能汽车安全新媒体 

大家好,今天来聊聊对于ARM几个特殊寄存器的理解,FP、SP和LR。

01

介绍

  • FP:栈顶指针,指向一个栈帧的顶部,当函数发生跳转时,会记录当时的栈的起始位置。

  • SP:栈指针(也称为栈底指针),指向栈当前的位置,

  • LR:链接寄存器,保存函数返回的地址。

关于gcc就有一个关于stack frame的优化选项,加上该选项则忽略掉FP栈顶指针,(记得高版本默认是不加FP的,gcc4.8以上吧(待确认))

  • -fomit-frame-pointer

停止例程:EUC在接收到停止例程的请求后,停止指定的例程。

Don’t keep the frame pointer in a register for functions that don’t need one. This avoids the instructions to save, set up and restore frame pointers; it also makes an extra register available in many functions. It also makes debugging impossible on some machines.

(大概意思 )不需要栈帧的时候不要加这个编译选项,这可以节省很多指令去保存,传递和恢复,同时也省出一个寄存器可以在函数中做更多事情,也使得在某些机制下更容易去debug













arm cc5编译也有关于FP生成的编译选项,默认是不加的。

  • –use_frame_pointer,

    --no_use_frame_pointer

Sets the frame pointer to the current stack frame. Using the --use_frame_pointer option reserves a register to store the 「frame pointer」. For newer processors that support Thumb-2 technology (ARMv6T2 and later), the reserved register is always R11. (arm v7)如果是arm v8 -a 系列,则是X29来表示。For older processors that do not support Thumb-2 technology, the reserved register is R11 in ARM code and R7 in Thumb code. Default「The default is --no_use_frame_pointer」. That is, register R11 (or register R7 for Thumb code on older processors) is available for use as a general-purpose registe













02

作用

2.1 FP的作用

关于APCS(ARM Procedure Call Standard,ARM 程序调用标准)的说法 

  • 除非子程序没有修改链接寄存器,否则FP都需要记录有效的栈帧位置

  • 其寄存器(r11或者x29)不能被用做一个通用型的寄存器

FP的主要作用就是用来「栈回溯」,找到子程序的调用关系,也成为backtrace,当然一级一级的子程序调用时,FP的记录也在变化,也会一级一级的保存到栈中,最后通过FP的值来反推出一级一级的调用关系。

以ARM CC5 编译器为例,其栈回溯的主要逻辑如下图所示:

通过上图可以看出,main->fun1->fun2,每调用一级的时候,都会将FP、LR以及参数等压栈,而每个FP指向了上一级的栈顶,通过保存关系,可以找到LR,从而找到上一级的调用函数。

具体的流程图就如右图所示,按照这样的方法可以找到backtrace,再比如可以通过stack memory查找调用栈信息,

左图为栈memory 右图为寄存器信息。

上图中:backtrace 第一级是寄存器中的LR,之后就是从栈中进入回溯来找到的。(FP、LR) 1、0x1F7BC 0x40BBAA4 2、0x1F7E4 0x18A3C 3、0x1F7EC 0x18818 4、 0x1F7F4 0x40A4108 5、 0x1F7FC 0x1594 6、 0x184BC 0x40A0015

图中 LR地址都-4 这是因为LR总是保存PC的下一个运行地址,所以找到PC进函数的位置,则需要LR-4可以得到。

图中 最后栈停止回溯,可以看到栈的边界到了0x1f800,所以停止,不然会继续一直进行回溯。

backtrace的C代码如下

2.2 SP的作用

sp 为栈指针,通过push pop 实现对栈存储的访问,栈主要是用来存储局部变量 中间值 等数据,同样和全部变量等存储的区域一样,也是一块memory,没有任何区别,只是使用的方式不一样。

接下来简单介绍一下各个处理器架构的SP指针。

  • CortexM3/4(ARMv7)

  1. CortexM3/4中,「SP分为MSP与PSP」,主栈与线程栈,任何时刻只有一个栈指针有效,通过「CONTROL 寄存器」来选择栈指针。

  2. 程序刚运行时就处在主栈(特权模式),之后可以切到线程栈(非特权模式),之所以设置这样的原因是,一般OS会运行在主栈,而应用程序出在线程栈,应用程序即使出错,也不会影响OS的运行,也不会影响主栈。通过简单的程序无需这样运行,直接在主栈特权模式下面运行就可以。

  3. MSP的初值通过存储器的第一个DWORD中获取。

  4. MSP与PSP 都是32位,低两位均是0.

MSP的初值通过存储器的第一个DWORD中获取。

  • CortexR5(Cortexv7)

  1. Cortex R5系列比较复杂,继承了多种工作模式的特性,大多数模式下都有独立的栈。

  2. 总共七种工作模式,SYS/FIQ/SYS/SVC/ABORT/IRQ/UND 以及USER,前面六种都是特权模式 后面是用户模式也是非特权模式。可以看到基本都有独立的栈寄存器,意味着每个模式下可以设置独立的栈空间

  • CortexA53 (ARMv8 -A系列)

  1. 其有变化了 分为EL1 EL2 EL3 EL4四种模式(AArch64状态)。每种模式下有自己的SP指针,SP_EL0,SP_EL1,SP_EL2,SP_EL3。通过SPSel来选择是哪一种的SP指针。


3.SP_EL1t 代表SP_EL0的指针,SP_ELxH代表相应等级下的SP指针。

4.如果用作基址运算时,SP的低四位[3:0]必须为0,否则会产生SP非对齐异常,系统自动会进行check。

由下图可以看到EL3下的SP有值,且与系统的SP值相同(X15下面),则处于EL3模式。

2.3 LR的作用

LR为程序跳转时需要用到的寄存器,用来保存「返回地址」(同时也包含异常返回地址)。

程序经常会存在调用关系,当程序执行完子程序之后,肯定会返回到主程序,这是返回到主程序的地址就是在LR保存。

在一些CorteM系列的处理,LR的第0位会置1 表示,表示Thumb状态。

当然没有LR这个寄存器也可以的,直接将返回地址保存到栈中,最后执行完之后弹出到PC也行,但是寄存器的访问速度可以远高于栈(存储器SRAM),所以LR的作用还是很明显的。

此外对应ARMv8系列,还有ELR寄存器,对应的是异常状态下的返回地址。

  • 当程序执行到异常时,异常的返回地址保存到ELR中,当然ARMv8有四种模式,EL0没有异常处理,所以只有三个ELR寄存器,处理三种异常时的返回地址。b. AArch32到AArch64状态时,保存的是32位的地址,高8位均为0。

2.3.1 LR的地址保存

  • 程序A调用B程序,此时LR更新为「2地址」,

  • 跳转到B程序时,B发现还要跳转到C程序,所以LR会被覆盖,所以在B程序开始的时候,会讲LR保存到栈中。

  • 挑转到C程序时,此时LR更新到「4地址」,

  • C程序执行开始时,发现没有子程序跳转了,所以此时的LR不会被覆盖,所以也不需要将LR保存,退出时直接跳转到「4地址」即可。

  • B程序执行完时,发现LR还是错的,会将压栈的LR弹出,这样程序就可以回到「2地址」。

  • 如此一来,程序就完成调用过程,全部执行完毕。

2.3.2 接着来说跳转的指令

B:

用法:B Lable,直接跳转Lable处的地址,不改变LR,有限范围内的跳转,是不返回的跳转。可以看到上图B跳转的地址 就是在附近,说明可能是跳到后面的程序的指令,不带返回的。

BX:

用法:BX Lable,跳转到对应Label地址,Lable中最后一位(bit)为指令集标志,1表示Thumb,0表示ARM状态,可能会进行模式切换,是不返回的跳转。

用法:BX reg,跳转到 reg里面保存的地址,同上,可能会切换模式。该程序直接跳到lr所指示的地址,即返回地址。

BLX:

用法:BLX Lable,跳转到对应Label地址,可能会切换模式,同时LR保存了返回的地址。

用法:BLX reg,跳转到 reg里面保存的地址,可能会切换模式,同时LR保存了返回的地址。

BR:

用法:BR reg,跳转到 reg里面保存的地址,是不返回的跳转。

BLR:

用法:BLR reg,跳转到 reg里面保存的地址,同时LR保存了返回的地址。

B.

用法:B.Cond label,根据状态位进行跳转,比如 ZCNV 等状态位,

例如:BHI Lable 、BCS Lable

b.cs 如果w8 >= 0x397 则跳到0x800c0988地址处。

来源:

https://mp.weixin.qq.com/s/itj7IFf_rlesd7Kcmu1rPw

-  THE END  -


 精品活动推荐 


因文章部分文字及图片涉及到引用,如有侵权,请及时联系17316577586,我们将删除内容以保证您的权益。

谈思汽车 智能汽车安全新媒体
评论 (0)
  • 据先科电子官方信息,其产品包装标签将于2024年5月1日进行全面升级。作为电子元器件行业资讯平台,大鱼芯城为您梳理本次变更的核心内容及影响:一、标签变更核心要点标签整合与环保优化变更前:卷盘、内盒及外箱需分别粘贴2张标签(含独立环保标识)。变更后:环保标识(RoHS/HAF/PbF)整合至单张标签,减少重复贴标流程。标签尺寸调整卷盘/内盒标签:尺寸由5030mm升级至**8040mm**,信息展示更清晰。外箱标签:尺寸统一为8040mm(原7040mm),提升一致性。关键信息新增新增LOT批次编
    大鱼芯城 2025-04-01 15:02 196浏览
  • 引言随着物联网和智能设备的快速发展,语音交互技术逐渐成为提升用户体验的核心功能之一。在此背景下,WT588E02B-8S语音芯片,凭借其创新的远程更新(OTA)功能、灵活定制能力及高集成度设计,成为智能设备语音方案的优选。本文将从技术特性、远程更新机制及典型应用场景三方面,解析该芯片的技术优势与实际应用价值。一、WT588E02B-8S语音芯片的核心技术特性高性能硬件架构WT588E02B-8S采用16位DSP内核,内部振荡频率达32MHz,支持16位PWM/DAC输出,可直接驱动8Ω/0.5W
    广州唯创电子 2025-04-01 08:38 158浏览
  • 引言在语音芯片设计中,输出电路的设计直接影响音频质量与系统稳定性。WT588系列语音芯片(如WT588F02B、WT588F02A/04A/08A等),因其高集成度与灵活性被广泛应用于智能设备。然而,不同型号在硬件设计上存在关键差异,尤其是DAC加功放输出电路的配置要求。本文将从硬件架构、电路设计要点及选型建议三方面,解析WT588F02B与F02A/04A/08A的核心区别,帮助开发者高效完成产品设计。一、核心硬件差异对比WT588F02B与F02A/04A/08A系列芯片均支持PWM直推喇叭
    广州唯创电子 2025-04-01 08:53 187浏览
  • 随着汽车向智能化、场景化加速演进,智能座舱已成为人车交互的核心承载。从驾驶员注意力监测到儿童遗留检测,从乘员识别到安全带状态判断,座舱内的每一次行为都蕴含着巨大的安全与体验价值。然而,这些感知系统要在多样驾驶行为、复杂座舱布局和极端光照条件下持续稳定运行,传统的真实数据采集方式已难以支撑其开发迭代需求。智能座舱的技术演进,正由“采集驱动”转向“仿真驱动”。一、智能座舱仿真的挑战与突破图1:座舱实例图智能座舱中的AI系统,不仅需要理解驾驶员的行为和状态,还要同时感知乘员、儿童、宠物乃至环境中的潜在
    康谋 2025-04-02 10:23 94浏览
  • 探针本身不需要对焦。探针的工作原理是通过接触被测物体表面来传递电信号,其精度和使用效果取决于探针的材质、形状以及与检测设备的匹配度,而非对焦操作。一、探针的工作原理探针是检测设备中的重要部件,常用于电子显微镜、坐标测量机等精密仪器中。其工作原理主要是通过接触被测物体的表面,将接触点的位置信息或电信号传递给检测设备,从而实现对物体表面形貌、尺寸或电性能等参数的测量。在这个过程中,探针的精度和稳定性对测量结果具有至关重要的影响。二、探针的操作要求在使用探针进行测量时,需要确保探针与被测物体表面的良好
    锦正茂科技 2025-04-02 10:41 67浏览
  • 在智能交互设备快速发展的今天,语音芯片作为人机交互的核心组件,其性能直接影响用户体验与产品竞争力。WT588F02B-8S语音芯片,凭借其静态功耗<5μA的卓越低功耗特性,成为物联网、智能家居、工业自动化等领域的理想选择,为设备赋予“听得懂、说得清”的智能化能力。一、核心优势:低功耗与高性能的完美结合超低待机功耗WT588F02B-8S在休眠模式下待机电流仅为5μA以下,显著延长了电池供电设备的续航能力。例如,在电子锁、气体检测仪等需长期待机的场景中,用户无需频繁更换电池,降低了维护成本。灵活的
    广州唯创电子 2025-04-02 08:34 145浏览
  • 退火炉,作为热处理设备的一种,广泛应用于各种金属材料的退火处理。那么,退火炉究竟是干嘛用的呢?一、退火炉的主要用途退火炉主要用于金属材料(如钢、铁、铜等)的热处理,通过退火工艺改善材料的机械性能,消除内应力和组织缺陷,提高材料的塑性和韧性。退火过程中,材料被加热到一定温度后保持一段时间,然后以适当的速度冷却,以达到改善材料性能的目的。二、退火炉的工作原理退火炉通过电热元件(如电阻丝、硅碳棒等)或燃气燃烧器加热炉膛,使炉内温度达到所需的退火温度。在退火过程中,炉内的温度、加热速度和冷却速度都可以根
    锦正茂科技 2025-04-02 10:13 64浏览
  • 职场之路并非一帆风顺,从初入职场的新人成长为团队中不可或缺的骨干,背后需要经历一系列内在的蜕变。许多人误以为只需努力工作便能顺利晋升,其实核心在于思维方式的更新。走出舒适区、打破旧有框架,正是让自己与众不同的重要法宝。在这条道路上,你不只需要扎实的技能,更需要敏锐的观察力、不断自省的精神和前瞻的格局。今天,就来聊聊那改变命运的三大思维转变,让你在职场上稳步前行。工作初期,总会遇到各式各样的难题。最初,我们习惯于围绕手头任务来制定计划,专注于眼前的目标。然而,职场的竞争从来不是单打独斗,而是团队协
    优思学院 2025-04-01 17:29 198浏览
  • 北京贞光科技有限公司作为紫光同芯授权代理商,专注于为客户提供车规级安全芯片的硬件供应与软件SDK一站式解决方案,同时配备专业技术团队,为选型及定制需求提供现场指导与支持。随着新能源汽车渗透率突破40%(中汽协2024数据),智能驾驶向L3+快速演进,车规级MCU正迎来技术范式变革。作为汽车电子系统的"神经中枢",通过AEC-Q100 Grade 1认证的MCU芯片需在-40℃~150℃极端温度下保持μs级响应精度,同时满足ISO 26262 ASIL-D功能安全要求。在集中式
    贞光科技 2025-04-02 14:50 116浏览
  • 提到“质量”这两个字,我们不会忘记那些奠定基础的大师们:休哈特、戴明、朱兰、克劳士比、费根堡姆、石川馨、田口玄一……正是他们的思想和实践,构筑了现代质量管理的核心体系,也深远影响了无数企业和管理者。今天,就让我们一同致敬这些质量管理的先驱!(最近流行『吉卜力风格』AI插图,我们也来玩玩用『吉卜力风格』重绘质量大师画象)1. 休哈特:统计质量控制的奠基者沃尔特·A·休哈特,美国工程师、统计学家,被誉为“统计质量控制之父”。1924年,他提出世界上第一张控制图,并于1931年出版《产品制造质量的经济
    优思学院 2025-04-01 14:02 145浏览
  • 文/Leon编辑/cc孙聪颖‍步入 2025 年,国家进一步加大促消费、扩内需的政策力度,家电国补政策将持续贯穿全年。这一利好举措,为行业发展注入强劲的增长动力。(详情见:2025:消费提振要靠国补还是“看不见的手”?)但与此同时,也对家电企业在战略规划、产品打造以及市场营销等多个维度,提出了更为严苛的要求。在刚刚落幕的中国家电及消费电子博览会(AWE)上,家电行业的竞争呈现出胶着的态势,各大品牌为在激烈的市场竞争中脱颖而出,纷纷加大产品研发投入,积极推出新产品,试图提升产品附加值与市场竞争力。
    华尔街科技眼 2025-04-01 19:49 206浏览
  • 文/郭楚妤编辑/cc孙聪颖‍不久前,中国发展高层论坛 2025 年年会(CDF)刚刚落下帷幕。本次年会围绕 “全面释放发展动能,共促全球经济稳定增长” 这一主题,吸引了全球各界目光,众多重磅嘉宾的出席与发言成为舆论焦点。其中,韩国三星集团会长李在镕时隔两年的访华之行,更是引发广泛热议。一直以来,李在镕给外界的印象是不苟言笑。然而,在论坛开幕前一天,李在镕却意外打破固有形象。3 月 22 日,李在镕与高通公司总裁安蒙一同现身北京小米汽车工厂。小米方面极为重视此次会面,CEO 雷军亲自接待,小米副董
    华尔街科技眼 2025-04-01 19:39 209浏览
我要评论
0
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦