我在尝试为armeabi-v7a编译的某些ARM代码中遇到此错误-显然是v7a之前的东西。
jni/6502asm_arm.S:108:2: error: invalid instruction, did you mean: strexh, strh? streqh r1,[ r4, #28]
我上次编写ARM程序集的程序是在Archimedes上的ARM3,但很明显这streqh
是一个半字存储等于。
我完全被它引起的错误消息困扰:什么时候所有指令都停止在ARM中成为条件指令?那样令我伤心。(我对Thumb有所了解,但我认为这不是Thumb代码。)
我收集的ex
意思是“排他”,需要我获得某种锁定-此应用程序是Android的BBC模拟器,不太可能同时模拟两个6502,因此我认为我可以,strh
但是该怎么做我该eq
怎么办?
我需要使用“ if then else”拇指指令,还是用“ bne
或” 跳过它?我认为整个“一切都有条件”的想法对ARM至关重要。
(虽然我在写,但我怀疑我需要将此代码设为PIC,并且在源代码的末尾有一个表的绝对引用,这些函数实现了6502指令。我想相对于PC的寻址仍然由于管道长度而复杂?我可能会遇到的所有ARM风格的偏移量都一样吗?还是3个字吗?
提前致谢!
ASM语法已进行了修订,从将语法 分为统一语法(UAL)。在新语法中,执行条件始终为最后,因此新助记符为strheq
。
这些其他说明只是名称与您键入的名称相似的说明。他们与您想要的无关。
请注意,如果您是在拇指模式下进行编程,则需要it
在前面具有适当的指令来设置条件执行。有关详细信息,请参见手册。
如果要为GNU汇编器编写汇编文件,则可能需要提供一个
.syntax unified
指令设置统一语法。这可能是clang内置汇编程序的默认设置,但我不确定。