язык ассемблера более низкого уровня? (как реализованы инструкции процессора?)

Таким образом, самый низкий уровень, который мы можем «запрограммировать», — это отдельные инструкции процессора, но эти инструкции должны были быть как-то запрограммированы в первую очередь. Как процессор узнает, что делать, когда выполняется инструкция?


person Gordon Gustafson    schedule 25.11.2009    source источник


Ответы (4)


Полезные статьи:

http://www.gamezero.com/team-0/articles/math_magic/micro/ Как спроектировать простой процессор...

Примечания к лекциям к этому курсу: http://www.stanford.edu/class/ee382/ Дизайн процессора

person Stobor    schedule 25.11.2009

Вам нужна эта книга.

person Jonathan Feinberg    schedule 25.11.2009
comment
не могли бы вы опубликовать соответствующий текст? - person Gordon Gustafson; 27.11.2009

Это называется «микрокод» (по крайней мере, так это называлось, когда я в последний раз смотрел на них 15+ лет назад).

Различные аппаратные функциональные механизмы в процессоре координируются с программным обеспечением «микрокода»: выборка, декодирование «машинного кода», выполнение и т. д.

person jldupont    schedule 25.11.2009

Думая упрощенно, как это делали бы старые процессоры:

Если вы посмотрите на биты инструкций для большинства процессоров, вы начнете видеть закономерности. Несколько битов определяют один из входных регистров, несколько битов могут определять другой входной регистр, несколько битов могут определять регистр результата, а несколько битов определяют операцию. Таким образом, некоторые части оборудования смотрят на биты, определяющие операнд a, и используют их для подключения операнда a к alu, другое оборудование использует биты операнда b для направления операнда b на вход b на alu. Другие биты выбирают операцию, которую должен выполнять alu, сложение и/или исключающее ИЛИ и т. д. Наконец, биты результата направляют вывод alu в регистр, который должен хранить результат. Немного упрощенно, но в то же время не так уж далеко от того, как пишется логика и как работают традиционные процессоры и многие из них меньшего размера. Это буквально то, как работали самые ранние компьютеры, и их «программирование» включало в себя маршрутизацию ответа от этого alu на вход на этом alu вместе с вводом от другого, пока результат не получился в конце, который вы искали.

Некоторые из более крупных современных процессоров имеют микрокод, что означает, что на самом деле внутри есть еще один уровень инструкций, ваша операция c = a + b может превратиться в серию микрокодированных инструкций, которые запускаются, когда приходит ваша машинная инструкция, и это поможет выполнить направить входы в логику сумматора, а результат обратно в выходные типы вещей.

В наши дни логика реализуется с использованием таких языков программирования, как verilog и vhdl, которые довольно близки к существующим языкам программирования. Разница в том, что многие строки в «коде» выполняются одновременно, не обязательно в последовательном порядке, как в обычном программном обеспечении. Имея хорошо написанный hdl, нетрудно подобрать язык и понять, что происходит. Возможно, вы захотите зайти на opencores.org и получить исходный код одного из множества клонов процессора. Инструменты компилятора для hdl не сильно отличаются от тех, которые используются для программного обеспечения, вместо инструкций код сводится к логике или вентилям, этот бит объединяется с тем битом, этот бит объединяется с тем битом. Модули, которые можно легко реализовать в логике и связать вместе. И точно так же, как вы можете взять программу на C и запустить ее на многих процессорах и операционных системах, вы можете взять hdl и скомпилировать ее для типов вентилей в разных fpgas или логических модулях для разных литейных заводов.

person old_timer    schedule 26.11.2009
comment
+1 за объяснение того, что на самом деле делает оборудование. Может быть, вы могли бы разбить его на несколько абзацев. :) - person jprete; 26.11.2009