I've been writing a two-pass x64 assembler, which supports pretty much all x64 instructions, including various extensions.
It also supports simple things like labels (including out-of-order definitions), memory defines and reserves, and some other keywords.