Я пишу программу hello world для linux x86_64, используя ассемблер GAS, и вот мой код в синтаксисе AT&T.
#.intel_syntax noprefix
.section .data
msg:
.ascii "hello world\n"
.section .text
.globl _start
_start:
movq $1, %rax
movq $1, %rdi
movq $msg, %rsi
movq $12, %rdx
syscall
movq $60, %rax
movq $0, %rdi
syscall
Это работает и печатает «привет, мир». Вот синтаксис Intel:
.intel_syntax noprefix
.section .data
msg:
.ascii "hello world\n"
.section .text
.globl _start
_start:
mov rax, 1
mov rdi, 1
mov rsi, msg
mov rdx, 12
syscall
mov rax, 60
mov rdi, 0
syscall
Это компилируется и работает нормально, но не выводит «привет, мир». Я предполагаю, что ошибка в mov rsi, msg
? Если да, то каков правильный синтаксис?