ARMThumb交互工作.ppt
《ARMThumb交互工作.ppt》由会员分享,可在线阅读,更多相关《ARMThumb交互工作.ppt(27页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、1TMT H E A R C H I T E C T U R E F O R T H E D I G I T A L W O R L DARM/Thumb 交互工作交互工作2TM264v04 ARM/Thumb Interworking with ADS议程议程n交互工作基础交互工作基础交互子程序ARM 5T 架构扩展3TM364v04 ARM/Thumb Interworking with ADS交互需求交互需求nThumb的代码密度和在窄存储器上性能的代码密度和在窄存储器上性能,使得它用在很多有大量使得它用在很多有大量C代码的系统代码的系统上比较理想上比较理想.然而在很多应用中还是需要在然
2、而在很多应用中还是需要在 ARM/Thumb 两种状态之间切换两种状态之间切换:n在宽的存储器上 ARM 代码能提供很好的性能n在一个应用中,速度关键的部分用ARM代码实现是不错的n一些函数只能用 ARM 指令实现,e.g.n存取 CPSR(使能/禁止中断和状态的改变)n操作协处理器n异常处理n异常处理时自动进入 ARM 状态,但系统要求主程序用 Thumb 代码实现n独立的 Thumb 程序也需要一个ARM 的汇编程序头来切换,并调用Thumb 程序4TM464v04 ARM/Thumb Interworking with ADS交互指令交互指令n交互的实现采用交互的实现采用跳转交换指令跳转
3、交换指令(BX)n在Thumb状态BX Rnn在ARM状态(支持Thumb的内核)BX Rn其中其中Rn可以是可以是(r0r15)中的任何一个中的任何一个.n这将通过拷贝这将通过拷贝 Rn 到到 PC 来实现在来实现在 4GB 空间内的一个绝对跳转空间内的一个绝对跳转.n其中其中Rn 的的 Bit-0 表明切换到何种状态表明切换到何种状态.5TM564v04 ARM/Thumb Interworking with ADS状态切换状态切换ARM/Thumb 选择位选择位0-ARM state1-Thumb stateRn目的地址目的地址310131010/1BXPC6TM664v04 ARM/T
4、humb Interworking with ADS分支交换示例分支交换示例CODE32;Start off in ARM state ADR r0,Into_Thumb+1;Generate branch target address and set;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 wor
5、d aligned;address-hence bit 0 is clear.BX r5;Branch exchange back to ARM state.:CODE32;Assemble subsequent code as ARM.Back_to_ARM :7TM764v04 ARM/Thumb Interworking with ADS提纲提纲交互基础n交互子程序交互子程序ARM 5T 架构扩展8TM864v04 ARM/Thumb Interworking with ADS无交互子程序无交互子程序n实现一个通常的子程序调用需要如下两步实现一个通常的子程序调用需要如下两步:n保存返回地
6、址到寄存器(LR)n跳转到对应的子程序地址n调用实现通常只需要一个指令调用实现通常只需要一个指令:BL func2n返回实现通常只需从返回实现通常只需从 LR 恢复恢复 PC:MOV pc,lr.BL func2.:MOV pc,lrfunc1func2void func1(void):func2();:9TM964v04 ARM/Thumb Interworking with ADS混合的混合的ARM/Thumb子程序子程序n在使用在使用 C/C+写程序时,可以自由的编译为写程序时,可以自由的编译为 ARM(使用使用armcc/armcpp)或或 Thumb(使用使用tcc/tcpp).n需
7、要一些编译方法来解决在一种状态下的函数调用另一种状态下的函数的问题.n涉及到的问题涉及到的问题:n BL 不能完成状态切换n需要使用 BX 切换n BX 不能自动保存返回地址到 LRn需要其它方法来解决这个问题n 从子程序返回,要使用 BX LR 以便返回先前的状态nBL 在 Thumb 状态下可能设置了 LR 的 lsb(bit-0)n不能使用 MOV PC,LR 返回,因为不能实现状态切换10TM1064v04 ARM/Thumb Interworking with ADS交互子程序交互子程序n任何包含使用交互调用函数的任何包含使用交互调用函数的 C 模块的编译必须使用模块的编译必须使用-
8、apcs/interwork 命令行选项命令行选项.n编译器将使用 BX 实现函数返回来替代 MOV PC,LR.n连接器生成一小段代码连接器生成一小段代码(veneers)来改变状态来改变状态n当发现交互调用时自动加入目标文件n使用 armlink-info veneers 可以看到加入的“veneers”的大小,:BL:BX:BXfunc1func2连接程序生成连接程序生成 veneer(compiled for interworking)11TM1164v04 ARM/Thumb Interworking with ADSARM 4T架构对交互编译的影响架构对交互编译的影响n leaf
9、function使用使用 BX 返回返回.nNon_leaf function将被交互编译将被交互编译:n在入口处(调用 BL 之前)压栈保护返回地址n在入口处保护所有函数使用的寄存器n使用 BX 实现返回操作(替代弹出 PC).C 源代码源代码 armcc-apcs/interwork tcc-apcs/interworkvoid 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 r312TM1264
10、v04 ARM/Thumb Interworking with ADS汇编程序交互工作和汇编程序交互工作和Veneersn连接程序将会自动加入连接程序将会自动加入ARM/Thumb交互交互 veneers到汇编源代码到汇编源代码.n主调程序需要主调程序需要:n使用 armasm-apcs/interwork 汇编汇编 n导出自己的符号,e.g.EXPORT ThumbSubn使用 BX 实现返回n主调程序使用主调程序使用 BL 指令调用子程序指令调用子程序.nNote:AREA 将包含将包含:AREA Thumb,CODE,READONLY,INTERWORK如果如此,如果如此,armasm
11、将警告将警告:INTERWORK area directive is obsolete.Continuing as if-apcs/inter selected.13TM1364v04 ARM/Thumb Interworking with ADS;armasm arm.sAREA Arm,CODE,READONLYIMPORT ThumbSubENTRYCODE32ARMProgMOVr0,#1BLThumbSub;call Thumb subroutineMOVr0,#0 x18LDRr1,=0 x20026SWI 0 x123456;ARM semihosting SWIEND;arma
12、sm thumb.s-apcs/interworkAREA Thumb,CODE,READONLYEXPORT ThumbSubCODE16ThumbSubMOVr1,#2BXlr;return to callerEND汇编程序交互工作汇编程序交互工作(1)14TM1464v04 ARM/Thumb Interworking with ADS汇编程序交互工作汇编程序交互工作(2)n使用使用Debugger反汇编代码反汇编代码:ARMProg0 x00008080:0 xe3a00001:mov r0,#10 x00008084:0 xeb000004:bl 0 x809c ;(ThumbSub
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ARMThumb 交互 工作
限制150内