




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第7章章 ARM程序和程序和Thumb程序程序 交互使用交互使用 Assemble Language of ARM2 交互需求 oThumb的代码密度和在窄存储器上性能 ,使得它用在很多有大 量C代码的系统上比较理想. 然而在很多应用中还是需要在 ARM/Thumb 两种状态之间切换: n在宽的存储器上 ARM 代码能提供很好的性能 o 在一个应用中,速度关键的部分用ARM代码实现是不错的 n一些函数只能用 ARM 指令实现, e.g. o 存取 CPSR (使能/禁止中断和状态的改变) o 操作协处理器 n异常处理 o 异常处理时自动进入 ARM 状态,但系统要求主程序用 Thumb 代码
2、实现 n独立的 Thumb 程序也需要一个ARM 的汇编程序头来切换,并 调用Thumb 程序 Assemble Language of ARM3 o 可以实现程序状态切换的指令 n BLX, BX n LDR, LDM, POP Assemble Language of ARM4 交互指令 o 交互的实现采用跳转交换指令(BX) n在Thumb状态 BX Rn n在ARM状态 (支持Thumb的内核) BX Rn 其中Rn可以是 (r0r15)中的任何一个. o 这将通过拷贝 Rn 到 PC 来实现在 4GB 空间内 的一个绝对跳转. o 其中Rn 的 Bit-0 表明切换到何种状态. As
3、semble Language of ARM5 状态切换 Rn 31 01 0/1 ARM / Thumb 选择位选择位 0 - ARM state 1 - Thumb state 目的地址目的地址 BX 3101 PC Assemble Language of ARM6 o 与程序状态切换相关的伪操作 n CODE16伪操作 n CODE32伪操作 Assemble Language of ARM7 分支交换示例 CODE32; Start off in ARM state ADR r0,Into_Thumb+1 ; Generate branch target address and se
4、t ; bit 0, hence arrive in Thumb state. BX r0; Branch exchange to Thumb state. : CODE16; Assemble subsequent code as Thumb. Into_Thumb : ADR r5, Back_to_ARM ; Generate branch target to word aligned ; address - hence bit 0 is clear. BX r5; Branch exchange back to ARM state. : CODE32; Assemble subsequ
5、ent code as ARM. Back_to_ARM : Assemble Language of ARM8 无交互子程序 o实现一个通常的子程序调用需要如下两步: n保存返回地址到寄存器(LR) n跳转到对应的子程序地址 o调用实现通常只需要一个指令: BL func2 o返回实现通常只需从 LR 恢复 PC: MOV pc,lr . . BL func2 . . : MOV pc,lr func1func2 void func1 (void) : func2(); : Assemble Language of ARM9 混合的ARM/Thumb子程序 o在使用 C / C+ 写程序时,
6、可以自由的编译为 ARM ( 使用 armcc/armcpp) 或 Thumb ( 使用tcc/tcpp). n需要一些编译方法来解决在一种状态下的函数调用另一种状态下的 函数的问题. o涉及到的问题: n BL 不能完成状态切换 o需要使用 BX 切换 n BX 不能自动保存返回地址到 LR o需要其它方法来解决这个问题, BLX指令的引入 (ARM7不支持) n 从子程序返回,要使用 BX LR 以便返回先前的状态 oBL 在 Thumb 状态下可能设置了 LR 的 lsb (bit-0) o不能使用 MOV PC,LR 返回,因为不能实现状态切换 Assemble Language of
7、 ARM10 交互子程序 o任何包含使用交互调用函数的 C 模块的编译必须使用 -apcs /interwork 命令行选项. n编译器将使用 BX 实现函数返回来替代 MOV PC,LR. o连接器生成一小段代码(veneers)来改变状态 n当发现交互调用时自动加入目标文件 n使用 armlink -info veneers 可以看到加入的“ veneers” 的大小。 : BL : : BX : BX func1func2 连接程序生成连接程序生成 veneer (compiled for interworking) Assemble Language of ARM11 ARM 4T架构
8、对交互编译的影响 o leaf function使用 BX 返回. oNon_leaf function将被交互编译: n在入口处( 调用 BL 之前)压栈保护返回地址 n在入口处保护所有函数使用的寄存器 n使用 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-
9、r7 BX lr POP r3 BX r3 Assemble Language of ARM12 汇编程序交互工作和Veneers o连接程序将会自动加入ARM / Thumb交互 veneers到汇编源代码. o主调程序需要: n使用 armasm -apcs /interwork 汇编汇编 n导出自己的符号, e.g. EXPORT ThumbSub n使用 BX 实现返回 o主调程序使用 BL 指令调用子程序. oNote: AREA 将包含: AREA Thumb,CODE,READONLY,INTERWORK 如果如此, armasm 将警告: INTERWORK area dire
10、ctive is obsolete. Continuing as if -apcs /inter selected. Assemble Language of ARM13 ; armasm arm.s AREA ARM,CODE,READONLY IMPORT ThumbSub ENTRY CODE32 ARMProg MOVr0, #1 BLThumbSub;call Thumb subroutine MOVr0, #0 x18 LDRr1, =0 x20026 SWI 0 x123456;ARM semihosting SWI END ; armasm thumb.s -apcs /int
11、erwork AREA Thumb,CODE,READONLY EXPORT ThumbSub CODE16 ThumbSub MOVr1, #2 BXlr;return to caller END 汇编程序交互工作 (1) Assemble Language of ARM14 汇编程序交互工作 (2) o使用Debugger反汇编代码: ARMProg 0 x00008080: 0 xe3a00001 : mov r0,#1 0 x00008084: 0 xeb000004 : bl 0 x809c ; ThumbSub+0 x4 0 x00008088: 0 xe3a00018 : mov
12、 r0,#0 x18 0 x0000808c: 0 xe59f1000 : ldr r1,0 x8094 ; =#0 x00020026 0 x00008090: 0 xef123456 : swi 0 x123456 0 x00008094: 0 x00020026 : Literal Pool Value ThumbSub 0 x00008098: 0 x2102 : mov r1,#2 0 x0000809a: 0 x4770 : bx lr o交互veeners在下一个字的边界 0 x0000809c: 0 xe59fc000 : ldr r12,0 x80a4 ; =#ThumbSub+0 x1 0 x000080a0: 0 xe12fff1c : bx r12 0 x000080a4: 0 x00008099 : Literal Pool Value Assemble Language of ARM15 C / 汇编使用 Veneers交互工作 o运行在一种状态下的 C 代码可能调用运行在另一种状态下的汇编程序,反之 亦然。 o这时的 veneers 由连接程序自动生成。 o如果主调函数是
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年农业植保员考试的全方位分析试题及答案
- 多元选择农业植保员考试试题及答案
- 培根随笔的谈读书
- 2024年游泳救生员资格考试试题及答案新视角
- 2024年游泳救生员基础知识试题及答案
- 游泳救生员安全保障意识试题及答案
- 金宝贝员工培训
- 幼儿园教学课程介绍
- 微生物生态学研究试题及答案
- 智能园艺技术的应用试题及答案
- 气体检测系统中英文对照外文翻译文献
- 死亡病例监测报告督导记录表
- 绿化自动滴灌系统施工方案
- 车站信号自动控制教案-TYJL-ADX型计算机联锁系统组成及功能
- 炉壁温度计算详解
- 绿色建筑验收自评报告全
- GB/T 42288-2022电化学储能电站安全规程
- 第十二讲 建设社会主义生态文明PPT习概论2023优化版教学课件
- 工商管理实习周记十篇
- 幼儿园体育游戏活动评价表
- 星球版七年级地理上册《海陆变迁》《火山喷发》实验说课 课件
评论
0/150
提交评论