2010-04-22 21 views
5

Piszę kompilator i przeszedłem wszystkie kroki (tokenizowanie, parsowanie, struktury drzewa składni itp.), Które pokazują we wszystkich książkach kompilatora. (Proszę nie komentować z linkiem do pytania "Zasoby do pisania kompilatora"!).Wybór odpowiedniego asemblera do kompilatora

Wybrałem użycie NASM razem z alink jako moim zapleczem.

Teraz mój problem: po prostu nie mogę znaleźć żadnych dobrych zasobów do nauki NASM i ogólnie zgromadzeń.

Wikibook (niemiecki) na temat montażu x86 to straszny. Nie wyjaśniają nawet kodu, który tam piszą, obecnie nie mogę nawet uzyskać prostych rzeczy, takich jak dodawanie od 1 do 2 i wysyłanie wyniku działania.

  • Gdzie mogę się nauczyć zestawu NASM x86?
+2

Nie ma powodu, dla którego kompilator musi wyprowadzać asembler. Niech wyprowadza język, który znasz, taki jak C, a następnie użyje kompilatora C (lub innego), aby wygenerować ostateczny plik wykonywalny. –

+0

twoje pytanie brzmi bardziej "Gdzie mogę się nauczyć montażu NASM x86?" jak sam się oświadczyłeś. Wybierz lepszy temat, ponieważ nie ma on nic wspólnego z kompilatorami. Czy brałeś pod uwagę llvm? – topskip

+1

Punkty bonusowe wyświetlają kod w tym samym języku, który kompiluje. Następnie skompiluj to. –

Odpowiedz

1

Cóż, jeśli przyjmiesz książkę jako punkt odniesienia. Moim ulubionym autorem od czasów nauki Pascala w latach 80. był Jeff Duntemann. Jego najnowsza książka montażowa obejmuje NASM. http://www.duntemann.com/assembly.htm

Nie wiesz, co OS jesteś targetting, ale fakt, że powyższa książka jest targetting Linux nie powinno być problemem, konstrukty montażowe są tym, co Cię interesuje.

Aby Szczerze mówiąc, rzeczywiste złożenie do generowania kodu nie jest najtrudniejszą częścią, IMHO Myślę, że zarządzanie rejestrem jest tam, gdzie jest prawdziwa nauka.

Powodzenia!

1

Chyba że sprawdziliśmy to, instrukcja NASM jest bardzo dobrym źródłem do nauki o NASM: http://www.nasm.us/doc/

Porównanie NASM i gaz pomaga również się nieco: Kanał #asm http://www.ibm.com/developerworks/linux/library/l-gas-nasm.html

IRC Freenode se (R) ver zapewnia te linki:

ja również poświęcony czas na zacier się trochę Hello World dla Ciebie:

bits 32 
section .data 
    greeting db "hello world", 10 
section .text 
global _start 
_start: 
    mov eax, 4 ; sys_write 
    mov ebx, 1 ; stdout 
    mov ecx, greeting 
    mov edx, 12 ; greeting.length 
    int 0x80 ; system call interrupt 

    mov eax, 1 ; sys_exit 
    mov ebx, 0 
    int 0x80 

Połącz z:

nasm -f elf -o example.o example.asm 
ld -o example example.o -melf_i386 

Sam napisałem mały generator kodu w pythonie. Chociaż opuściłem to coś w połowie temu. Ostatnio napisałem nieco inne narzędzie, które może się przydać każdemu, kto zmaga się z montażem. W tej chwili też proszę o pomoc ...Poza tym wydaje mi się, że muszę tam zrobić kilka samopomocy: x86 instruction encoding tables

Stary generator kodu, który mam, jest w http://bitbucket.org/cheery/g386/, dopóki nie zostanie uruchomiony mój nowy generator kodu oparty na tabelach.

Powiązane problemy