ejecutar ensamblaje de 32 bits en procesador de 64 bits con mac os x
Tengo un problema al ejecutar el ensamblaje de 32 bits en mi Mac de 64 bits con OS x 10.9.5. También tengo instalado NASM 2.11.08. Actualmente estoy leyendo lenguaje ensamblador paso a paso por Jeff Duntemann. En el libro especifica instrucciones para el ensamblaje de 32 bits en un sistema operativo Linux. ¿Cómo puedo ejecutar este programa en mi computadora Mac OS x de 64 bits?
; eatsyscall.asm
SECTION .data ; Section containing initialised data
EatMsg: db "Eat at Joes!",10
EatLen: equ $-EatMsg
SECTION .bss ; Section containing uninitialized data
SECTION .text ; Section containing code
global _start ; Linker needs this to find the entry point!
_start:
nop ; This no-op keeps gdb happy...
mov eax,4 ; Specify sys_write call
mov ebx,1 ; Specify File Descriptor 1: Standard Output
mov ecx,EatMsg ; Pass offset of the message
mov edx,EatLen ; Pass the length of the message
int 80H ; Make kernel call
MOV eax,1 ; Code for Exit Syscall
mov ebx,0 ; Return a code of zero
int 80H ; Make kernel call
He intentado ensamblarlo con
nasm -f elf -g -F stabs eatsyscall.asm
Luego trato de vincularlo con
ld -o eatsyscall eatsyscall.o
pero me sale este error
ld: warning: -arch not specified
ld: warning: -macosx_version_min not specified, assuming 10.6
ld: warning: ignoring file eatsyscall.o, file was built for unsupported file format ( 0x7F 0x45 0x4C 0x46 0x01 0x01 0x01 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ) which is not the architecture being linked (x86_64): eatsyscall.o
Undefined symbols for architecture x86_64:
"start", referenced from:
implicit entry/start for main executable
ld: symbol(s) not found for inferred architecture x86_64
Esto debería funcionar, ¿verdad? Pensé que los procesadores Intel de 64 bits eran capaces de ejecutar programas de 32 bits. ¿O no hay forma de ejecutar un programa de ensamblaje escrito para sistemas Linux de 32 bits en una Mac de 64 bits?
¿Necesito instalar algún conjunto de bibliotecas de 32 bits para poder vincular este archivo? ¿Debo usar algo que no sea NASM como GCC? ¿O el programa en sí no está escrito correctamente? ¡Gracias por la ayuda!