Estou lendo o livro Os Elementos dos Sistemas de Computação: Construindo um Computador Moderno a partir dos Primeiros Princípios , que contém projetos que abrangem a construção de um computador a partir de portas booleanas até aplicativos de alto nível (nessa ordem). O projeto atual no qual estou trabalhando é escrever um assembler usando uma linguagem de alto nível de minha escolha, para traduzir do código de montagem Hack para o código da máquina Hack (Hack é o nome da plataforma de hardware criada nos capítulos anteriores). Embora o hardware tenha sido todo construído em um simulador, tentei fingir que estou realmente construindo cada nível usando apenas as ferramentas disponíveis para mim naquele momento do processo real.
Dito isto, me fez pensar. Usar uma linguagem de alto nível para escrever meu assembler é certamente conveniente, mas para o primeiro assembler já escrito (ou seja, na história), não seria necessário escrever em código de máquina, já que era tudo o que existia na época?
E uma pergunta correlata ... e hoje? Se surgir uma nova arquitetura de CPU, com um novo conjunto de instruções e uma nova sintaxe de montagem, como o montador seria construído? Suponho que você ainda possa usar uma linguagem de alto nível existente para gerar binários para o programa assembler, pois se você conhece a sintaxe das linguagens assembly e de máquina para sua nova plataforma, a tarefa de escrever o assembler é realmente apenas um tarefa de análise de texto e não está inerentemente relacionada a essa plataforma (ou seja, precisa ser escrita na linguagem de máquina dessa plataforma) ... essa é a razão pela qual sou capaz de "trapacear" ao escrever meu Hack assembler em 2012 e usar alguns recursos pré-existentes linguagem de alto nível para me ajudar.