相关疑难解决方法(0)

我可以在GCC中使用x86汇编的Intel语法吗?

我想写一个小的低级程序.对于它的某些部分,我将需要使用汇编语言,但其余代码将使用C/C++编写.

那么,如果我使用GCC将C/C++与汇编代码混合在一起,我是否需要使用AT&T语法,还是可以使用Intel语法?或者你如何以其他方式混合使用C/C++和asm(intel语法)?

我意识到也许我没有选择,必须使用AT&T语法,但我想确定..

如果结果没有选择,我可以在哪里找到有关AT&T语法的完整/官方文档?

谢谢!

c x86 assembly gcc inline-assembly

59
推荐指数
2
解决办法
3万
查看次数

关于AT&T x86语法设计的问题

  1. 任何人都可以向我解释为什么AT&T语法中的每个常量前面都有一个"$"?
  2. 为什么所有寄存器都有'%'?
  3. 这只是让我做很多蹩脚打字的另一种尝试吗?
  4. 另外,我是唯一一个发现:16(%esp)真的违反直觉[esp+16]吗?
  5. 我知道它编译成同样的东西,但为什么有人想要输入很多'$'和'%'而不需要? - 为什么GNU选择此语法作为默认语法?
  6. 另一件事,为什么at&t语法中的每条指令前面都有一个:l? - 我知道它的操作数大小,但为什么不让汇编程序弄清楚呢?(我是否想要在不是那么大的操作数上做一个movl?)
  7. 最后一件事:为什么mov参数倒置了?

是不是合乎逻辑:

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)

注意:我不是想乱跑.我只是不明白他们所做的设计选择,我试图了解他们为什么做了他们所做的.

x86 assembly att intel-syntax

18
推荐指数
3
解决办法
1894
查看次数

关于 AT&T 语法汇编中的 cmp/jg、jle 等

所以每个在线资源都告诉我这样的事情:

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 是否执行?这是否也适用于其他跳转语句?

x86 assembly att

3
推荐指数
1
解决办法
1803
查看次数

标签 统计

assembly ×3

x86 ×3

att ×2

c ×1

gcc ×1

inline-assembly ×1

intel-syntax ×1