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

4
BX根据我们这里的手册更改了指令集,就我通过广泛搜索所了解到的情况来看,这意味着虽然CPU运行16位Thumb指令集,但它只在这个时候接受32位地址(我没有找到任何迹象表明后续命令有任何变化),因此您可以跳转到更远的位置,我的理解正确吗?如果是的,那就是全部内容了吗?
据说我们正在使用Atmel AT91,可能是Cortex M3类型,但我能够获取到的关于Cortex M3的任何信息似乎与我们所做的事情明显不同。虽然我在Keil uVision中找不到AT91,他们还说我们使用了一位教授开发的平台,所以我怀疑我们所做的并不完全是真实的东西,但我仍然想知道这是什么东西,因为我打算研究汇编语言的基础知识...

Cortex-M3 只支持 [tag:thumb] 指令,因此在该 CPU 上不可能使用 bx。只有具有 interwork 功能的 ARM CPU,如 Cortex-A、ARMv5、ARMv6 等才具备此功能。 - artless noise
好的,明白了。我不知道该说什么,这个问题让我们感到非常困惑。 - user3079666
1个回答

4
您所提及的处理器(Cortex M3)不支持ARM指令,因此BX对您不可用。您只能使用基本Thumb指令。
话虽如此,值得向您介绍一些背景信息:
BX指令执行分支(即跳转),并根据分支地址的第0位将处理器切换到ARM或Thumb模式。其目的并不是为了让您跳得更远,而只是为了在模式之间进行切换。由于所有支持此指令的处理器都从ARM模式启动,因此切换到Thumb模式不会增加您的跳跃距离。
关于Thumb与ARM模式的详细信息比较微妙,无法在此列出,但可以在这里找到一个很好的资源。由于单独的链接可能会失效,因此这里有一个摘要:
- 在Thumb模式下,“程序相关分支,尤其是条件分支,在范围上比ARM代码更受限制,并且到子程序的分支只能是无条件的”。 - ARM模式可以访问更多的通用寄存器,而Thumb模式只能有限地访问r8-r15。

好的,所以ARM具有更广泛的访问范围和更远的覆盖范围,但没有条件分支,而Thumb模式具有更有限的覆盖范围和更受限制的访问权限,对吗? 然而,这似乎会使ARM模式完全线性执行,我的意思是,听起来好像一旦到达B或BL指令,就必须无论如何执行它,我在这里理解错了什么? - user3079666
我不确定你从哪里得到那个想法的。ARM中仍然有条件跳转。 - Polynomial
“除非你跳转,否则分支到子程序只能是无条件的。”你说道,但是没有条件地分支也同样是线性的,不是吗? - user3079666
BX在Thumb指令集中可用!但目标地址必须设置位0,因此模式切换是不可能的。 - TonyK

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接