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.

https://github.com/Goubermouche/baremetal