Я новичок в информатике, и вот что я думаю, что происходит в цикле FDEW в процессоре,
1.Получить инструкцию на ассемблере
2.Расшифровать на бинарный язык
3.Выполнить исполнение
4.Пишите в память

Но я не совсем понимаю, что происходит в компиляторе и интерпретаторе. Разве компилятор не переводит на бинарный язык? Если так, то почему для преобразования в двоичный код необходима стадия декодирования? Я думаю, что я ошибаюсь. Пожалуйста, помогите мне лучше понять концепции.

2 ответа2

0

Да, компилятор не "переводить в двоичную" ... поставить Короче говоря, есть номер , присваиваемый каждому (довольно простой) операции. Это двоичный код операции (генерируется компилятором для определенного типа процессора). Он также имеет представление на ассемблере, которое является своего рода промежуточной понятной для человека символьной нотацией и совсем не предназначено для исполнения.

На этапе выполнения существует последовательность внутренних шагов процессора, которые необходимо выполнить для выполнения каждой команды. Наиболее очевидной частью является включение / отключение определенных "путей данных" для каждого шага - например, для "подключения" некоторого содержимого регистра к входным портам арифметико-логического устройства (также известного как ALU, которое выполняет вычисления наподобие "сложения", используя или объединение логической сети ALU с входом регистра. Который даже может быть тем же регистром, откуда пришел один из операндов.

Видите ли, (часто) существует несколько внутренних шагов "микрокода", которые нужно выполнить для каждой команды двоичного языка / языка ассемблера. Это то, что делают «декодировать / выполнять»: они берут двоичное командное слово, ищут последовательность соответствующих внутренних шагов (которые просто открывают / закрывают ворота соответственно, как по маслу) и исполняют их.

0

Язык ассемблера - это читаемая человеком форма машинного кода. Компилятор преобразует язык ассемблера в настоящий машинный код для выполнения на процессоре.

То, что вы передаете процессору, не является сборкой, а является скомпилированным машинным кодом

Возможно, вы ошибаетесь в дополнительном шаге преобразования - в понятиях архитектуры ЦП, x86 или x86-64, с реальной микроархитектурой ядра ЦП. Микроархитектура - это реальный код или инструкции, которые могут быть выполнены с помощью аппаратного обеспечения ядра, архитектура x86 охватывает это ядро и преобразуется в инструкции, понятные ядру.

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

Включение основной микроархитектуры в архитектуру платформы позволяет реализовать улучшения в ядрах, не подвергая изменения платформе. Это дает нам общую и относительно неизменную платформу, в то время как фактические шаги выполнения могут быть совершенно разными.

Шаги, которые вы видите

  1. Компилятор: конвертирует удобочитаемые инструкции (сборка, C и т.д.) К машинному коду
  2. CPU выбирает машинный код для выполнения
  3. Диспетчер ЦП переписывает инструкции архитектуры в инструкции микроархива
  4. Инструкции выполнить

На старом процессоре, который был разработан с той же архитектурой ядра и платформы, шаг 3 будет пропущен.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .