Estoy leyendo el libro The Elements of Computing Systems: Building a Modern Computer from First Principles , que contiene proyectos que abarcan la construcción de una computadora desde puertas booleanas hasta aplicaciones de alto nivel (en ese orden). El proyecto actual en el que estoy trabajando es escribir un ensamblador usando un lenguaje de alto nivel de mi elección, para traducir del código de ensamblaje de Hack al código de máquina de Hack (Hack es el nombre de la plataforma de hardware construida en los capítulos anteriores). Aunque todo el hardware se ha construido en un simulador, he tratado de fingir que realmente estoy construyendo cada nivel usando solo las herramientas disponibles para mí en ese punto del proceso real.
Dicho eso, me hizo pensar. Usar un lenguaje de alto nivel para escribir mi ensamblador es ciertamente conveniente, pero para el primer ensamblador escrito (es decir, en la historia), ¿no necesitaría estar escrito en código de máquina, ya que eso era todo lo que existía en ese momento?
Y una pregunta correlacionada ... ¿qué tal hoy? Si sale una nueva arquitectura de CPU, con un nuevo conjunto de instrucciones y una nueva sintaxis de ensamblaje, ¿cómo se construiría el ensamblador? Supongo que aún podría usar un lenguaje de alto nivel existente para generar binarios para el programa ensamblador, ya que si conoce la sintaxis de los lenguajes ensamblador y de máquina para su nueva plataforma, entonces la tarea de escribir el ensamblador es realmente solo una tarea de análisis de texto y no está inherentemente relacionada con esa plataforma (es decir, necesita ser escrita en el lenguaje de máquina de esa plataforma) ... esa es la razón por la que puedo "engañar" mientras escribo mi ensamblador Hack en 2012, y utilizo algunos preexistentes lenguaje de alto nivel para ayudarme.