assembly ARM汇编中的“更改指令集”--这到底是什么意思?

c7rzv4ha  于 2023-08-06  发布在  其他
关注(0)|答案(1)|浏览(130)

BX改变了我们这里的手册中所说的指令集,就我所能找到的搜索范围而言,这意味着当CPU运行16位Thumb指令集时,它这次接受32位地址(我没有发现任何迹象表明以下命令会发生任何变化),以便您可以分支到更远的点,我理解得对吗?若有,是否全部呢?
据说我们使用的是Atmel AT91,大概是Cortex M3类型,但我能找到的关于Cortex M3的任何东西似乎都与我们所做的明显不同,虽然我在Keil uVision中找不到AT91,但他们也认为我们使用的是一位教授开发的平台,因此我怀疑这不是我们正在做的真实的事情。但我还是想知道这是什么东西,因为我正在考虑调查一般的组装...

rqmkfv5c

rqmkfv5c1#

您提到的处理器(Cortex M3)不支持ARM指令,因此BX对您不可用。只能使用基本Thumb指令。
话虽如此,还是值得给你一些背景知识:
BX指令执行分支(即,跳转),并根据分支地址的第0位将处理器切换到ARM或Thumb模式。这样做的目的不是让你跳得更远,而只是在模式之间切换。由于所有支持此指令的处理器都以ARM模式启动,因此切换到Thumb模式不会 * 增加 * 您的跳跃距离。
关于Thumb vs. ARM模式是微妙的,太多了,无法在这里列出,但一个很好的资源可以找到here。由于链接本身可能会死,这里有一个总结:

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

相关问题