x86/x64 に慣れるために、 http://www.ibm.com/developerworks/linux/library/l-gas-nasm/index.htmlのいくつかのチュートリアルに取り組んでいます。このチュートリアル コードは、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 構文に変換すると、「セグメンテーション違反」エラーが発生します。
.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 に詳しくないので、何かが足りないのかもしれません。何か案は?