As was stated previously **Learn Assembly**.

> An assembly language is a low-level programming language for computers, microprocessors, microcontrollers, and other programmable devices. It implements a symbolic representation of the machine codes and other constants needed to program a given CPU architecture.

So Assembly is a `symbolic representation of machine code`.

You may now be asking "Ok, so how do I learn it?" I am glad you asked:

 1. **Understand what it is.** It is very *low-level* and will give you a very in-depth understanding of a computer. You might want to start with [Wikipedia][1] and then read [this short passage][2].
 2. **Learn it!** Best reads are probably [The Art of Assembly Language][3] and [Assembly Language Step-by-Step: Programming with Linux][4]
 3. **Get coding!**

  [1]: http://en.wikipedia.org/wiki/Assembly_language
  [2]: http://www.swansontec.com/sprogram.html
  [3]: http://www.amazon.com/Art-Assembly-Language-Randall-Hyde/dp/1886411972
  [4]: http://www.amazon.com/dp/0470497025/?tag=stackoverfl08-20