> can't even begin to write an assembler
An assembler is a 1-1 mapping. If you can read some text, and you can write some bytes, then you can write an assembler. Everything in between is just a case of reading the manual! It's just some ifs - if the user's written this instruction name, then emit these bytes.
I work on compilers and I'm awe of people who work on web apps because they genuinely seem far more complicated than what I do.