Как инструкция по сборке превращается в изменения напряжения на процессоре? - PullRequest
42 голосов
/ 14 сентября 2010

Я работаю в C и CPython в течение последних 3 - 5 лет.Предположим, что моя база знаний здесь.

Если бы мне пришлось использовать инструкцию по сборке, например MOV AL, 61h, для процессора, который его поддерживал, что именно находится внутри процессора, который интерпретирует этот код и отправляет его как сигналы напряжения?Как, вероятно, будет выполнена такая простая инструкция?

Сборка даже выглядит как язык высокого уровня, когда я пытаюсь представить множество шагов, содержащихся в MOV AL, 61h или даже XOR EAX, EBX.

РЕДАКТИРОВАТЬ: я прочитал несколько комментариев, спрашивающих, почему я ставлю это как встроенный, когда семейство x86 не распространено во встроенных системах.Добро пожаловать в мое собственное невежество.Теперь я полагаю, что если я не знаю об этом, то, вероятно, есть и другие, которые не знают об этом.

Мне было трудно выбрать любимый ответ, учитывая усилия, которые вы все вложили в свои ответы, но ячувствовал себя вынужденным принять решение.Не обижайте, ребята.

Я часто нахожу, что чем больше я узнаю о компьютерах, тем меньше понимаю, что на самом деле знаю.Спасибо, что открыли мой разум для микрокода и транзисторной логики!

РЕДАКТИРОВАТЬ # 2: Благодаря этой теме, я только что понял, почему XOR EAX, EAX быстрее, чем MOV EAX, 0h.:)

Ответы [ 12 ]

0 голосов
/ 14 сентября 2010

что именно находится внутри процессора, который интерпретирует этот код и отправляет его как сигналы напряжения

Я хотел бы сказать «аппаратное обеспечение», но более правдивый ответ «микрокода .

0 голосов
/ 14 сентября 2010

Ну вот одно ужасно убитое резюме: -)

MOV AL, 61h - снова читаемая человеком форма кода, которая подается в ассемблер. Ассемблер генерирует эквивалентный шестнадцатеричный код, который в основном представляет собой последовательностьбайты, которые понимает процессор и которые вы должны хранить в памяти. В среде встроенной системы сценарии компоновщика дают вам точный контроль над тем, где разместить эти байты (отдельные области для программы / данных и т. д.) в памяти.

Процессор по существу содержит конечный автомат (микрокод), реализованный с использованием триггеров.Машина считывает (извлекает цикл) шестнадцатеричный код для 'MOV' из памяти, вычисляет (цикл декодирования), что ему нужен операнд, который в этом случае равен 61h, снова извлекает его из памяти и выполняет его (т.е. копирует 61в регистр аккумулятора. «Чтение», «получение», «выполнение» и т. д. означает, что байты сдвигаются / добавляются в и из сдвиговых регистров с использованием цифровых схем, таких как сумматоры, вычитатели, мультиплексоры и т. д.

...