Semi-related: one thing I liked about the video game Turing Complete [1] is that, once you've built the computer and implemented its (binary) machine code ... it doesn't give you an assembly language, or suggest one!
It has you start programming in binary, and then just tells you how to make your own mnemonics to substitute for having to write out each 8-bit input. So you end up picking them based on what commands appear most often in practice.
One instruction I ended up creating was JNEQCI, "jump if not equal, comparing to immediate". (jump if not equal where the first operand is treated as a register and the second as a constant/immediate value)
[1] from LevelHead, and similar to nand2tetris in that you build a computer from its circuits and then program it