Почему переход от 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, так что, возможно, яЯ что-то упустил. Есть идеи?

Ответы на вопрос(1)

Ваш ответ на вопрос