Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/109.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 混合臂和拇指说明_Ios_Assembly_Arm_Thumb - Fatal编程技术网

Ios 混合臂和拇指说明

Ios 混合臂和拇指说明,ios,assembly,arm,thumb,Ios,Assembly,Arm,Thumb,我试图在我的汇编代码中混合使用ARM和THUMB指令。例如,在以下代码中,我尝试使用两种模式: .thumb @ .code 16 .section __TEXT,__text .globl mySymbol1 mySymbol1: .... .arm @ .code 32 .section __TEXT,__text .globl mySymbol2 mySymbol2: ... 现在,根据我的理解,当我将此代码编译到库中并通过nm运行它时,mysymbol1应显示为arm,而mys

我试图在我的汇编代码中混合使用ARM和THUMB指令。例如,在以下代码中,我尝试使用两种模式:

.thumb  @ .code 16
.section __TEXT,__text
.globl mySymbol1
mySymbol1:
 ....
.arm   @ .code 32
.section __TEXT,__text
.globl mySymbol2
mySymbol2:
...
现在,根据我的理解,当我将此代码编译到库中并通过nm运行它时,
mysymbol1
应显示为arm,而
mysymbol2
应显示为thumb,即

0000xxxx (__TEXT,__text) external mySymbol1
0000yyyy (__TEXT,__text) external [Thumb] mySymbol2
但两人都以手臂的姿态出现。我错过了什么?我的汇编程序命令是:

as -arch armv7 -o a.o a.s

您需要在thumb标签之前添加.thumb_func,以使其成为thumb目标,否则gnu工具会将其视为arm目标。(是的,对于要用作thumb目标的每个标签,都需要.thumb once和.thumb_func)。很多例子

谢谢,就是这样。你知道为什么会这样吗?拇指目标也可以不是功能吗?然后会发生什么?是的,分支交换(BX)用于切换模式,在其他几个位置中,地址的lsbit向逻辑指示该地址是thumb地址还是arm地址,指示模式切换还是保持不变。为了让gnu汇编器产生正确的地址,尽管gas知道这种模式很愚蠢,但您必须使用thumb_func。我管它叫虫子,但不管它是什么。毫无疑问,其他工具也有自己的细微差别。(gas喜欢把汇编语言搞得一团糟,因为它不能只使用arm)让gnu工具双向运行是可能的,一种方式比另一种方式容易,我在这个话题上给了其他人一个很长的答案,再加上一些例子,我们必须搜索它。有一个命令行开关,告诉gnu工具准备在模式之间来回切换。尽管我几乎一直在做arm编程,但我很少需要它,所以我没有记住它。