"更改指令集"在ARM组装中 - 这究竟是什么意思?

时间:2014-06-27 20:12:47

标签: assembly arm cortex-m3

BX改变了指令集说明我们这里的手册,据我所知,通过远近搜索,这意味着当CPU运行16位Thumb指令集时,它只接受这个时候的32位地址(我没有发现以下命令发生任何变化的迹象)这样你就可以进一步分支,我能理解吗?如果是,那就是全部吗?
据说我们使用的是Atmel AT91,可能是Cortex M3型,但是我能得到的关于Cortex M3的任何东西看起来都和我们做的有很大不同,而我在Keil uVision找不到AT91,他们也使用了由一位教授开发的平台,所以我怀疑它并不是我们正在做的事情,但我仍然想知道这是什么东西,因为我正在考虑整体研究装配。

1 个答案:

答案 0 :(得分:3)

您提到的处理器(Cortex M3)不支持ARM指令,因此您无法使用BX。您只能使用基本Thumb指令。

话虽这么说,但值得给你一些背景知识:

BX指令执行分支(即跳转),并根据分支地址的0 th 位将处理器切换到ARM或Thumb模式。这样做的目的不是让你跳得更远,而只是在模式之间切换。由于支持该指令的所有处理器都在ARM模式下启动,因此切换到Thumb模式并不会增加跳跃距离。

Thumb与ARM模式的细节是微妙的,太多,无法在此列出,但可以找到一个好的资源here。由于链接本身可能已经死亡,这里有一个摘要:

  • 在Thumb模式下,"程序相关分支,特别是条件分支,在范围上比在ARM代码中更受限制,并且子程序的分支只能是无条件的"。
  • ARM模式可以访问更多通用寄存器,Thumb模式只能访问r8-r15。