Написание компилятора в школе, последний этап - генерация ассемблерного кода. Пытаюсь выучить NASM. Начиная с самого начала, http://www.cs.lmu.edu/~ray/notes/nasmexamples/, пытается скомпилировать Hello World.
; ----------------------------------------------------------------------------
; helloworld.asm
;
; This is a Win32 console program that writes "Hello, World" on one line and
; then exits. It needs to be linked with a C library.
; ----------------------------------------------------------------------------
global _main
extern _printf
section .text
_main:
push message
call _printf
add esp, 4
ret
message:
db 'Hello, World', 10, 0
Чтобы собрать, связать и запустить эту программу под Windows:
nasm -fwin32 helloworld.asm
gcc helloworld.obj
a
В Linux вам нужно удалить начальные подчеркивания из имен функций и выполнить
nasm -felf helloworld.asm
gcc helloworld.o
./a.out
Но я на OSX. Нашел этот маленький ресурс: http://salahuddin66.blogspot.com/2009/08/nasm-in-mac-os-x.html. В Mac OS X мы должны использовать формат macho ...
nasm -f macho -o hello.o hello.asm
... и для компоновщика (нам нужно указать точку входа) ...
ld -e main -o hello hello.o
Но когда я это сделаю ...
Undefined symbols:
"printf", referenced from:
_main in hello.o
ld: symbol(s) not found for inferred architecture i386
Извините, я знаю, что много читать. И я сомневаюсь, что есть много кодеров NASM вокруг этих частей, но стоит попробовать, верно? Буду признателен за любую помощь.