Warum führt die Umstellung von AT & T auf Intel-Syntax dazu, dass dieses Lernprogramm GAS verwendet?

Ich arbeite gerade an einigen Tutorialshttp://www.ibm.com/developerworks/linux/library/l-gas-nasm/index.html um mich mit x86 / x64 vertraut zu machen. Dieser Tutorial-Code kompiliert und läuft ohne Probleme mit dem bereitgestellten Code, der die AT & T-Syntax verwendet:

.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

Wenn ich diesen Code jedoch in Intel-Syntax konvertiere, wird der Fehler "Segmentierungsfehler" angezeigt.

.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 ist mir nicht vertraut, daher fehlt mir möglicherweise etwas. Irgendwelche Ideen?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage