У процессоров Intel и AMD один и тот же ассемблер? - PullRequest
19 голосов
/ 10 июля 2009

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

Ответы [ 6 ]

24 голосов
/ 10 июля 2009

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

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

64-битная архитектура Intel Itanium полностью отличалась от архитектуры 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 вы имеете в виду: -)

5 голосов
/ 10 июля 2009

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

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

Ryan

5 голосов
/ 10 июля 2009

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

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

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

2 голосов
/ 11 января 2019

Процессоры 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(); }. Примечание. Некоторые компиляторы (ICC Intel) могут автоматически генерировать код, выполняющий тесты во время выполнения.

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

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

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

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

2 голосов
/ 10 июля 2009

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

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

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

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

1 голос
/ 03 мая 2017

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

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

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

...