Por que mudar da sintaxe da AT & T para a Intel torna esse tutorial um segfault usando o GAS?
Estou trabalhando em alguns dos tutoriais sobrehttp://www.ibm.com/developerworks/linux/library/l-gas-nasm/index.html para me familiarizar com x86 / x64. Este código tutorial é compilado e executado sem um soluço usando o código fornecido, que usa a sintaxe AT & T:
.global main
.text
main: # This is called by C library's startup code
mov $message, %rdi # First integer (or pointer) parameter in %edi
call puts # puts("Hello, World")
ret # Return to C library code
message:
.asciz "Hello, World" # asciz puts a 0x00 byte at the end
No entanto, quando eu converter esse código para a sintaxe da Intel, recebo um erro "Falha de segmentação".
.intel_syntax noprefix
.global main
.text
main: # This is called by C library's startup code
mov rdi, message # First integer (or pointer) parameter in %edi
call puts # puts("Hello, World")
ret # Return to C library code
message:
.asciz "Hello, World" # asciz puts a 0x00 byte at the end
Eu não estou familiarizado com o x86, então talvez eu esteja perdendo alguma coisa. Alguma ideia?