我正在使用Android NDK做一个小项目,我必须为ARM架构插入一些asm代码。
除了asm之外的所有东西都运行得很好,但是asm代码告诉我
操作数1应该是整数寄存器
当打扰像
这样的简单代码时 asm("mov r0, r0");
那么,问题是什么?我的计算机是否尝试编译x86_64而不是ARM?如果是这样,我该如何改变呢?
另外,我尝试了x86_64等效arm("mov rax, rax");
,但错误是一样的。
答案 0 :(得分:1)
为APP_ABI
中提到的每种体系结构编译所有C源代码。所以没有必要想知道为什么ARM汇编没有被x64编译器理解,反之亦然。
不要使用内联汇编。将所有汇编内容放入专用*.S
源中会更好,这些源将由as
处理(NDK工具链具有它)。应将汇编源放入适当的文件夹,例如arch-arm/
,arch-x86/
。然后你应该正确地将它们添加到Android.mk
:
LOCAL_SRC_FILES := arch-$(TARGET_ARCH)/my_awesome_code.S
$(TARGET_ARCH)
有助于以正确无痛的方式解决适当来源的路径。
P.S。独立组装也比内联组件提供更多功能。这是避免使用内联汇编的另一个原因。此外,内联汇编语法因编译器与编译器不同而不同,因为它不是标准的一部分。