Il n'apparait toujours pas clairement quel langage tu souhaites compiler.
Tu doit définir :
Le langage source = ?
Le langage cible = assembleur
Le langage hote = le langage utilisé pour écrire ton compilateur = ?
La première étape sera de définir la syntaxe abstraite (= la représentation interne ce celle-ci) et la syntaxe concrète de ton langage source (qui elle normalement est déjà définie car ton langage source existe déjà).
Tout comme godrik, je te conseillerais de commencer par un interpréteur. Il y a plusieurs avantages à cela. C'est globalement plus simple, tout en t'habituant à manipuler de la syntaxe (analyse syntaxique & grammaire & construction d'un parser, analyse lexicale & expressions régulières & construction d 'un lexer), tout en t'évitant de te soucier de la génération de code.
Et ces premières étapes sont de toutes façon aussi nécessaire pour un compilateur.
Si vraiment tu veux écrire un compilateur, choisit comme langage cible un langage interprété, comme du bytecode java. Tu n'auras pas à te soucier de l'allocation de registres (qui seront au passages virtuellement illimités), de l'architecture du processeur, et d'autres détails très techniques de bas niveau.
Mais pour moi, ce genre de projet se fait surtout à la fac (en M1), après un cours de théorie des langages (en L3), et idéalement pendant un cours sur les compilateurs et la génération de code. Si tu y vas en bricolant, sans connaissances théoriques ça ne risque pas de marcher fort (encore plus vrai pour compiler un langage de haut niveau vers de l'asm).
Et je confirme, le dragon book est la référence ultime. Et en prime, il se lit vraiment bien.
Enfin, mais c'est plutôt personnel, si tu t'intéresse à la manipulation de syntaxe, à l'interprétation, à la compilation et la traduction de langages, je ne peux que te conseiller très vivement de t'intéresser dans un premier temps aux langages fonctionnels (Ocaml ou Haskell). Ces langages sont le meilleur choix pour écrire un compilateur (= langage hote), car ils disposent d'abstractions très utiles pour manipuler de tels concepts abstraits.
Tu peux par exemple lire ça sur le langage Ocaml : http://caml.inria.fr/distrib/books/llc.pdf
Un des derniers chapitres aborde justement la compilation d'un (mini-)langage impératif.
Bon courage !