я прочел тот
Компилятор преобразует код, написанный на понятном человеку языке программирования, в
представление машинного кода, которое понимает ваш процессор.
Как компилятор узнает о наборе команд моего процессора?
Любая ссылка для понимания работы ассемблера, компоновщика и загрузчика будет полезна.
Как компилятор узнает о наборе команд моего процессора?
Большинство компиляторов знают только, как генерировать код для конкретного процессора (или небольшого их количества). Каждый целевой процессор требует, чтобы кто-то написал для него бэкэнд компилятора, и эта задача нетривиальна.
GCC поддерживает большое разнообразие целей, но даже GCC создан для передачи кода только для нескольких целей. Другими словами, вы можете построить GCC для испускания кода для x86_64
а также i*86
процессоры, и вы можете создать еще одну копию для испускания кода для PowerPC
, но вы не можете создать один GCC, который будет производить код для всех трех.
Любая ссылка, чтобы понять работу ассемблера, компоновщика и загрузчика
Поиск в Google по приведенным выше терминам привел меня Вот.
По сути, каждая комбинация аппаратного и программного обеспечения требует своего собственного компилятора. Таким образом, даже несмотря на то, что вы могли бы написать код C для его компиляции и запуска на компьютере Windows, вам все равно понадобится компилятор, который отличается от реализации по сравнению с компилятором C для компьютера Apple.
Просто добавим, что есть компиляторы, которые генерируют код для аппаратного обеспечения, который отличается от того, на котором они работают. Простой пример — продукты Arduino. Arduino IDE работает на компьютере Windows (и других), но код скомпилирован для микропроцессора Atmel на плате Arduino. Кроме того, каждый стиль платы (UNO и т. Д.) Имеет свой вид микропроцессора Atmel, поэтому в IDE вы должны определить цель своего эскиза, чтобы компилятор мог внести необходимые коррективы для работы с конкретным аппаратное обеспечение (набор инструкций).
Эта идея также применима к ассемблерам и компоновщикам (возможно, немного меньше).