Язык ассемблера более низкого уровня? (как реализованы инструкции процессора?)
Таким образом, самый низкий уровень, который мы можем "запрограммировать", - это отдельные инструкции на процессоре, но эти инструкции должны были быть запрограммированы как-то в первую очередь. Как процессор знает, что делать при выполнении инструкции?
4 ответа
Полезные статьи:
http://www.gamezero.com/team-0/articles/math_magic/micro/ Как разработать простой процессор...
Конспект лекций к этому курсу: http://www.stanford.edu/class/ee382/ Процессор Дизайн
Он называется "микрокод" (или, по крайней мере, так он назывался, когда я в последний раз смотрел на эти 15 с лишним лет назад).
Различные аппаратные функциональные механизмы в процессоре координируются с программным обеспечением "микрокода": извлекать, декодировать "машинный код", выполнять и т. Д.
Думая упрощенно, как это делали старые процессоры:
Если вы посмотрите на биты инструкций для большинства процессоров, вы начнете видеть шаблоны. Несколько битов определяют один из входных регистров, несколько битов могут определять другой входной регистр, несколько битов могут определять регистр результата, а несколько битов определяют операцию. Таким образом, некоторые части аппаратного обеспечения обращаются к битам, которые определяют операнд a, и они используют его для соединения операнда a с alu, другие аппаратные средства используют биты операнда b для направления операнда b на вход b на alu. Другие биты выбирают операцию, которую должен выполнять alu, добавлять и / или xor и т. Д. Наконец, биты результата направляют вывод alu в регистр, который должен содержать результат. Немного упрощенно, но в то же время не так уж и далеко от того, как пишется логика и как работают традиционные процессоры и многие меньшие. Это буквально то, как работали самые ранние компьютеры, и "программирование" их включало маршрутизацию ответа из этого alu во входные данные этого alu вместе с входными данными от другого, пока результат не достигнет конца, который вы искали.
Некоторые из более крупных современных процессоров имеют микрокодирование, то есть внутри фактически находится другой слой инструкций, ваша операция c = a + b может превратиться в серию микрокодированных инструкций, которые запускаются при входе вашей машинной инструкции, и это поможет выполнить направьте входы к логике сумматора и результат обратно к типам вывода вещей.
В наши дни логика реализована с использованием таких языков программирования, как verilog и vhdl, которые очень близки к существующим языкам программирования. Разница в том, что многие строки в "коде" выполняются одновременно, не обязательно в последовательном порядке, как в обычном программном обеспечении. Учитывая некоторые хорошо написанные hdl, нетрудно подобрать язык и понять, что происходит. Возможно, вы захотите проверить opencores.org и взять исходный код для одного из множества процессорных клонов. Инструменты компилятора для hdl не сильно отличаются от используемых для программного обеспечения, вместо инструкций код сводится к логике или логическим элементам, этот бит дополняется этим битом, этот бит связан с этим битом. Модули, которые могут быть легко реализованы в логике и соединены вместе. И точно так же, как вы можете взять программу на C и запустить ее на многих процессорах и операционных системах, вы можете взять hdl и скомпилировать ее для типов вентилей в разных fpgas или логических модулях для разных литейных заводов.