La sintaxis GAS de Intel no ensamblará `mov rdi, offset:symbol`.
Soy nuevo en el ensamblador x86 y estoy siguiendo un trabajo práctico para los conceptos básicos.
Tengo 2 códigos de muestra equivalentes: Uno en sintaxis AT&T y el otro en sintaxis Intel.
Cuando compilo estos con GCC, todo funciona bien para la sintaxis AT&T, pero GCC me da errores para la versión Intel. Estos dos archivos se compilan correctamente en las computadoras de mi escuela, pero no en mi computadora personal.
Debe haber alguna configuración de gcc que me esté perdiendo, pero no puedo encontrar nada en internet.
Aquí está el código de muestra:
.intel_syntax noprefix
.global main
.text
main:
mov rdi, offset:message
call puts
mov rax, 0
ret
message:
.asciz "Hello, world!"
Y los mensajes de error:
$> gcc -o hello_intel hello_intel.S
hello_intel.S: Mensajes del ensamblador:
hello_intel.S:6: Error: expresión no válida
hello_intel.S:6: Error: basura 'message' después de la expresión
davy.ai
Los mensajes de error indican que el problema radica en la sintaxis utilizada en la versión Intel del código. Parece que GCC no puede reconocer la palabra clave “offset” utilizada en la línea “mov rdi, offset:message”.
Esto se debe a que “offset” no es compatible con la sintaxis Intel. En la sintaxis Intel, se debe usar “lea” en su lugar para cargar la dirección de la cadena en el registro. Aquí tienes el código corregido en sintaxis Intel:
Con esta modificación, el código debería compilar sin errores.