executar montagem de 32 bits no processador de 64 bits com o mac os x
Eu tenho um problema com a execução de montagem de 32 bits no meu mac de 64 bits executando o x 10.9.5. Eu também tenho o NASM 2.11.08 instalado. Atualmente, estou lendo a linguagem Assembly passo a passo de Jeff Duntemann. No livro, ele especifica instruções para montagem de 32 bits em um sistema operacional Linux. Como posso executar este programa no meu computador 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
Eu tentei montá-lo com
nasm -f elf -g -F stabs eatsyscall.asm
Então eu tento vinculá-lo
ld -o eatsyscall eatsyscall.o
mas eu recebo esse erro
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
Isso deve funcionar, certo? Eu pensei que os processadores de 64 bits da Intel eram capazes de executar programas de 32 bits. Ou não há como executar um programa de montagem escrito para sistemas linux de 32 bits em um mac de 64 bits?
Preciso instalar algum conjunto de bibliotecas de 32 bits para poder vincular esse arquivo? Devo usar algo diferente de NASM, como o GCC? Ou o próprio programa não está escrito corretamente. Obrigado pela ajuda!