2013-07-16 32 views
0

是什么这种类型的代码的区别:不同种类的装配?

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

和这种类型的代码:

section .text 
    global _start 
_start: 
    mov edx, eax 

哪个更传统和优化更好?

+1

它们不是两种不同的类型,它是用两种不同的语法编写的相同程序集(英特尔汇编程序)。 – m0skit0

+0

嗯,寻找什么样的优化?这是我们在这里讨论的汇编语言。在达到这一点之前,应该先完成优化。 –

回答

3

第一个是AT & T组装款式,第二个是Intel组装款式。没有真正的重大差异。例如,GCC通常以ATT型产生组装(参见GNU汇编器GAS),而Microsoft和Intel编译器将产生Intel组装式(参见MASM,NASM)输出。

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

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

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

2

然后首先被称为AT & T型组件,是一种可憎的。

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

+0

为什么它是可憎的?不会像intel风格那样纯粹翻译成机器代码? – user2586185

+1

@ user2586185:对我个人而言:特殊字符混乱 – peterchen

+2

+1 - AT&T是可憎的,是纯粹的邪恶。 :P – johnfound

0

第一写入AT对GAS & T语法。第二个是用英特尔语法编写的,似乎是用于NASM的。

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