在Android NDK项目中使用内联ARM asm

时间:2016-08-22 16:42:09

标签: c++ assembly android-ndk arm

我正在使用Android NDK做一个小项目,我必须为ARM架构插入一些asm代码。

除了asm之外的所有东西都运行得很好,但是asm代码告诉我

  

操作数1应该是整数寄存器

当打扰像

这样的简单代码时

asm("mov r0, r0");

那么,问题是什么?我的计算机是否尝试编译x86_64而不是ARM?如果是这样,我该如何改变呢?

另外,我尝试了x86_64等效arm("mov rax, rax");,但错误是一样的。

1 个答案:

答案 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。独立组装也比内联组件提供更多功能。这是避免使用内联汇编的另一个原因。此外,内联汇编语法因编译器与编译器不同而不同,因为它不是标准的一部分。