3
我想在我的汇编代码中混合使用ARM和THUMB指令。例如,在下面的代码我尝试使用这两种模式:当我编译这个代码混合ARM和THUMB指令
.thumb @ .code 16
.section __TEXT,__text
.globl mySymbol1
mySymbol1:
....
.arm @ .code 32
.section __TEXT,__text
.globl mySymbol2
mySymbol2:
...
现在,按我的理解到库中,并通过纳米运行它,mysymbol1
应该显示为手臂和mysymbol2
应显示为拇指,即,
0000xxxx (__TEXT,__text) external mySymbol1
0000yyyy (__TEXT,__text) external [Thumb] mySymbol2
但都显示为手臂。我在这里错过了什么?我的汇编指令是:
as -arch armv7 -o a.o a.s
谢谢,这是做到了。你知道这是为什么吗?也可以拇指目标不是一个功能?那么会发生什么? – user1165084 2012-07-20 08:54:49
是的,分支交换(BX)用于切换模式,在其他一些地方,地址的lsbit指示逻辑该地址是拇指地址还是手臂地址,指示模式切换或保持不变。为了让gnu汇编程序产生正确的地址,allthough愚蠢,因为气体已经知道模式,你必须使用thumb_func。我把它称为一个错误,但无论它是什么。其他工具无疑有其自身的细微差别。 (气体喜欢把汇编语言搞乱,只要它不能只是武装) – 2012-07-20 13:48:30
让gnu工具走两条路是可能的,一种方法比另一种方式更容易,我给这个主题的其他人一个很长的回答,加上一些例子,必须为此搜索。有一个命令行开关告诉gnu工具准备在模式之间来回切换。尽管几乎不断的手臂编程我很少需要它,所以我没有记住它。 – 2012-07-20 13:50:07