如果我尝试汇编此程序:
.text
main:
andseq r1,r3,r2,lsl #13
使用命令gcc -c test.s
,出现以下错误:
Error: bad instruction `andseq r1,r3,r2,lsl#13'
经过几次尝试,我将andseq
替换为andeqs
,现在可以正常编译了。
但是如果我用objdump -d test.o
转储生成的obj文件,我会得到:
Disassembly of section .text:
00000000 <main>:
0: 00131682 andseq r1, r3, r2, lsl #13
请注意如何将指令解码为andseq
...。
我想念什么吗?这是错误吗?
我的系统是Raspbian GNU / Linux 8,我的gcc是:gcc(Raspbian 4.9.2-10)4.9.2。我也用gcc-8.1.0(编辑,不是真的看到编辑)进行了测试,结果相同。
编辑:
实际上,我似乎在gcc8中使用了相同的binutils,因此我实际上只测试了此GNU assembler (GNU Binutils for Raspbian) 2.25
。我将尝试使用较新的汇编器。
答案 0 :(得分:3)
为了与旧的汇编文件兼容,GNU缺省为ARM汇编的分开语法。在分开的语法中,andeqs
是您所需指令的正确助记符。您可以发出.syntax unified
指令来选择统一语法,其中andseq
是正确的助记符。
另一方面,GNU objdump只知道统一的语法,这说明了明显的不一致。
对于新的发展,我建议您尽可能使用统一语法。
答案 1 :(得分:0)
ARMv8附录K6“ AArch32指令集的传统指令语法”上有一个不错的UAL与UAL助记符表
该表的条目之一是:
array([ True, False, True, True, True])
其中Pre-UAL syntax UAL equivalent
AND<c>S ANDS<c>
是可能的条件代码eq
之一。