第7章ARM程序和Thumb程序混合使用概要.ppt

  1. 1、本文档共23页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第7章ARM程序和Thumb程序混合使用概要

Assemble Language of ARM 第7章 ARM程序和Thumb程序交互使用 交互需求 Thumb的代码密度和在窄存储器上性能 ,使得它用在很多有大量C代码的系统上比较理想. 然而在很多应用中还是需要在 ARM/Thumb 两种状态之间切换: 在宽的存储器上 ARM 代码能提供很好的性能 在一个应用中,速度关键的部分用ARM代码实现是不错的 一些函数只能用 ARM 指令实现, e.g. 存取 CPSR (使能/禁止中断和状态的改变) 操作协处理器 异常处理 异常处理时自动进入 ARM 状态,但系统要求主程序用 Thumb 代码实现 独立的 Thumb 程序也需要一个ARM 的汇编程序头来切换,并调用Thumb 程序 可以实现程序状态切换的指令 BLX, BX LDR, LDM, POP 交互指令 交互的实现采用跳转交换指令(BX) 在Thumb状态 BX Rn 在ARM状态 (支持Thumb的内核) BX条件 Rn 其中Rn可以是 (r0~r15)中的任何一个. 这将通过拷贝 Rn 到 PC 来实现在 4GB 空间内的一个绝对跳转. 其中Rn 的 Bit-0 表明切换到何种状态. 状态切换 与程序状态切换相关的伪操作 CODE16伪操作 CODE32伪操作 分支交换示例 无交互子程序 实现一个通常的子程序调用需要如下两步: 保存返回地址到寄存器(LR) 跳转到对应的子程序地址 调用实现通常只需要一个指令: BL func2 返回实现通常只需从 LR 恢复 PC: MOV pc,lr 混合的ARM/Thumb子程序 在使用 C / C++ 写程序时,可以自由的编译为 ARM ( 使用armcc/armcpp) 或 Thumb ( 使用tcc/tcpp). 需要一些编译方法来解决在一种状态下的函数调用另一种状态下的函数的问题. 涉及到的问题: BL 不能完成状态切换 需要使用 BX 切换 BX 不能自动保存返回地址到 LR 需要其它方法来解决这个问题, BLX指令的引入 (ARM7不支持) 从子程序返回,要使用 BX LR 以便返回先前的状态 BL 在 Thumb 状态下可能设置了 LR 的 lsb (bit-0) 不能使用 MOV PC,LR 返回,因为不能实现状态切换 交互子程序 任何包含使用交互调用函数的 C 模块的编译必须使用 -apcs /interwork 命令行选项. 编译器将使用 BX 实现函数返回来替代 MOV PC,LR. 连接器生成一小段代码(‘veneers’)来改变状态 当发现交互调用时自动加入目标文件 使用 armlink -info veneers 可以看到加入的“ veneers”的大小。 ARM 4T架构对交互编译的影响 leaf function使用 BX 返回. Non_leaf function将被交互编译: 在入口处( 调用 BL 之前)压栈保护返回地址 在入口处保护所有函数使用的寄存器 使用 BX 实现返回操作 (替代弹出 PC). C 源代码 armcc -apcs /interwork tcc -apcs /interwork void func(void) func func { STMFD sp!,{r4-r11,lr} PUSH {r4-r7,lr} : : : sub(); BL sub BL sub : : : : LDMFD sp!,{r4-r11,lr} POP {r4-r7} } BX lr POP {r3} BX r3 汇编程序交互工作和Veneers 连接程序将会自动加入ARM / Thumb交互 veneers到汇编源代码. 主调程序需要: 使用 armasm -apcs /interwork 汇编 导出自己的符号, e.g. EXPORT ThumbSub 使用 BX 实现返回 主调程序使用 BL 指令调用子程序. Note: AREA 将包含: AREA Thum

文档评论(0)

yaocen + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档