这种类型的代码有什么区别:
.text
.globl main
.type main, @function
main:
movl $0, %eax
movl $0, (%esp)
call exit
和这种类型的代码:
section .text
global _start
_start:
mov edx, eax
哪个更传统,更适合优化?
这种类型的代码有什么区别:
.text
.globl main
.type main, @function
main:
movl $0, %eax
movl $0, (%esp)
call exit
和这种类型的代码:
section .text
global _start
_start:
mov edx, eax
哪个更传统,更适合优化?
第一个是 AT&T 组装风格,第二个是英特尔组装风格。没有真正的大区别。例如,GCC 通常使用 AT&T 样式生成程序集(参见 GNU Assembler GAS),而 Microsoft 和 Intel 编译器将生成 Intel 程序集样式(参见 MASM、NASM)输出。
我更喜欢英特尔风格,因为它对我来说看起来更清晰,但我认为这是个人品味的问题。
有一份关于两种风格差异的文档可能会有所帮助。
然后首先被称为 AT&T 风格的组装,是可憎的。
第二种是英特尔风格,英特尔在其 x86 指令集文档中使用。
第一个是用 AT&T 的 GAS 语法编写的。第二个是用 Intel 语法编写的,似乎是为 NASM 编写的。
我想说 Intel 语法更传统,因为他们是 x86 处理器的设计者。尽管您仍然看到使用 AT&T 语法。没有一个比另一个更适合优化。