Подтвердить что ты не робот

У процессора Intel и AMD такой же ассемблер?

Язык C использовался для написания UNIX для обеспечения переносимости - одна и та же программа на языке C, скомпилированная с использованием разных компиляторов, создает разные машинные инструкции. Почему ОС Windows может работать как на процессорах Intel, так и на AMD?

4b9b3361

Ответ 1

Процессоры AMD и Intel (*) имеют большой набор общих команд, поэтому компилятор или ассемблер могут писать двоичный код, который работает "одинаково" на обоих.

Однако разные семейства процессоров даже у одного производителя имеют свои собственные наборы инструкций, обычно называемые "расширениями" или что-то еще. Игнорируя сопроцессор x87, первый раз, когда я помню, что это маркетинговый момент, когда все внезапно перешло "с технологией MMX (TM)". Двоичный код, ожидаемый для запуска на любом процессоре, либо должен избегать расширений, либо обнаруживать тип ЦП перед их использованием.

Архитектура Intel Itanium с 64-разрядной архитектурой полностью отличалась от архитектуры AMD x86-64, поэтому их 64-битные предложения были несовместимы (и Itanium не был похож на x86, тогда как x86-64 расширил набор команд, добавив 64-битные инструкции). Intel сначала моргнула и приняла x86-64, хотя есть еще несколько отличий: http://en.wikipedia.org/wiki/X86-64#Differences_between_AMD64_and_Intel_64

Windows, вероятно, использует обычный набор инструкций x86 или x86-64 для почти всего кода. Я не удивлюсь, если различные драйверы и кодеки будут отправлены в нескольких версиях, а правильный будет выбран после опроса ЦП.

(*) На самом деле, Intel выпускает или производит различные виды процессоров, включая ARM (процессоры Intel ARM назывались XScale, но я думаю, что они продали этот бизнес). И AMD тоже делает другие процессоры. Но мы знаем, какие процессоры Intel/AMD вы имеете в виду: -)

Ответ 2

Как вы подозреваете, основные потоки процессоров Intel и AMD имеют одинаковый набор инструкций.

Например, Windows не работает на чипах ARM или PowerPC, поскольку она в некоторой степени зависит от базового набора команд.

Тем не менее, большая часть Windows написана на C++ (насколько я знаю), которая должна быть переносимой на другие архитектуры. Windows NT даже работала на PowerPC и других архитектурах.

Ответ 3

AMD совместима с Intel, иначе они никогда не закрепились бы на рынке.

Они эффективно совместимы с клонами.

Райан

Ответ 4

AMD и Intel используют один и тот же набор команд.

Когда вы устанавливаете окна на процессоре AMD или процессоре Intel, он не компилирует код на машине.

Я помню, как многие люди путались по этому вопросу в колледже. Они считают, что "настройка" означает, что он компилирует код на вашем компьютере. Это не так. Большинство, если не все приложения Windows за пределами свободных областей, предоставляются вам двоичным кодом.

Что касается переносимости, то это не обязательно 100% истинно. В то время как C очень портативен, во многих случаях запись для конкретной ОС или системы приведет к тому, что код сможет компилировать/выполнять только в этом поле. Например, некоторые Unix-машины обрабатывают файлы и каталоги по-разному, поэтому они могут быть не переносимыми на 100%.

Ответ 5

Процессоры Intel 80x86 и AMD 80x86 "в основном одного типа", но некоторые вещи совершенно разные (например, расширения виртуальных машин - SVM и VT-x), и некоторые вещи (расширения) могут поддерживаться или не поддерживаться. Однако некоторые вещи на разных процессорах одного и того же производителя отличаются (например, некоторые чипы Intel поддерживают AVX2, а некоторые нет).

Есть несколько способов справиться с различиями:

  • используйте только общее подмножество, чтобы один и тот же код выполнялся на всех процессорах 80x86 (например, обрабатывайте его как чип 8086).

  • использовать подмножество функций, которые являются общими для ряда процессоров, поэтому один и тот же код выполняется на всех процессорах 80x86 в этом диапазоне. Это очень часто (например, "это программное обеспечение требует 80x86 CPU (и ОС), который поддерживает 64-битные расширения").

  • использовать тесты во время установки. Например, может существовать 4 разные копии программного обеспечения (скомпилированные для 4 разных диапазонов процессоров), где установщик решает, какая копия имеет смысл для компьютера, на котором устанавливается программное обеспечение.

  • использовать тесты во время выполнения. Например, код может использовать инструкцию CPUID для выполнения if( AVX2_is_supported() ) { set_function_pointers_so_AVX2_is_used(); } else {set_function_pointers_so_AVX2_is_not_used(); } if( AVX2_is_supported() ) { set_function_pointers_so_AVX2_is_used(); } else {set_function_pointers_so_AVX2_is_not_used(); } if( AVX2_is_supported() ) { set_function_pointers_so_AVX2_is_used(); } else {set_function_pointers_so_AVX2_is_not_used(); } Примечание. Некоторые компиляторы (Intel ICC) могут автоматически генерировать код, выполняющий тесты во время выполнения.

Это не взаимоисключающие варианты. Например, установщик может решить установить 64-разрядную версию (а не 32-разрядную версию), а затем 64-разрядная версия может проверить, какие функции поддерживаются во время выполнения и имеют другой код для использования различных функций.

Также обратите внимание, что различные части ОС могут обрабатываться отдельно. Например, ОС может иметь 6 разных загрузчиков, 4 разных "HAL", 4 разных ядра и 3 разных "модуля ядра" для поддержки виртуализации; где некоторые из этих вещей могут выполнять тесты во время выполнения, а некоторые нет.

У процессоров Intel и AMD один и тот же ассемблер?

Почти все ассемблеры для 80x86 поддерживают практически все расширения (от всех производителей процессоров - например, Intel, AMD, VIA, Cyrix, SiS,...). В общем; это до программиста (или компилятора), чтобы убедиться, что они используют только те вещи, которые, как они знают, существуют. Некоторые ассемблеры предоставляют функции, облегчающие это (например, NASM предоставляет директиву CPU... чтобы программист мог сказать ассемблеру генерировать ошибки, если он видит инструкции, которые не поддерживаются на указанном CPU).

Ответ 6

Есть ли у процессора Intel и AMD такой же ассемблер? Ассемблер собирает программу для запуска на процессоре, поэтому ваш вопрос является ошибочным. Процессоры НЕ используют ассемблеры.

Если вы имеете в виду, может ли процессор Intel и AMD запускать один и тот же ассемблер? Тогда ответ ДА ​​!!!

Все ассемблеры - это программа, которая собирает другие программы из структурированных текстовых файлов. Visual Basic - пример ассемблера.