A bit off topic, but...
If you are into assembly language, then C is a good choice once you get a hang of it. C is essentially a processor independent assembler. Meaning, you will have a good grasp of what your "high level" code actually means in assembly instructions, but you do not need to bother about keeping track of registers as the C compiler does it for you.
If you study the code generated without optimizations enabled, you should get a good grasp of what is going on. If you then let a good optimizer do its work, you will probably have a harder time understanding how it can change it so much, and you will probably appreciate the work it does.
If you want to take the C route, "Expert C programming - Deep C secrets" is a good second book. It is written by a compiler engineer at Sun.
Pascal is a language in the same family, essentially the same thing with a bit different syntax (ducking).