ARM处理器Thumb模式与64位模式编程详解
1. Thumb模式基础
在ARM处理器编程中,Thumb模式有着独特的优势。在一些指令示例里,如果将立即数加到寄存器并存储到单独的目标寄存器,立即数代码仅剩下3位,其范围只能是0 - 7。而另一种情况,当将立即数加到寄存器时,由于少用一个寄存器,立即数操作数可使用更多位,范围能达到0 - 255。需要注意的是,在这些示例中,寄存器范围通常是R0 - R7,不过ADD指令也有用于对SP进行加法以及对PC添加立即数常量的形式。并且,所有示例中的S标志都必须设置,这不是可选的。
2. 调用Thumb代码
ARM处理器支持部分代码以Thumb模式运行,部分以常规的32位ARM指令运行。在第4章提到,CPSR包含一个位,用于指示处理器是否处于Thumb模式。而在第6章中,我们了解到BX指令在执行时可在处理器状态之间切换。若要从用Thumb指令编写的函数返回非Thumb模式的函数,必须使用BX指令,直接将返回地址POP到PC会引发“非法指令”异常。
同时,有与之匹配的BLX指令用于在ARM32和Thumb代码之间进行调用,这两条指令都能在Thumb和ARM32指令之间切换。ARM处理器通过一个技巧来判断BLX和BX指令是跳转到Thumb还是ARM32代码:所有ARM32指令必须字对齐,所有Thumb指令必须按16位边界对齐,这意味着指向指令的地址必须是偶数,即低阶位未被使用。ARM处理器利用指令地址的低阶位来指示指针指向的是ARM32还是Thumb指令。
如果要使用BLX调用Thumb代码,需要在地址上加1,这样LR会被设置为正确的地址,以便BX在返回时能正常工作。若将这些指令作为寄存器传递,此规则
超级会员免费看
订阅专栏 解锁全文
1万+

被折叠的 条评论
为什么被折叠?



