#c #ассемблер
Вник в написание программ для микроконтроллеров (мк). Суть такая, что у каждой модели мк есть определенный набор команд с разными опкодами. Например возьмем ОС виндовс. Есть различное количество компьютеров с разными процессорами. Но программы написанные на Си на винде работают на всех этих компах. Т.е. эти проги компилируются в какой-то виндовый asm, а после драйвера на процессор переводят эти команды в те, которые понимает процессор, или как это происходит? Есть ведь процессоры с какими-то специализированными командами и если на этих процах все заработает, то на остальных нет? Хочется узнать алгоритм перевода сишного кода в циферки, которые понимает процессор.
Ответы
Ответ 1
Хочется узнать алгоритм перевода сишного кода в циферки, которые понимает процессор. Для большинства современных систем это двухэтапный процесс: Текст на языке программирования (например - С) переводится коды конкретного процессора. Например - х86, ARM, PowerPC... Получается "объектный модуль". К полученному объектному модулю "пришиваются" все необходимые модули из сторонних библиотек. Получается "исполнимый модуль". Разумеется, этот модуль может быть выполнен только на данном конкретном процессоре, в рамках конкретной операционной системы. Программа, скомпилировнная для х86 не может быть выполнена на ARM или PowerPC. Программа, скомпилированная для седьмой версии виндовоза, скорее всего, не может быть выполнена на устаревших версиях этой ОС. Тем более, она не может быть выполнена под Linux или Android. Здесь не говорим о т.н. "скриптовых" языках программирования, а только именно об исполняемых модулях. Никакого "драйвера" первводящего ассемблер в команды процессора не существует. Любой ассемблер "заточен" под конкретный процессор и конкретную ОС.Ответ 2
У процессоров х86 базовый набор команд стандартизирован. Конечно есть расширения https://ru.wikipedia.org/wiki/Расширения_архитектуры_x86. Разработчики программного обеспечения, прежде чем использовать их в собственных программах, должны выполнить специальную команду CPUID, которая сообщает о наличии тех или иных расширений. Разработчики используют эти дополнительные возможности при низкоуровневой оптимизации. В основном компиляторы не пользуются расширенными инструкциями или же могут оптимизировать самый тривиальный код. Для нормальной оптимизации и качественного использования этих расширений опять таки нужен разработчик. === А насчет того что в разных ОС программы не могут работать. Так программа еще может обращаться к различным функциям ОС API и пр. Ну а в разных ОС эти функции могут различаться.
Комментариев нет:
Отправить комментарий