ARM和嵌入式技术-培训课件-第6章.ppt
《ARM和嵌入式技术-培训课件-第6章.ppt》由会员分享,可在线阅读,更多相关《ARM和嵌入式技术-培训课件-第6章.ppt(24页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、6.1 交互工作原理 T版本的ARM体系结构支持ARM程序和THUMB程序混合编程,所谓交互工作就是程序执行过程中,可以根据需要进行ARM状态和THUMB状态的切换。 交互工作的必要性 为一个Thumb兼容的ARM处理器编写代码时,ARM指令的程序和THUMB指令的程序各有自己的优势,对于8位和16位的存储系统来说,Thumb指令可以提供更好的代码密度和性能,对于32位的存储系统来说,ARM指令则占有速度和性能上的优势。除此之外,在许多场合,也使得arm和thumb之间的切换变得必要。例如:6.1 交互工作原理(1)速度:某些强调速度的场合下,应考虑在系统中包含一个32位的存储器,从而利用ar
2、m代码提供更好的性能,满足设计要求。(2)功能:Thumb指令没有ARM灵活,另外某些操作,例如直接读取PSR的值、使无效或有效中断以及改变工作模式、对协处理器的操作等等,只能通过ARM指令实现。(3)异常处理:当进入异常中断处理程序时,处理器会自动进入ARM状态,这就意味着异常处理程序的起始部分必须用ARM指令编写,若中断处理程序需要Thumb指令来完成,则需要在中断处理程序中切换到Thumb指令状态,在处理结束时,还必须切换回ARM状态来完成程序的返回。(4)单独的Thumb程序:Thumb兼容的ARM处理器总是从ARM状态开始执行指令的,因此即使对于简单的Thumb汇编语言程序,也必须在
3、程序的开头添加一个ARM指令的程序头,使其从ARM状态切换到Thumb状态执行。6.1 交互工作原理 交互工作的切换指令 使用分支跳转指令BX即可完成处理器Thumb状态和ARM状态的切换。语法格式如下:Thumb状态下的切换指令: BX RnARM状态下的切换指令:BX Rn其中,Rn可以为R0R15中的任何一个寄存器,其值为分支地址。由于ARM指令都是字对齐的,在执行过程中,地址的最低两位忽略。Thumb指令是半字对齐的,在执行过程中,地址的最低位忽略。因此,可以根据BX指令分支到的地址的最低位确定处理器的状态是ARM状态还是Thumb状态:当最低位为0时,表示切换到ARM状态;为1时,表
4、示切换到Thumb状态。Cond为条件码,只有ARM状态下的BX指令才允许条件执行。6.1 交互工作原理 交互工作的切换指令 ARM/Thumb之间的状态切换是通过一条专用的转移交换指令BX来实现的.BX Rn当前状态是Thumb时BXcond Rn当前状态是ARM时Rn310ARM/Thumb选择位0-ARM1-ThumbPCBX6.1 交互工作原理 交互工作的切换指令 绝对地址在4GB空间内的Thumb或ARM程序都可以通过这条指令完成跳转和状态的切换。注意:当不需要状态切换时也可以使用BX作为分支指令,尤其是当B和BL指令不能使用的情况下,因为BX指令可以寻址32位的存储空间,而B和BL
5、指令则有如下限制: ARM状态下,B和BL指令的寻址空间为32 MB; Thumb状态下,无条件B和BL指令的寻址空间为4 MB; Thumb状态下,有条件B指令的寻址空间为-128到+127个指令。6.1 交互工作原理 与状态切换有关的伪指令 与状态切换有关的伪指令的有下面两条。 指令形式:CODE16CODE32注意:CODE16和CODE32只是告知汇编器后面指令的形式是Thumb指令还是ARM指令,本身并不能进行程序状态的切换。 当T版本的ARM处理器程序通过BX指令切换到Thumb状态时,同时需要在Thumb指令编写的代码段前用CODE16伪指令告知汇编器处理的是Thumb代码。由此
6、可知,ARM和Thumb间的交互工作必须:(1)通过BX指令切换处理器的状态;(2)通过伪指令CODE32和CODE16指示汇编器根据处理器的状态生成合适的代码。6.2 交互程序 下例为一个从ARM代码段跳转到Thumb代码段,又回到ARM代码段的简单的交互程序设计的示例.CODE 32;指示下面的指令为ARM指令 ADR R0, Into_thumb+1;产生目标地址,并且设置目标地址的状 ;态为Thumb状态BX R0.CODE 16;指示下面的指令为Thumb指令Into_thumb.ADR R5, Back_to_arm;产生目标地址,并且设置目标地址的状 ;态为ARM状态BX R5.
7、CODE 32;指示下面的指令为ARM指令Back_to_ arm6.2 交互程序 ARM指令头的例子 由于ARM处理器及汇编器总是从ARM状态开始执行和汇编指令的,因此对于单独的Thumb指令程序也必须添加一个ARM指令头。ARM指令的程序头主要完成如下两步操作:(1)通过ADR指令装载分支地址,并且设置地址最低位为1;(2)通过BX指令完成分支跳转并切换到Thumb状态。 AREA ThumbSub, CODE, READONLY;定义一个代码段 ENTRY ;程序入口 CODE32 ;下面的指令为arm指令header ADR R0, start + 1;处理器处于ARM状态 BX R0
8、;ARM指令头后,调用Thumb主程序 CODE16 ;下面指令为Thumb指令start MOV R0, #10 ;设置参数 MOV R1, #3 BL doadd ;调用子程序stop MOV R0, #0 x18 ;执行中止 LDR R1, =0 x20026 SWI 0 xabdoadd ADD R0, R0, R1;子程序代码 MOV PC, LR;子程序返回 END;程序结束程序主体以CODE16伪指令开始,通过ARM指令头中start+1,将分支目标地址的最低位置为1,然后通过BX指令切换处理器状态,start处的指令为Thumb指令。6.2 交互程序 交互子程序调用 执行一个简
9、单的汇编语言程序的调用,通常需要做两个工作:(1)存储返回地址到连接寄存器;(2)分支跳转到被调用的子程序。 对于非交互的子程序调用,可以通过一条BL指令完成。交互工作的子程序调用则应使用BX指令,跳转的同时进行状态切换,同时注意返回时需要将状态切换回来。与BL指令不同,BX指令不能将返回地址存入连接寄存器中,因此在使用BX指令之前,必须先将返回地址写入连接寄存器。如果调用是从Thumb状态到ARM状态,还必须将连接寄存器的最低位置1,以保证从调用程序返回时工作在Thumb状态下。6.2 交互程序 从ARM状态调用Thumb子程序 当执行ARM到Thumb的调用时,由于返回时的状态为ARM状态
10、,所以不需要设置连接寄存器的最低位,因此可以简单的在BX指令前通过MOV lr,pc保存返回地址。AREA ThumbAdd,CODE,READONLY;定义一个代码段ENTRYstart MOV r0, #2 ;寄存器赋值 MOV r1, #3 ADR r4, ThumbSub + 1 ;生成分支地址并置最低位为1 MOV lr, pc ;存储返回地址 BX r4 ;分支并切换到ThumbSubStop MOV r0, #0 x18 LDR r1, =0 x20026 SWI 0 x123456 CODE16 ;后面代码为Thumb代码ThumbSub ADD r0, r0, r1 ;r0r
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ARM 嵌入式 技术 培训 课件
限制150内