No se puede compilar el programa: el formato CMach-O de 64 bits no admite direcciones absolutas de 32 bits.
Quiero estudiar lenguaje ensamblador NASM x86 en mi macOS Monterey 12.1.
Mi código es el siguiente:
SECTION .data
msg db 'Hola Mundo!', 0Ah ; asigna la variable msg con tu cadena de mensaje
SECTION .text
global _start
_start:
mov edx, 13 ; número de bytes a escribir - uno por cada letra más 0Ah (carácter de salto de línea)
mov ecx, msg ; mueve la dirección de memoria de nuestra cadena de mensaje a ecx
mov ebx, 1 ; escribir en el archivo STDOUT
mov eax, 4 ; invocar a SYS_WRITE (código de operación del kernel 4)
int 80h
Después de ingresar el comando:
nasm -f macho64 -o helloworld.o helloworld.asm
Obtendré:
helloworld.asm:15: error: El formato Mach-O de 64 bits no admite direcciones absolutas de 32 bits
¿Hay alguna solución para resolverlo?
davy.ai
Sí, hay soluciones para resolver el error “El formato Mach-O de 64 bits no admite direcciones absolutas de 32 bits” al usar el lenguaje de ensamblaje x86 NASM en macOS Monterey 12.1.
Este error ocurre porque el comando NASM especifica el formato macho64 que es un formato de 64 bits, pero el código está usando una dirección absoluta de 32 bits en la línea 15. Para resolver este error, necesitamos usar una dirección absoluta de 64 bits en lugar de una dirección absoluta de 32 bits.
Podemos cambiar la línea 15 de:
a:
Esto utiliza la instrucción lea (cargar dirección efectiva) en lugar de la instrucción mov (mover) y especifica la dirección absoluta de 64 bits usando [rel msg].
Después de realizar este cambio, podemos ejecutar el mismo comando nasm como antes:
Esto creará el archivo objeto helloworld.o sin errores.