How did I learn assembly?
This was my answer on Quora. I moved it here.

By trial and error, and lots of reading.
I grew up in Eskisehir, Turkey, a city in central Anatolia with scarce access to computing resources. My parents had bought me an Amstrad CPC464 after I graduated primary school. I taught myself BASIC and I knew about that mysterious “machine language” but had no access to books at the time, me being only 11 years old not making it any easier.
I would read whatever I could find. Magazine articles, relevant parts of books that I could get my hands on. Nothing specifically about Z80 processor that my machine had, and most of it actually sounded boring, but I think after so many iterations I had grasped the concept of memory and registers: memory was like an array of numbered boxes and registers were like BASIC variables.
I had no idea how to write assembly though because there were no assemblers or documentation available.
In 1989 or so, I encountered an Amstrad specific magazine called “Sizin Amstrad” (Your Amstrad) on the racks of a computer shop.
Şenol Eker had been writing a series teaching assembly language on that magazine, talking about registers, memory layouts. I knew most of the stuff thanks to my previous reading but had no idea how to go about writing assembly. One day, he published a document that was a milestone for me: the opcode table!
It was a list of all possible Z80 instructions and their numeric codes side by side. So even if you didn’t have an assembler, you could use the table to handcraft assembly instructions.
When I tried couple of POKEs, PEEKs and CALLs, which were BASIC commands to manipulate memory and call machine code, I figured out its logic and started writing assembly by “hand-compiling” it.
My process was like this: I would first write assembly code on paper with pseudo jump labels. Then I would find the opcodes and write them on paper and calculate jump offsets. I would put correct hex values in memory for them. Then I would enter each byte on memory and save the resulting binary on disk.
It didn’t run? Start from scratch.
Obviously it was tedious but extremely rewarding. I felt like I had solved the greatest mystery of computers at the time. Here is a scan I could find from my archives that shows a part of my process:
Because I knew how machine language worked I had no trouble learning about x86 assembly later. Compilers, assemblers and debuggers made it a lot easier too.