Dlaczego przełączenie z AT&T na składnię Intela powoduje, że samouczek jest segregowany przy użyciu GAS?
Pracuję nad niektórymi samouczkamihttp://www.ibm.com/developerworks/linux/library/l-gas-nasm/index.html zapoznać się z x86 / x64. Ten kod samouczka kompiluje się i działa bez czkawki przy użyciu dostarczonego kodu, który używa składni 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
Jednak po przekonwertowaniu tego kodu na składnię Intela pojawia się błąd „Błąd segmentacji”.
.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
Nie znam x86, więc może coś mi brakuje. Jakieś pomysły?