Страницы

Поиск по вопросам

воскресенье, 9 июня 2019 г.

Какой алгоритм перевода сишного кода в ассемблер, который понимает процессор?

Вник в написание программ для микроконтроллеров (мк). Суть такая, что у каждой модели мк есть определенный набор команд с разными опкодами. Например возьмем ОС виндовс. Есть различное количество компьютеров с разными процессорами. Но программы написанные на Си на винде работают на всех этих компах. Т.е. эти проги компилируются в какой-то виндовый asm, а после драйвера на процессор переводят эти команды в те, которые понимает процессор, или как это происходит? Есть ведь процессоры с какими-то специализированными командами и если на этих процах все заработает, то на остальных нет? Хочется узнать алгоритм перевода сишного кода в циферки, которые понимает процессор.


Ответ

Хочется узнать алгоритм перевода сишного кода в циферки, которые понимает процессор.
Для большинства современных систем это двухэтапный процесс:
Текст на языке программирования (например - С) переводится коды конкретного процессора. Например - х86, ARM, PowerPC... Получается "объектный модуль". К полученному объектному модулю "пришиваются" все необходимые модули из сторонних библиотек. Получается "исполнимый модуль".
Разумеется, этот модуль может быть выполнен только на данном конкретном процессоре, в рамках конкретной операционной системы. Программа, скомпилировнная для х86 не может быть выполнена на ARM или PowerPC.
Программа, скомпилированная для седьмой версии виндовоза, скорее всего, не может быть выполнена на устаревших версиях этой ОС. Тем более, она не может быть выполнена под Linux или Android.
Здесь не говорим о т.н. "скриптовых" языках программирования, а только именно об исполняемых модулях.
Никакого "драйвера" первводящего ассемблер в команды процессора не существует. Любой ассемблер "заточен" под конкретный процессор и конкретную ОС.

Комментариев нет:

Отправить комментарий