是什么这种类型的代码的区别:不同种类的装配?
.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组装款式,第二个是Intel组装款式。没有真正的重大差异。例如,GCC通常以ATT型产生组装(参见GNU汇编器GAS),而Microsoft和Intel编译器将产生Intel组装式(参见MASM,NASM)输出。
我更喜欢英特尔风格,因为它对我来说似乎更清晰,但我认为这是个人品味的问题。
有一个关于两种风格差异的文档可能会有帮助。
然后首先被称为AT & T型组件,是一种可憎的。
第二种是英特尔风格,英特尔在x86指令集文档中使用它。
为什么它是可憎的?不会像intel风格那样纯粹翻译成机器代码? – user2586185
@ user2586185:对我个人而言:特殊字符混乱 – peterchen
+1 - AT&T是可憎的,是纯粹的邪恶。 :P – johnfound
第一写入AT对GAS & T语法。第二个是用英特尔语法编写的,似乎是用于NASM的。
我会说英特尔语法更传统,因为他们是x86处理器的设计者。尽管您仍然看到AT & T语法被使用。没有一个比另一个更适合优化。
它们不是两种不同的类型,它是用两种不同的语法编写的相同程序集(英特尔汇编程序)。 – m0skit0
嗯,寻找什么样的优化?这是我们在这里讨论的汇编语言。在达到这一点之前,应该先完成优化。 –