Sto leggendo il libro Gli elementi dei sistemi informatici: costruire un computer moderno dai primi principi , che contiene progetti comprendendo la costruzione di un computer dai cancelli booleani fino alle applicazioni di alto livello (in quest'ordine). L'attuale progetto su cui sto lavorando è scrivere un assemblatore usando un linguaggio di alto livello a mia scelta, per tradurre dal codice assembly Hack al codice macchina Hack (Hack è il nome della piattaforma hardware costruita nei capitoli precedenti). Sebbene l'hardware sia stato interamente costruito in un simulatore, ho provato a fingere di costruire davvero ogni livello usando solo gli strumenti a mia disposizione in quel momento del processo reale.
Detto questo, mi ha fatto pensare. Usare un linguaggio di alto livello per scrivere il mio assemblatore è certamente conveniente, ma per il primissimo assemblatore mai scritto (cioè nella storia), non dovrebbe essere scritto in codice macchina, dato che è tutto ciò che esisteva in quel momento?
E una domanda correlata ... che ne dici di oggi? Se viene fuori una nuova architettura della CPU, con un set di istruzioni completamente nuovo e una sintassi di assemblaggio completamente nuova, come sarà costruito l'assemblatore? Suppongo che si possa ancora usare un linguaggio di alto livello esistente per generare binari per il programma assemblatore, dal momento che se si conosce la sintassi di entrambi i linguaggi di assemblaggio e macchina per la nuova piattaforma, allora il compito di scrivere l'assemblatore è davvero solo un compito di analisi del testo e non è inerentemente correlato a quella piattaforma (cioè deve essere scritto nel linguaggio macchina di quella piattaforma) ... che è la vera ragione per cui sono in grado di "imbrogliare" mentre scrivo il mio assemblatore Hack nel 2012, e usare alcuni preesistenti un linguaggio di alto livello per aiutarmi.