Je lis le livre Les éléments des systèmes informatiques: Construire un ordinateur moderne à partir de Premiers principes , qui contient des projets englobant la construction d'un ordinateur, des portes booléennes aux applications de haut niveau (dans cet ordre). Le projet actuel sur lequel je travaille consiste à écrire un assembleur en utilisant un langage de haut niveau de mon choix, pour convertir du code d'assemblage Hack en code machine Hack (Hack est le nom de la plate-forme matérielle construite dans les chapitres précédents). Bien que le matériel ait été construit dans un simulateur, j'ai essayé de prétendre que je construisais réellement chaque niveau en utilisant uniquement les outils dont je disposais à ce stade du processus réel.
Cela dit, ça m'a fait réfléchir. Utiliser un langage de haut niveau pour écrire mon assembleur est certes pratique, mais pour le tout premier assembleur écrit (c’est-à-dire dans l’histoire), n’aurait-il pas besoin de l’écrire en code machine, c’est tout ce qui existait à l’époque?
Et une question corrélée ... et aujourd'hui? Si une nouvelle architecture de processeur, avec un tout nouveau jeu d'instructions et une toute nouvelle syntaxe d'assemblage, apparaît, comment l'assembleur sera-t-il construit? Je suppose que vous pouvez toujours utiliser un langage de haut niveau existant pour générer des fichiers binaires pour le programme assembleur, car si vous connaissez la syntaxe des langages assembleur et machine pour votre nouvelle plate-forme, alors la tâche d'écrire l'assembleur n'est vraiment qu'un travail. tâche d'analyse de texte et n'est pas intrinsèquement liée à cette plate-forme (c'est-à-dire qu'elle doit être écrite dans le langage machine de cette plate-forme) ... c'est la raison même pour laquelle je suis en mesure de "tricher" lors de l'écriture de mon assembleur Hack en 2012, et d'utiliser certains éléments préexistants. langue de haut niveau pour m'aider.