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

wydwbb8l  于 2023-08-06  发布在  Android
关注(0)|答案(1)|浏览(97)

我正在使用Android NDK做一个小项目,我必须插入一些ARM架构的asm代码。
除了asm之外,其他的都可以正常工作,但是asm代码告诉我
操作数1应为整数寄存器
当编译简单的代码时,如
第一个月
那么,问题是什么?我的计算机是否尝试编译x86_64而不是ARM?如果是这样,我应该如何改变这一点?
另外,我尝试了x86_64等价的arm("mov rax, rax");,但错误是相同的。

m528fe3b

m528fe3b1#

所有的C源代码都是针对APP_ABI中提到的每个架构编译的。因此,没有必要怀疑为什么x64编译器不能理解ARM汇编,反之亦然。
不要使用内联程序集。最好是将所有汇编文件放到专用的*.S源中,这些源将由as处理(NDK工具链有)。这些程序集源应该放在适当的文件夹中,如arch-arm/arch-x86/。然后你应该把它们正确地添加到Android.mk中:

LOCAL_SRC_FILES := arch-$(TARGET_ARCH)/my_awesome_code.S

字符串
$(TARGET_ARCH)有助于以正确和无痛的方式解析到适当源的路径。
另外,独立汇编比内联汇编提供了更多的能力。这是避免使用内联汇编的另一个原因。此外,内联汇编语法因编译器而异,因为它不是任何标准的一部分。

相关问题