我在尝试为 armeabi-v7a 编译的一些 ARM 代码中遇到此错误 - 显然是 v7a 之前的内容。
jni/6502asm_arm.S:108:2: error: invalid instruction, did you mean: strexh, strh?
streqh r1,[ r4, #28]
我上次编写 ARM 汇编程序是在阿基米德上编写 ARM3,但很明显streqh
是一个半字存储如果相等。
我对它导致的错误消息感到完全困惑:什么时候所有指令在 ARM 中不再有条件?那样令我伤心。 (我对 Thumb 了解一些,但我不认为这是 Thumb 代码。)
我认为ex
意味着“独占”,需要我获得某种锁定 - 这个应用程序是 Android 的 BBC 模拟器,它不太可能同时模拟两个 6502,所以我想我可以接受strh
但我该怎么办eq
?
我是否需要使用“if then else”拇指指令,或者用bne
或者是什么?我认为“一切皆有条件”的理念是 ARM 的核心。
(在我写作时,我怀疑我需要使这段代码成为 PIC,并且在源代码末尾有一个对实现 6502 条指令的函数的绝对引用表。我认为 PC 相对寻址仍然因管道长度而变得复杂?我可能遇到的所有 ARM 版本的偏移量是否相同?仍然是 3 个字吗?:)
提前致谢!
已经有一个ASM 语法的修订 from 分割语法 into 统一语法(UAL)。在新语法中,执行条件始终位于最后,因此新助记符为strheq
.
这些其他指令只是名称与您键入的指令类似的指令。它们与你想要的无关。
请注意,如果您在拇指模式下编程,则需要有一个合适的it
前面的指令设置条件执行。详细信息请参阅手册。
如果您正在为 GNU 汇编器编写汇编文件,您可能需要提供
.syntax unified
指令设置统一语法。这可能是 clang 内置汇编器的默认设置,但我不确定。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)