Вещи, которые отвечающая уже знаем, но здесь это в любом случае, чтобы показать мой мыслительный процесс:Как компилятор «знает», как переводить код на конкретную сборку процессора?
Перехода от ЯВЫ в машинный код, здесь неровное множество событий, которое имеет место (есть Linkers и другие вещи, но давайте игнорировать, что на данный момент):
ЯВУ -> Compiler -> Assembler ----> Машинный код
в зависимости от того, какое оборудование я покупаю, это может иметь другой процессор (Intel, SPARC, ARM и т.д. .). Язык ассемблера специфичен для процессора. Поэтому, когда код отправляется из компилятора -> Ассемблер, код сборки, который генерируется, является специфичным для процессора.
Как добраться до точки:
Например: У меня ОС Windows на моем оборудовании. И я получаю, скажем, «компилятор C для Windows 7 64bit». И у меня также есть Ubuntu на одном аппаратном обеспечении, и я получаю компилятор C для Ubuntu 64 бит.
У меня могут быть одинаковые ОС на разных аппаратных средствах с различной архитектурой процессора или на разных ОС на одном и том же оборудовании (например, в примере выше). Когда я загружаю компилятор C, почему компиляторы перечислены как ОС? Вместо конкретного процессора? Поскольку вся точка компилятора заключается в том, чтобы перевести HLL на Assembly, которая является специфичной для процессора, и не Специфическая ОС.
Предполагая, что 1. как это делается, и когда я загружаю компилятор, предназначенный для Windows 7 и для Ubuntu, как компилятор знает, какой процессор конкретный код сборки для генерации? Включен ли компилятор с различными ассемблерами, специфичными для процессора?
Вкратце, ОС предоставляет низкоуровневые программные услуги, драйверы , и т. д., который использует компилятор. Таким образом, компилятор является специфичным для ОС. Компилятор знает, какой код следует генерировать, потому что он был просто разработан с использованием этих знаний. Компилятор для архитектуры x86, например, имеет неявные знания, встроенные автором компилятора набора команд x86. – lurker
Я не обращал внимания на то, что когда вы входите в окончательную компоновку и формат исполняемого файла, очевидно, что исполняемый формат очень специфичен для ОС. ОС интерпретирует двоичный исполняемый файл, определяя критическую информацию из файла и определяя, где и как загружать и выполнять программу. – lurker