我无法理解ARM程序集中ADDNES
和ADDSNE
之间的区别。有人可以通过一些例子来帮助我吗?
答案 0 :(得分:4)
对于同一指令,它们是不同的拼写。例如,Clang在反汇编时只能处理addnes
格式,但otool
输出addsne
。
示例:
$ cat example.s
addnes r0, r0, #1
$ clang -arch arm -c -o example.o example.s
$ otool -tV example.o
example.o:
(__TEXT,__text) section
00000000 12900001 addsne r0, r0, #1 @ 0x1
但是如果尝试在clang中使用addnse
拼写:
$ cat example.s
addsne r0, r0, #1
$ clang -arch arm -c -o example.o example.s
example.s:1:bad instruction `addsne r0,r0,#1'
clang: error: assembler command failed with exit code 1 (use -v to see invocation)
答案 1 :(得分:0)
这是关于手臂组装的令人困惑的事情之一,所有指令都有条件字段,一些指令有额外的东西,如添加和添加,ne或eq或mi等在哪里去。在s之前还是之后?添加+ ne + s addnes或添加+ s + ne。我希望这些工具能够兼顾两者,但是从接受的答案中可以看出它比这更糟糕,有些人拿另一些拿走另一个。