2010-04-22 5 views
5

Sto scrivendo un compilatore e ho seguito tutti i passaggi (tokenizzazione, analisi, struttura della struttura della sintassi, ecc.) Che mostrano in tutti i libri del compilatore. (Si prega di non commentare con il link alla domanda "Risorse per scrivere un compilatore"!).Scelta dell'assemblatore corretto e di apprendimento per la scrittura del compilatore

Ho scelto di utilizzare NASM insieme a alink come backend.

Ora il mio problema è: non riesco a trovare alcuna buona risorsa per l'apprendimento di NASM e assemblaggio in generale.

Il wikibook (tedesco) sull'assemblaggio x86 è orribile. Non spiegano nemmeno il codice che scrivono lì, al momento non riesco nemmeno a ottenere cose semplici come aggiungere 1 a 2 e produrre risultati positivi.

  • Dove posso imparare l'assembly NASM x86?
+2

Non c'è alcun motivo per cui un compilatore deve emettere l'assemblatore. Hanno generato un linguaggio con cui hai familiarità, come C, e quindi usa il compilatore C (o qualsiasi altra cosa) per produrre l'eseguibile finale. –

+0

la tua domanda è più simile a "Dove posso imparare l'assembly NASM x86?" come ti sei detto. Si prega di scegliere un argomento migliore, in quanto non ha nulla a che fare con i compilatori. Hai preso in considerazione llvm? – topskip

+1

Per i punti bonus, invia il tuo codice nella stessa lingua che sta compilando. Quindi compila quello. –

risposta

1

Bene, se si accetta un libro come riferimento. Il mio autore preferito dai tempi in cui ho appreso Pascal negli anni '80 era Jeff Duntemann. Il suo ultimo libro di assemblaggio copre NASM. http://www.duntemann.com/assembly.htm

Non sei sicuro di quale sistema operativo ci si rivolge, ma il fatto che il libro di cui sopra è destinati a Linux non deve essere essere un problema, i costrutti di montaggio sono ciò che interessa.

Per essere onesti, la l'assemblaggio effettivo per la generazione del codice non è la parte più difficile, credo che la gestione dei registri sia dove si trova il vero apprendimento.

Buona fortuna!

1

A meno che non hai controllato fuori, manuale di NASM è abbastanza buona risorsa per l'apprendimento NASM: http://www.nasm.us/doc/

Confronto di NASM e GAS aiuta anche un po ': http://www.ibm.com/developerworks/linux/library/l-gas-nasm.html

canale IRC#asm a Freenode SE (r) ver fornisce questi collegamenti:

ho anche dedicato del tempo per schiacciare un po 'ciao mondo per voi:

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 

Assemblare questo con:

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

ho io scritto un piccolo generatore di codice in python. Anche se ho lasciato quella cosa a metà tempo fa. Recentemente ho scritto uno strumento un po 'diverso che potrebbe diventare utile per chiunque si occupi di assemblare. In questo momento sto anche chiedendo aiuto ...Tranne sembra che devo fare un po 'di auto-aiuto lì: x86 instruction encoding tables

Il vecchio pezzo di generatore di codice che ho è in http://bitbucket.org/cheery/g386/ finché non avrò il mio nuovo generatore di codice basato su tabella attivo e funzionante.

Problemi correlati