0

这种类型的代码有什么区别:

    .text
    .globl main
    .type  main, @function
main:
    movl $0, %eax
    movl $0, (%esp)
    call exit

和这种类型的代码:

    section .text
    global _start
_start:
    mov  edx, eax

哪个更传统,更适合优化?

4

3 回答 3

3

第一个是 AT&T 组装风格,第二个是英特尔组装风格。没有真正的大区别。例如,GCC 通常使用 AT&T 样式生成程序集(参见 GNU Assembler GAS),而 Microsoft 和 Intel 编译器将生成 Intel 程序集样式(参见 MASM、NASM)输出。

我更喜欢英特尔风格,因为它对我来说看起来更清晰,但我认为这是个人品味的问题。

有一份关于两种风格差异的文档可能会有所帮助。

http://simon.baymoo.org/universe/tools/symset/symset.txt

于 2013-07-16T07:14:28.783 回答
2

然后首先被称为 AT&T 风格的组装,是可憎的。

第二种是英特尔风格,英特尔在其 x86 指令集文档中使用。

于 2013-07-16T07:14:03.540 回答
0

第一个是用 AT&T 的 GAS 语法编写的。第二个是用 Intel 语法编写的,似乎是为 NASM 编写的。

我想说 Intel 语法更传统,因为他们是 x86 处理器的设计者。尽管您仍然看到使用 AT&T 语法。没有一个比另一个更适合优化。

于 2013-07-16T07:15:55.270 回答