Nulla ti vieta di programmarne uno utilizzando un linguaggio ad alto livello come python, php o javascript. Gli assembler non fanno altro che prendere un file di testo assembly e trasformarlo in una sequenza di bytes seguendo le regole descritte dal manuale dell'architettura scelta. Non devono fare niente di intelligente e non c'è bisogno di utilizzare linguaggi a basso livello o addirittura il linguaggio macchina.
Scrivere un assembler per x86_64 è un po' un casino perché l'architettura è immensa e ci sono ci sono veramente un casino di opcodes e estensioni varie, ma se prendi un architettura semplice (e.g., RISC-V o MIPS) te la cavi con poco e lo puoi tranquillamente fare a scopo didattico. Non devi nemmeno essere un asso in programmazione perché, come ho già detto, sono programmi semplici... basta avere pazienza e tenere il manuale dell'architettura a portata di mano.