Professor Wirth made an interesting introduction course in Compiler construction. He follows the same kind descriptive stile he used on his legendary book "Algorithms + Data Structures = Programs" developing a PL/O virtual machine, P-code, and compiler.
This time he do the same, but now using a RISC ideal machine similar (on its programming model) to Patterson & Hennessy DLX processor (Computer Architecture: A Quantitative Approarch, Computer Architecture: A Quantitative Approach). The RISC machine is beautiful and basic. An OBERON program module implementing an Interpreter for this RISC machine is included.
The book cover basic topics like: BNF, a reference to N. Chomsky formal description of languages, and compiler architecture (front-end, back-end).
OBERON programming language is similar to Pascal.
I recommend very much to expose you to basic programming environments like this, as a complement to your normal work with new development technologies like .NET framework and Java framework.
Also, I recommend you the following self-instruction path:
1) Computer Organization and Design, Revised Printing, Third Edition, Third Edition: The Hardware/Software Interface (The Morgan Kaufmann Series in Computer ... Series in Computer Architecture and Design)
2) Compiler Construction (International Computer Science Series)
3) The Art of Computer Programming, Volume 1, Fascicle 1: MMIX -- A RISC Computer for the New Millennium (Art of Computer Programming)
Another good intro to computer organization and general assembly language programming is: Structured Computer Organization (5th Edition)