Компиляторы и наборы инструкций

"C - это язык общего назначения, не привязанный к конкретной системе". Язык программирования C, BRIAN W KERNIGHAN & DENNIS M. RITCHIE

Тем не менее, с помощью правильного компилятора мы можем создать.exe, который запускается на каждом компьютере с Windows, что, в свою очередь, означает, что на каждом процессоре, на котором работает Windows.

Поэтому мой вопрос: каждый ли процессор x86-64 (Intel или AMD) использует один и тот же набор инструкций? (да, я мог бы сделать сравнение...), если нет, то я должен предположить, что компилятор определяет, какой процессор мы используем, и использует правильный набор инструкций во время компиляции.

Я полностью ошибаюсь?

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

Спасибо

1 ответ

Решение

Intel производит много разных моделей процессоров, которые используют основной набор команд семейства "x86-64" (и дополнительные модели процессоров, которые этого не делают). Даже среди процессоров с общими инструкциями ядра существуют различия. Более новые модели могут иметь инструкции, которых не было у более старых моделей, и некоторые части набора инструкций могут быть на некоторых моделях, а не на других.

Некоторые инструкции даже ведут себя по-разному на разных процессорах.

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

Часто настройкой по умолчанию для цели компилятора является либо модель процессора, подобная той, на которой вы работаете, либо некоторый типичный набор подмножеств инструкций, который является общим для современных моделей процессоров. Цель также может быть выбрана на основе других настроек, которые вы задаете компилятору, например, запрашиваете у него таргетинг на конкретную версию операционной системы. Однако вы можете передать переключатели компилятора, чтобы он компилировался для совершенно разных целей, даже для совершенно разных архитектур, таких как компиляция для процессора ARM при работе на процессоре Intel.

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

Другие вопросы по тегам