Я читаю книгу «Элементы вычислительных систем: создание современного компьютера из первых принципов» , в которой содержатся проекты, охватывающие сборку компьютера от логических элементов вплоть до приложений высокого уровня (в таком порядке). Текущий проект, над которым я работаю, - это написание ассемблера на языке высокого уровня, который я выбрал, чтобы перевести код ассемблера Hack на машинный код Hack (Hack - это название аппаратной платформы, созданной в предыдущих главах). Хотя все оборудование было встроено в симулятор, я пытался сделать вид, что действительно строю каждый уровень, используя только инструменты, доступные мне на тот момент в реальном процессе.
Тем не менее, это заставило меня задуматься. Использование языка высокого уровня для написания моего ассемблера, безусловно, удобно, но для самого первого ассемблера, когда-либо написанного (т.е. в истории), не нужно ли его писать машинным кодом, поскольку это все, что существовало в то время?
И связанный вопрос ... как насчет сегодня? Если выйдет новая архитектура процессора с новым набором команд и новым синтаксисом сборки, как будет построен ассемблер? Я предполагаю, что вы все еще можете использовать существующий язык высокого уровня для генерации двоичных файлов для программы на ассемблере, поскольку, если вы знаете синтаксис языков ассемблера и машинного языка для вашей новой платформы, тогда задача написания ассемблера - это просто задача анализа текста, которая по своей природе не связана с этой платформой (т. е. должна быть написана на машинном языке этой платформы) ... что является той самой причиной, по которой я могу «обманывать», когда пишу свой Hack-ассемблер в 2012 году, и использовать некоторые существующие ранее язык высокого уровня, чтобы помочь мне.