我想写一个小的低级程序.对于它的某些部分,我将需要使用汇编语言,但其余代码将使用C/C++编写.
那么,如果我使用GCC将C/C++与汇编代码混合在一起,我是否需要使用AT&T语法,还是可以使用Intel语法?或者你如何以其他方式混合使用C/C++和asm(intel语法)?
我意识到也许我没有选择,必须使用AT&T语法,但我想确定..
如果结果没有选择,我可以在哪里找到有关AT&T语法的完整/官方文档?
谢谢!
16(%esp)真的违反直觉[esp+16]吗?是不是更合乎逻辑:
eax = 5
mov eax, 5
Run Code Online (Sandbox Code Playgroud)
at at&t是:
mov 5, eax
5 = a (? wait what ?)
Run Code Online (Sandbox Code Playgroud)
注意:我不是想乱跑.我只是不明白他们所做的设计选择,我试图了解他们为什么做了他们所做的.
所以每个在线资源都告诉我这样的事情:
cmp %eax, %ebx
jg < something >
Run Code Online (Sandbox Code Playgroud)
如果 eax 大于 ebx,将跳转到 < something >。但我有另一段似乎与此矛盾的代码:
cmp $0x2, %eax
jg < something>
Run Code Online (Sandbox Code Playgroud)
当 eax 的值为 3 时,它会跳转到 < something >。
我是否遗漏了什么,或者如果 b > a 而不是 a>b,cmp a, b - jg 是否执行?这是否也适用于其他跳转语句?