Low-Level Programming University – A roadmap to becoming a low-level programmer
Compiler backends are another topic that can really extends one's knowledge of their hardware. You end up having to learn a least a bit of every layer underneath your code e.g.  ISAs, Calling Conventions and scheduling.