Assembly Language for Beginners [pdf]
I actually got paid a salary for learning & programming in IBM mainframe assembler (BAL or Basic Assembly Language) in 1970, for an insurance company. The CPU memory was so small (32K, yes 32,768 bytes) that the only way we could squeeze enough functionality was to write in assembler, with overlays (no virtual memory). Debugging consisted of manually toggling hex data and instructions at the control panel. What a blast!<p>It was a lot of fun, but terribly inefficient programmer productivity. I would not want to go back  :o)  Dereferencing registers prepared me for C pointers later.