Как машинный код взаимодействует с процессором? - PullRequest
5 голосов
/ 18 марта 2012

Давайте возьмем Python в качестве примера. Если я не ошибаюсь, когда вы программируете в нем, компьютер сначала «переводит» код на C. Затем снова с C на сборку. Сборка написана в машинном коде. (Это лишь расплывчатое представление, которое у меня есть по этому поводу, поэтому поправьте меня, если я ошибаюсь) Но что за машинный код написан, или, точнее, , как процессор обрабатывает свои инструкции, как он «узнает» что делать?

Ответы [ 4 ]

8 голосов
/ 18 марта 2012

Если я не ошибаюсь, когда вы программируете в нем, компьютер сначала «переводит» код на C.

Нет, это не так. C ничего особенного, кроме того, что это самый распространенный язык программирования, используемый для системного программирования.

Интерпретатор Python переводит код Python в так называемый P-код, который выполняется виртуальной машиной. Эта виртуальная машина является реальным интерпретатором, который читает P-код, и каждый миг P-кода заставляет интерпретатор выполнять предопределенный путь кода. Это мало чем отличается от того, как собственный двоичный машинный код управляет процессором. Более современный подход заключается в переводе P-кода в машинный код.

Сам интерпретатор CPython написан на C и скомпилирован в собственный двоичный файл. По сути, нативный двоичный код - это просто длинный ряд чисел (кодов операций), где каждое число обозначает определенную операцию. Некоторые коды операций сообщают компьютеру, что определенное число чисел, следующих за ним, является не кодами операций, а параметрами.

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

как процессор обрабатывает свои инструкции, как он "узнает", что делать?

Для каждого кода операции, который является просто двоичным шаблоном, в ЦП имеется собственная схема. Если шаблон кода операции соответствует «переключателю», который включает этот код операции, эта схема обрабатывает его.

Вот WikiBook об этом: http://en.wikibooks.org/wiki/Microprocessor_Design

Несколько лет назад какой-то парень создал целый работающий компьютер из простой логики функций и микросхем памяти, то есть без микроконтроллера или подобных устройств. Весь проект под названием "Big Mess o 'Wires" был более или менее процессором, созданным с нуля. Единственная вещь, которую придурок мог бы построить эту вещь из одиночных транзисторов (которые на самом деле были не такими уж сложными). Он также предоставляет симулятор, который позволяет вам увидеть, как работает процессор внутри системы, декодируя каждую инструкцию и выполняя ее: Big Mess o 'Wires Simulator

2 голосов
/ 18 марта 2012

Машинный код не «связывается с процессором».

Скорее, процессор «знает, как оценивать» машинный код. В [широко распространенной] Von Neumann архитектуре этот машинный код (программу) можно рассматривать как индексируемый массив, в котором каждая ячейка содержит инструкцию машинного кода (или данные), но давайте проигнорируем это для в настоящее время).

Процессор «смотрит» на текущую инструкцию (часто идентифицируемую ПК или программным счетчиком ) и решает, что делать (это можно сделать напрямую с помощью транзисторов / «голого металла», или он переводится в код даже более низкого уровня): это называется циклом fetch-decode-execute .

Когда выполняются инструкции возникают побочные эффекты , такие как установка флага управления, помещение значения в регистр или переход к другому индексу (изменение ПК) в программе и т. Д. См. это простой обзор процессора , который немного лучше охватывает вышесказанное.

Это оценка каждой инструкции - как она встречается - и взаимодействие побочных эффектов, которое приводит к работе традиционного процессора.

(Конечно, современные процессоры очень сложны и делают много хитрых хитрых вещей!)

1 голос
/ 18 марта 2012

Это называется микрокод . Это код в ЦПУ, который читает инструкции машинного кода и переводит их в поток данных низкого уровня.

Когда ЦПУ, например, встречает инструкцию add, микрокод описывает, как он должен получить два значения, передать их в АЛУ для выполнения вычисления и куда поместить результат.

1 голос
/ 18 марта 2012

Электричество.Схемы, память и логические элементы.

Кроме того, я считаю, что Python обычно интерпретируется, а не компилируется через C → сборка → машинный код.

...