《电子技术应用》
您所在的位置:首页 > 嵌入式技术 > 解决方案 > ARM与Thumb之间的状态转换

ARM与Thumb之间的状态转换

2017-06-22
关键词: 汇编语言

由于Thumb指令在某些特殊情况下可能比ARM指令更有效,所以它在很多方面得到了广泛的应用。但是Thumb知识ARM指令集的一个子集,它不能独立组成一个应用系统,所以在很多情况下应用程序需要二者的混合编程,这就必然存在ARM与Thumb状态之间函数调用的问题。下面将分别详细介绍。

1)      状态切换的实现

ARM/Thumb之间的状态切换是通过一条专用的转移**指令BX来实现的。BX指令以通用寄存器位操作数,通过拷贝Rn到PC来实现4GB空间范围内的一个绝对跳转。BX利用Rn寄存器中目的地址值的最后一位来判断跳转后的状态。当最后一位为0时,表示转移到ARM状态;当最后一位为1时,表示转移到Thumb状态。

无论是ARM还是Thumb,其指令在存储器中都是边界对齐的。因此,在执行跳转过程中,PC寄存器中的最低位被舍弃,不起作用。在BX指令的执行过程中,最低位正好被用作状态判断的标志,不会造成存储器访问不对齐的错误。

下面是一段直接进入状态切换的例程:

                                                                      ;从ARM状态开始

CODE32                                                         ;表明一下是ARM指令

       ADR       R0,Into_Thumb+1                    ;得到目标地址,末位置1,表示转移到Thumb

       BX         R0                                             ;转向Thumb

              …

CODE16                                                         ;表明以下是Thumb指令Into_Thumb

       …

       ADR       R5,Back_to_ARM                       ;得到目标地址,末位缺省为0 ,转移到ARM

       BX         R5                                             ;转向ARM

       …

CODE32

       Back_to_ARM                                          ;ARM代码段起始地址


本站内容除特别声明的原创文章之外,转载内容只为传递更多信息,并不代表本网站赞同其观点。转载的所有的文章、图片、音/视频文件等资料的版权归版权所有权人所有。本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如涉及作品内容、版权和其它问题,请及时通过电子邮件或电话通知我们,以便迅速采取适当措施,避免给双方造成不必要的经济损失。联系电话:010-82306118;邮箱:aet@chinaaet.com。