Почему переход от AT & T к синтаксису Intel делает этот учебный segfault с помощью GAS?
я работаю через некоторые из учебных пособий поhttp://www.ibm.com/developerworks/linux/library/l-gas-nasm/index.html ознакомиться с x86 / x64. Этот учебный код компилируется и запускается без сбоев с использованием предоставленного кода, который использует 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
Однако когда я конвертирую этот код в синтаксис Intel, я получаюОшибка сегментации " error.I»
.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
Я не знаком с x86, так что, возможно, яЯ что-то упустил. Есть идеи?