Из Википедии, свободной энциклопедии
Перейти к навигации Перейти к поиску

Архитектура x86 была основана на микропроцессорной микросхеме Intel 8086, первоначально выпущенной в 1978 году.
Intel Core 2 Duo, пример x86-совместимого 64-битного многоядерного процессора
AMD Athlon (ранняя версия), технически отличная, но полностью совместимая реализация x86

x86 - это семейство архитектур с набором команд [a], изначально разработанное Intel на основе микропроцессора Intel 8086 и его варианта 8088 . 8086 был представлен в 1978 году как полностью 16-битное расширение 8-битного микропроцессора Intel 8080 с сегментацией памяти в качестве решения для адресации большего объема памяти, чем может быть покрыт простым 16-битным адресом. Термин «x86» возник потому, что имена нескольких преемников процессора Intel 8086 заканчиваются на «86», включая 80186 , 80286 , 80386 и 80486. процессоры.

Многие дополнения и расширения были добавлены к набору инструкций x86 за прошедшие годы, почти постоянно с полной обратной совместимостью . [b] Архитектура реализована в процессорах Intel, Cyrix , AMD , VIA Technologies и многих других компаний; есть также открытые реализации, такие как платформа Zet SoC (в настоящее время неактивна). [2] Тем не менее, из них только Intel, AMD, VIA Technologies и DM&P Electronics имеют лицензии на архитектуру x86, и из них только первые две активно создают современные 64-разрядные разработки.

Этот термин не является синонимом совместимости с IBM PC , поскольку он подразумевает множество другого компьютерного оборудования ; во встроенных системах и компьютерах общего назначения микросхемы x86 использовались до появления рынка совместимых с ПК , [c] некоторые из них до дебюта IBM PC (1981).

По состоянию на 2021 год большинство проданных персональных компьютеров , ноутбуков и игровых консолей основано на архитектуре x86, в то время как в мобильных категориях, таких как смартфоны или планшеты , доминирует ARM ; в верхнем сегменте x86 продолжает доминировать в сегментах рабочих станций с интенсивными вычислениями и облачных вычислений . [3]

Обзор [ править ]

В 1980-х и начале 1990-х годов, когда 8088 и 80286 все еще использовались, термин x86 обычно обозначал любой 8086-совместимый процессор. Однако сегодня x86 обычно подразумевает двоичную совместимость также с 32-разрядным набором инструкций 80386. Это связано с тем, что этот набор инструкций стал чем-то вроде наименьшего общего знаменателя для многих современных операционных систем, а также, вероятно, потому, что Термин стал общепринятым после появления модели 80386 в 1985 году.

Спустя несколько лет после появления 8086 и 8088 Intel добавила сложности к своей схеме именования и терминологии, поскольку «iAPX» амбициозного, но неудачного процессора Intel iAPX 432 был опробован на более успешном семействе чипов 8086 [ d] применяется как своего рода префикс системного уровня. 8086 система , в том числе сопроцессоров , такие как 8087 и 8089 , и более простой процессор Intel конкретных системных чипов, [е] была , таким образом , как описана iAPX 86 системы . [4] [f] Были также термины iRMX (для операционных систем), iSBC (для одноплатных компьютеров) иiSBX (для многомодульных плат на основе архитектуры 8086), все вместе под заголовком Microsystem 80 . [5] [6] Тем не менее, эта схема именования была довольно временной и длилась несколько лет в начале 1980-х годов. [грамм]

Хотя 8086 был прежде всего разработан для встроенных систем и маленьких многопользовательских или компьютерах с одним пользователем, в значительной степени в ответ на успешный 8080-совместимый Zilog Z80 , [7] х86 линия вскоре переросла в особенностях и вычислительной мощности. Сегодня x86 повсеместно используется как в стационарных, так и в портативных персональных компьютерах, а также используется в компьютерах среднего уровня , рабочих станциях , серверах и большинстве новых суперкомпьютерных кластеров из списка TOP500 . Большое количество программного обеспечения , включая большой список операционных систем x86, использует оборудование на базе x86.

Однако современные x86 относительно редко встречаются во встроенных системах , а небольшие приложения с низким энергопотреблением (использующие крошечные батареи) и рынки недорогих микропроцессоров, таких как бытовая техника и игрушки, не имеют значительного присутствия x86. [ч] Простые 8- и 16-разрядных архитектур на основе обычны здесь, хотя x86-совместимый VIA C7 , VIA Nano , AMD «s Geode , Athlon Neo и Intel Atom являются примерами 32- и 64-битных конструкций , используемых в некоторых относительно маломощные и недорогие сегменты.

Было несколько попыток, в том числе со стороны Intel, положить конец доминированию на рынке «неизящной» архитектуры x86, созданной непосредственно из первых простых 8-битных микропроцессоров. Примерами этого являются iAPX 432 (проект, первоначально названный Intel 8800 [8] ), Intel 960 , Intel 860 и архитектура Intel / Hewlett-Packard Itanium . Однако постоянное совершенствование микроархитектуры x86 , схем и производства полупроводников затруднит замену x86 во многих сегментах. 64-разрядное расширение AMD для x86 (на которое Intel в конечном итоге ответила совместимым дизайном) [9]а масштабируемость чипов x86 в виде современных многоядерных процессоров подчеркивает x86 как пример того, как постоянное совершенствование установленных отраслевых стандартов может противостоять конкуренции со стороны совершенно новых архитектур. [10]

Хронология [ править ]

В таблице ниже перечислены модели процессоров и серии моделей, реализующие варианты набора инструкций x86 , в хронологическом порядке. Каждая позиция отличается значительно улучшенной или коммерчески успешной микроархитектурой процессора .

История [ править ]

Другие производители [ править ]

Am386 , выпущенный AMD в 1991 году

В разное время такие компании, как IBM , NEC , [i] AMD , TI , STM , Fujitsu , OKI , Siemens , Cyrix , Intersil , C&T , NexGen , UMC и DM&P, начали разрабатывать или производить [j] процессоры x86 (CPU) ) предназначен для персональных компьютеров и встроенных систем. Такие реализации x86 редко являются простыми копиями, но часто используют различные внутренние микроархитектуры.и различные решения на электронном и физическом уровнях. Вполне естественно, что ранние совместимые микропроцессоры были 16-битными, тогда как 32-битные конструкции были разработаны намного позже. На рынке персональных компьютеров в реальных количествах начали появляться примерно в 1990 году процессоры, совместимые с i386 и i486 , часто называемые аналогично оригинальным чипам Intel. Другие компании, которые разработали или произвели процессоры x86 или x87 , включают ITT Corporation , National Semiconductor , ULSI System Technology и Weitek .

После полного конвейерную i486 , Intel представила Pentium бренд (который, в отличие от чисел, может быть торговой маркой ) для их нового набора суперскалярными конструкций x86. Теперь, когда схема именования x86 была официально разрешена, другие поставщики x86 должны были выбрать другие названия для своих x86-совместимых продуктов, и первоначально некоторые решили продолжить использование вариантов схемы нумерации: IBM в партнерстве с Cyrix выпустила 5x86, а затем очень эффективный 6x86 (M1) и 6x86 MX ( MII) линейки проектов Cyrix, которые были первыми микропроцессорами x86, реализующими переименование регистров для обеспечения возможности спекулятивного исполнения . Тем временем AMD разработала и произвела усовершенствованный, но задержанный 5k86 ( K5 ), который внутренне был тесно основан на более ранней конструкции AMD 29K RISC ; похож на NexGen «ы Nx586 , он использовал стратегию таким образом, что выделенные этапы трубопровода декодирования x86 инструкций в единую и легко обрабатывается микроопераций , метод , который остается основой для большинства конструкций x86 и по сей день.

Некоторые ранние версии этих микропроцессоров имели проблемы с отводом тепла. 6x86 также пострадал от нескольких незначительных проблем совместимости, Nx586 не хватало модуля с плавающей запятой (FPU) и (тогда решающей) совместимости по выводам, в то время как K5 имел несколько разочаровывающую производительность, когда он (в конечном итоге) был представлен. Незнание заказчиком альтернатив серии Pentium еще больше способствовало тому, что эти конструкции были сравнительно неудачными, несмотря на то, что K5 имел очень хорошую совместимость с Pentium, а 6x86 был значительно быстрее Pentium по целочисленному коду. [k] AMD позже смогла вырасти в серьезного соперника с K6.набор процессоров, который уступил место очень удачным Athlon и Opteron . Были и другие претенденты, такие как Centaur Technology (ранее IDT ), Rise Technology и Transmeta . Энергоэффективные процессоры C3 и C7 от VIA Technologies , разработанные компанией Centaur , продаются уже много лет. Новейший дизайн Centaur, VIA Nano , - их первый процессор с суперскалярным и спекулятивным исполнением.. Он был представлен примерно в то же время, что и первый процессор Intel «в порядке» после P5 Pentium , Intel Atom .

Расширения размера слова [ править ]

Архитектура набора команд дважды расширялась до большего размера слова . В 1985 году Intel выпустила 32-битный 80386 (позже известный как i386), который в последующие годы постепенно заменил более ранние 16-битные чипы в компьютерах (хотя, как правило, не во встроенных системах ); эта расширенная модель программирования первоначально называлась архитектурой i386 (как и ее первая реализация), но позже Intel назвала ее IA-32, когда представила свою (несвязанную) архитектуру IA-64 .

В 1999–2003 годах AMD расширила эту 32-разрядную архитектуру до 64-разрядной версии и в ранних документах называла ее x86-64, а позже - AMD64 . Вскоре Intel приняла архитектурные расширения AMD под названием IA-32e, позже использовала имя EM64T и, наконец, Intel 64. Microsoft и Sun Microsystems / Oracle также используют термин «x64», в то время как многие дистрибутивы Linux и BSD также используют термин «amd64». " срок. Microsoft Windows, например, обозначает свои 32-разрядные версии как «x86», а 64-разрядные версии как «x64», в то время как установочные файлы 64-разрядных версий Windows необходимо помещать в каталог под названием «AMD64».[13]

Основные свойства архитектуры [ править ]

Архитектура x86 представляет собой команду переменной длины, в первую очередь дизайн « CISC » с упором на обратную совместимость . Однако набор команд не является типичным CISC, а в основном представляет собой расширенную версию простых восьмибитных архитектур 8008 и 8080 . Включена байтовая адресация, и слова хранятся в памяти с прямым порядком байтов. Доступ к памяти по невыровненным адресам разрешен для всех допустимых размеров слов. Наибольший собственный размер для целочисленной арифметики и адресов памяти (или смещений) составляет 16, 32 или 64 бита в зависимости от поколения архитектуры (новые процессоры также включают прямую поддержку меньших целых чисел). Множественные скалярные значения могут обрабатываться одновременно через модуль SIMD, присутствующий в более поздних поколениях, как описано ниже. [l] Смещения немедленной адресации и немедленные данные могут быть выражены как 8-битные величины для часто встречающихся случаев или контекстов, где достаточно диапазона -128..127. Поэтому типичные инструкции имеют длину 2 или 3 байта (хотя некоторые из них намного длиннее, а некоторые однобайтовые).

Чтобы еще больше сэкономить пространство для кодирования, большинство регистров выражаются в кодах операций с использованием трех или четырех битов, последний - с помощью префикса кода операции в 64-битном режиме, в то время как не более одного операнда инструкции может быть ячейкой памяти. [m] Однако этот операнд памяти также может быть адресатом (или комбинированным источником и назначением), в то время как другой операнд, источник , может быть либо регистровым, либо непосредственным.. Среди прочего, это способствует увеличению размера кода, который конкурирует с восьмиразрядными машинами, и позволяет эффективно использовать кэш-память инструкций. Относительно небольшое количество регистров общего назначения (также унаследованных от его 8-битных предков) сделало относительную адресацию регистров (с использованием небольших непосредственных смещений) важным методом доступа к операндам, особенно в стеке. Поэтому много работы было вложено в то, чтобы сделать такие доступы такими же быстрыми, как и доступы к регистрам, т. Е. С пропускной способностью инструкции за один цикл в большинстве случаев, когда данные, к которым осуществляется доступ, доступны в кэше верхнего уровня.

Плавающая точка и SIMD [ править ]

Для оригинального 8086 был разработан специальный процессор с плавающей запятой с 80-битными внутренними регистрами, 8087 . Этот микропроцессор впоследствии превратился в расширенный 80387 , а более поздние процессоры включали обратно совместимую версию этой функциональности на том же микропроцессоре, что и главный процессор. В дополнение к этому, современные проекты x86 также содержат SIMD- модуль (см. SSE ниже), где инструкции могут работать параллельно с (одним или двумя) 128-битными словами, каждое из которых содержит два или четыре числа с плавающей запятой. (ширина каждого 64 или 32 бита соответственно) или, альтернативно, 2, 4, 8 или 16 целых чисел (каждое 64, 32, 16 или 8 бит соответственно).

Наличие широких регистров SIMD означает, что существующие процессоры x86 могут загружать или хранить до 128 бит данных памяти в одной инструкции, а также выполнять побитовые операции (хотя и не целочисленные арифметические [n] ) над полными 128-битными величинами параллельно. Процессоры Intel Sandy Bridge добавили инструкции Advanced Vector Extensions (AVX), расширив регистры SIMD до 256 бит. Первоначальные многоядерные инструкции Intel, реализованные процессорами Knights Corner Xeon Phi , и инструкции AVX-512, реализованные процессорами Knights Landing Xeon Phi и процессорами Skylake-X , используют регистры SIMD шириной 512 бит.

Текущие реализации [ править ]

Во время выполнения современные процессоры x86 используют несколько дополнительных шагов декодирования для разделения большинства инструкций на более мелкие части, называемые микрооперациями. Затем они передаются блоку управления, который буферизует и планирует их в соответствии с семантикой x86, чтобы они могли выполняться частично параллельно одним из нескольких (более или менее специализированных) исполнительных блоков . Таким образом , эти современные проекты x86 являются конвейерными , суперскалярными , а также способны к неупорядоченному и спекулятивному выполнению (с помощью прогнозирования ветвлений , переименования регистров и прогнозирования зависимости от памяти.), что означает, что они могут выполнять несколько (частичных или полных) инструкций x86 одновременно, и не обязательно в том же порядке, что и в потоке инструкций. [14] Некоторые процессоры Intel ( Xeon Foster MP , некоторые Pentium 4 , а также некоторые процессоры Nehalem и более поздние Intel Core ) и процессоры AMD (начиная с Zen ) также поддерживают одновременную многопоточность с двумя потоками на ядро ( Xeon Phi имеет четыре потока на каждое ядро). основной). Некоторые процессоры Intel поддерживают транзакционную память ( TSX ).

Когда этот метод был представлен в середине 1990-х годов, этот метод иногда назывался «ядро RISC» или «преобразование RISC», отчасти по маркетинговым причинам, но также потому, что эти микрооперации имеют общие свойства с определенными типами инструкций RISC. Однако традиционный микрокод (используемый с 1950-х годов) по своей сути обладает многими из тех же свойств; Новый метод отличается главным образом тем, что преобразование в микрооперации теперь происходит асинхронно. Отсутствие необходимости синхронизировать исполнительные блоки с этапами декодирования открывает возможности для большего анализа (буферизованного) кодового потока и, следовательно, позволяет обнаруживать операции, которые могут выполняться параллельно, одновременно загружая более одного исполнительного блока.

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

Другой способ попытаться повысить производительность - кэшировать декодированные микрооперации, чтобы процессор мог напрямую обращаться к декодированным микрооперациям из специального кеша вместо их повторного декодирования. Intel последовала этому подходу с функцией Execution Trace Cache в своей микроархитектуре NetBurst (для процессоров Pentium 4), а затем в Decoded Stream Buffer (для процессоров Core, начиная с Sandy Bridge). [15]

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

Сегментация [ править ]

В конце 1970-х годов миникомпьютеры работали с ограничением по адресу в 16 бит в 64 КБ , так как память стала дешевле. Некоторые миникомпьютеры, такие как PDP-11, использовали сложные схемы переключения банков или, в случае VAX от Digital , переработали гораздо более дорогие процессоры, которые могли напрямую обрабатывать 32-битную адресацию и данные. Оригинальный 8086, разработанный на основе простого микропроцессора 8080 и в первую очередь нацеленный на очень маленькие и недорогие компьютеры и другие специализированные устройства, вместо этого использовал простые сегментные регистры, которые увеличивали ширину адреса памяти всего на 4 бита. Умножив адрес размером 64 КБ на 16, 20-разрядный адрес может адресовать в общей сложности один мегабайт.(1 048 576 байт), что в то время было довольно большим объемом для небольшого компьютера. Концепция сегментных регистров не была новой для многих мэйнфреймов, которые использовали сегментные регистры для быстрого переключения между различными задачами. На практике на x86 это была (есть) очень критичная реализация, которая сильно усложняла многие общие задачи программирования и компиляторы. Однако вскоре архитектура позволила линейную 32-битную адресацию (начиная с 80386 в конце 1985 года), но крупным игрокам (таким как Microsoft ) потребовалось несколько лет, чтобы преобразовать свои 16-битные системы. Таким образом, 80386 (и 80486) в основном использовался как быстрый (но все еще основанный на 16-битном) 8086 в течение многих лет.

Данными и кодом можно было управлять в «близких» 16-битных сегментах в пределах 64 Кбайт от общего адресного пространства 1  Мбайт , или компилятор мог работать в «дальнем» режиме, используя 32-битные segment:offsetпары, достигающие (только) 1 Мбайт. Хотя к середине 1980-х это также оказалось весьма ограничивающим, он работал на развивающийся рынок ПК и упростил перевод программного обеспечения со старых 8008 , 8080 , 8085 и Z80 на новые процессоры. В 1985 году модель адресации 16-битных сегментов была фактически исключена за счет введения 32-битных регистров смещения в схеме 386 .

В реальном режиме сегментация достигается путем сдвига адреса сегмента влево на 4 бита и добавления смещения для получения окончательного 20-битного адреса. Например, если DS - A000h, а SI - 5677h, DS: SI будет указывать на абсолютный адрес DS × 10h + SI = A5677h. Таким образом, общее адресное пространство в реальном режиме составляет 2 20 байтов, или 1 МБ , что довольно впечатляющая цифра для 1978 года. Все адреса памяти состоят как из сегмента, так и из смещения; каждый тип доступа (код, данные или стек) имеет связанный с ним регистр сегмента по умолчанию (для данных это обычно DS, для кода - CS, а для стека - SS). Для доступа к данным сегментный регистр может быть явно указан (с использованием префикса переопределения сегмента) для использования любого из четырех сегментных регистров.

В этой схеме две разные пары сегмент / смещение могут указывать на одно абсолютное местоположение. Таким образом, если DS - это A111h, а SI - 4567h, DS: SI будет указывать на тот же A5677h, что и выше. Такая схема делает невозможным одновременное использование более четырех сегментов. CS и SS жизненно важны для правильного функционирования программы, поэтому только DS и ES могут использоваться для указания на сегменты данных вне программы (или, точнее, вне текущего выполняемого сегмента программы) или стека.

В защищенном режиме , представленном в 80286, регистр сегмента больше не содержит физический адрес начала сегмента, но содержит «селектор», который указывает на структуру системного уровня, называемую дескриптором сегмента . Дескриптор сегмента содержит физический адрес начала сегмента, длину сегмента и права доступа к этому сегменту. Смещение проверяется по длине сегмента, причем смещения относятся к местоположениям за пределами сегмента, вызывая исключение. Смещения, относящиеся к местоположениям внутри сегмента, объединяются с физическим адресом начала сегмента, чтобы получить физический адрес, соответствующий этому смещению.

Сегментированный характер может затруднить программирование и проектирование компилятора, поскольку использование ближних и дальних указателей влияет на производительность.

Режимы адресации [ править ]

Режимы адресации для 16-битных процессоров x86 можно описать формулой: [16] [17]

Режимы адресации для 32-битных процессоров x86, [18] и для 32-битного кода на 64-битных процессорах x86, можно резюмировать формулой: [19]

Режимы адресации для 64-битного кода на 64-битных процессорах x86 можно резюмировать формулой: [19]

Относительная адресация инструкций в 64-битном коде (RIP + смещение, где RIP - регистр указателя инструкций ) упрощает реализацию позиционно-независимого кода (который используется в разделяемых библиотеках в некоторых операционных системах).

8086 имел 64 КБ восьмибитного (или альтернативно32 К-слово 16-бит ) ввода / вывода пространство, иСтек 64 КБ (один сегмент) в памяти, поддерживаемой аппаратным обеспечением компьютера . Только слова (два байта) могут быть помещены в стек. Стек увеличивается в сторону численно меньших адресов, при этом SS: SP указывает на последний отправленный элемент. Имеется 256 прерываний , которые могут быть вызваны как аппаратными, так и программными средствами. Прерывания могут каскадироваться, используя стек для хранения адреса возврата .

регистры x86 [ править ]

16 бит [ править ]

Оригинальные Intel 8086 и 8088 имеют четырнадцать 16- битных регистров. Четыре из них (AX, BX, CX, DX) являются регистрами общего назначения (GPR), хотя каждый может иметь дополнительное назначение; например, только CX может использоваться как счетчик с инструкцией цикла . К каждому из них можно обращаться как к двум отдельным байтам (таким образом, к старшему байту BX можно обращаться как к BH, а к младшему - как к BL). Два регистра указателя имеют особые роли: SP (указатель стека) указывает на «верх» стека , а BP (базовый указатель) часто используется для указания на какое-то другое место в стеке, обычно над локальными переменными (см. Указатель кадра ). Регистры SI, DI, BX и BP являются адресными регистрами., а также может использоваться для индексации массива.

Четыре сегментных регистра (CS, DS, SS и ES) используются для формирования адреса памяти. ФЛАГИ регистр содержит флаги , такие как флаг переноса , флаг переполнения и нулевого флага . Наконец, указатель инструкции (IP) указывает на следующую инструкцию, которая будет извлечена из памяти и затем выполнена; к этому регистру программа не может получить прямой доступ (чтение или запись). [20]

В Intel 80186 и 80188 являются по существу усовершенствованного 8086 или 8088 процессор, соответственно, с добавлением на кристалле периферийных устройств, и они имеют те же регистры процессора как 8086 и 8088 (в дополнении к регистрам интерфейса для периферийных устройств).

8086, 8088, 80186 и 80188 могут использовать дополнительный сопроцессор с плавающей запятой 8087 . 8087 представляется программисту как часть ЦП и добавляет восемь 80-разрядных регистров, от st (0) до st (7), каждый из которых может содержать числовые данные в одном из семи форматов: 32-, 64- или 80-битное число с плавающей запятой, 16-, 32- или 64-битное (двоичное) целое число и 80-битное упакованное десятичное целое число. [6] : S-6, S-13..S-15 Она также имеет свой собственный статус 16-битный регистр доступен через fntsw инструкции, и это часто просто использовать некоторые из своих битов для разветвления, скопировав его в нормальные ФЛАГИ. [21]

В Intel 80286 для поддержки защищенного режима три специальных регистра содержат адреса таблицы дескрипторов (GDTR, LDTR, IDTR ), а четвертый регистр задач (TR) используется для переключения задач. 80287 является плавающей точкой сопроцессора для 80286 и имеет те же регистры, что и 8087 с теми же форматами данных.

32-битный [ править ]

Регистры, доступные в наборе команд x86-64

С появлением 32-битного процессора 80386 16-битные регистры общего назначения, базовые регистры, индексные регистры, указатель команд и регистр FLAGS , но не сегментные регистры, были расширены до 32 бит. Номенклатура представляет это путем добавления префикса « E » (от «расширенного») к именам регистров на языке ассемблера x86 . Таким образом, регистр AX соответствует младшим 16 битам нового 32-битного регистра EAX, SI соответствует младшим 16 битам ESI и так далее. Регистры общего назначения, базовые регистры и индексные регистры могут использоваться в качестве базовых в режимах адресации, и все эти регистры, за исключением указателя стека, могут использоваться в качестве индекса в режимах адресации.

Добавлены два новых сегментных регистра (FS и GS). Благодаря большему количеству регистров, инструкций и операндов формат машинного кода был расширен. Для обеспечения обратной совместимости сегменты с исполняемым кодом могут быть помечены как содержащие 16-битные или 32-битные инструкции. Специальные префиксы позволяют включать 32-битные инструкции в 16-битный сегмент или наоборот .

80386 имел дополнительный сопроцессор с плавающей запятой, 80387 ; у него было восемь регистров шириной 80 бит: от st (0) до st (7), [22] как у 8087 и 80287. 80386 также мог использовать сопроцессор 80287. [23] В 80486 и всех последующих моделях x86 блок обработки с плавающей запятой (FPU) интегрирован в кристалл.

Pentium MMX добавили восемь 64-битных регистров MMX целым числом (MMX0 к MMX7, доля которого младшие биты с 80-битовой широкой стека FPU). [24] В Pentium III Intel добавила 32-разрядный регистр управления / состояния SIMD Extensions (SSE) (MXCSR) и восемь 128-разрядных регистров с плавающей запятой SSE (от XMM0 до XMM7). [25]

64-битная [ править ]

Начиная с процессора AMD Opteron , архитектура x86 расширила 32-битные регистры до 64-битных регистров аналогично тому, как имело место расширение с 16 до 32 бит. R -prefix (для "регистр") идентифицирует 64-битные регистры (RAX, RBX, RCX, RDX, RSI, RDI, RBP, RSP, RFLAGS, RIP), и восемь дополнительных 64-битных регистров общего назначения (R8-R15 ) также были введены при создании x86-64 . Однако эти расширения можно использовать только в 64-битном режиме, который является одним из двух режимов, доступных только в длинном режиме.. Режимы адресации существенно не изменились по сравнению с 32-битным режимом, за исключением того, что адресация была расширена до 64 бит, виртуальные адреса теперь имеют знак, расширенный до 64 бит (чтобы запретить биты режима в виртуальных адресах), а другие детали селектора были значительно сокращены. . Кроме того, был добавлен режим адресации, позволяющий обращаться к памяти относительно RIP ( указателя инструкций ), чтобы упростить реализацию позиционно-независимого кода , используемого в разделяемых библиотеках в некоторых операционных системах.

128-битный [ править ]

SIMD регистрирует XMM0 – XMM15.

256 бит [ править ]

SIMD регистрирует YMM0 – YMM15.

512-бит [ править ]

SIMD регистрирует ZMM0 – ZMM31.

Разное / специальное назначение [ править ]

Процессоры x86, которые имеют защищенный режим , то есть процессоры 80286 и более поздних версий, также имеют три дескрипторных регистра (GDTR, LDTR, IDTR ) и регистр задач (TR).

32-разрядные процессоры x86 (начиная с 80386) также включают в себя различные специальные / разные регистры, такие как регистры управления (от CR0 до 4, CR8 только для 64-разрядных), регистры отладки (DR0 до 3, плюс 6 и 7), тестовые регистры (TR3–7; только 80486) и регистры, зависящие от модели (MSR, появляющиеся вместе с Pentium [o] ).

AVX-512 имеет восемь дополнительных 64-битных регистров маски для выбора элементов в ZMM.

Цель [ править ]

Хотя основные регистры (за исключением указателя инструкции) являются «универсальными» в 32-битной и 64-битной версиях набора команд и могут использоваться для чего угодно, изначально предполагалось, что они будут использоваться для следующие цели:

  • AL / AH / AX / EAX / RAX: Накопитель
  • BL / BH / BX / EBX / RBX: базовый индекс (для использования с массивами)
  • CL / CH / CX / ECX / RCX: счетчик (для использования с петлями и струнами)
  • DL / DH / DX / EDX / RDX: увеличьте точность аккумулятора (например, объедините 32-битные EAX и EDX для 64-битных целочисленных операций в 32-битном коде)
  • SI / ESI / RSI: индекс источника для строковых операций.
  • DI / EDI / RDI: индекс назначения для строковых операций.
  • SP / ESP / RSP: указатель стека для верхнего адреса стека.
  • BP / EBP / RBP: указатель базы стека для хранения адреса текущего кадра стека .
  • IP / EIP / RIP: указатель инструкции. Содержит счетчик программы , адрес следующей инструкции.

Сегментные регистры:

  • CS: Код
  • DS: Данные
  • SS: Стек
  • ES: Дополнительные данные
  • ФС: Дополнительные данные # 2
  • GS: Дополнительные данные # 3

Для остальных 8 регистров, доступных только в 64-битном режиме, особого назначения не предусматривалось.

Некоторые инструкции компилируются и выполняются более эффективно при использовании этих регистров по назначению. Например, использование AL в качестве аккумулятора и немедленное добавление к нему байтового значения дает эффективный код операции добавления к AL, равный 04h, в то время как использование регистра BL дает общий и более длинный код операции добавления к регистру 80C3h. Другой пример - деление и умножение с двойной точностью, которое работает специально с регистрами AX и DX.

Современные компиляторы выиграли от введения младшего байта ( базовый байт индекса-шкалы ), который позволяет обрабатывать регистры единообразно (как миникомпьютер ). Однако универсальное использование sib-байта неоптимально, так как оно дает более длинные кодировки, чем использование его только выборочно, когда это необходимо. (Основным преимуществом sib-байта является ортогональность и более мощные режимы адресации, которые он обеспечивает, что позволяет сохранять инструкции и использовать регистры для вычислений адреса, таких как масштабирование индекса.) Некоторые специальные инструкции потеряли приоритет в конструкции оборудования. и стал медленнее, чем эквивалентные небольшие кодовые последовательности. Ярким примером является инструкция LODSW.

Структура [ править ]

Примечание. Регистры? PL доступны только в 64-битном режиме.

Примечание. Регистры? IL доступны только в 64-битном режиме.

Режимы работы [ править ]

Реальный режим [ править ]

Режим реального адреса [26], обычно называемый реальным режимом, представляет собой рабочий режим процессоров, совместимых с процессорами 8086 и более поздних версий . Реальный режим характеризуется 20-битным сегментированным адресным пространством памяти (это означает, что можно адресовать только 1 МиБ памяти - фактически, немного больше [p] ), прямым программным доступом к периферийному оборудованию и отсутствием концепции защиты памяти или многозадачности при аппаратный уровень. Все процессоры x86 серии 80286 и более поздние запускаются в реальном режиме при включении; 80186У процессоров и ранее был только один рабочий режим, который эквивалентен реальному режиму в более поздних чипах. (На платформе IBM PC прямой программный доступ к подпрограммам IBM BIOS доступен только в реальном режиме, поскольку BIOS написан для реального режима. Однако это свойство не процессора x86, а дизайна IBM BIOS.)

Чтобы использовать более 64 КБ памяти, необходимо использовать сегментные регистры. Это создало большие сложности для разработчиков компилятора, которые ввели режимы нечетных указателей, такие как «ближний», «дальний» и «огромный», чтобы в разной степени использовать неявный характер сегментированной архитектуры, при этом некоторые указатели содержат 16-битные смещения внутри подразумеваемых сегментов, а другие указатели, содержащие адреса сегментов и смещения внутри сегментов. Технически возможно использовать до 256 КБ памяти для кода и данных и до 64 КБ для кода, установив все четыре сегментных регистра один раз, а затем только с использованием 16-битных смещений (необязательно с префиксами переопределения сегментов по умолчанию), чтобы адресная память, но это накладывает существенные ограничения на способ адресации данных и объединения операндов памяти,и это нарушает архитектурное намерение разработчиков Intel, которое состоит в том, чтобы отдельные элементы данных (например, массивы, структуры, единицы кода) содержались в отдельных сегментах и ​​адресовались их собственными адресами сегментов в новых программах, которые не были перенесены из более ранних 8 -битные процессоры с 16-битным адресным пространством.

Нереальный режим [ править ]

Режим Unreal используется какой-нибудь 16-битной операционной системой или 32-битным загрузчиком .

Режим управления системой [ править ]

Режим управления системой (SMM) используется только системным микропрограммным обеспечением ( BIOS / UEFI ), а не операционными системами и программным обеспечением. Код SMM работает в SMRAM.

Защищенный режим [ править ]

В дополнение к реальному режиму Intel 80286 поддерживает защищенный режим, расширяя адресуемую физическую память до 16 МБ и адресуемую виртуальную память до 1  ГБ , а также предоставляя защищенную память , которая предотвращает разрушение программ друг друга. Это делается с помощью сегментных регистров только для хранения индекса в таблице дескрипторов, которая хранится в памяти. Есть две такие таблицы, глобальная таблица дескрипторов (GDT) и локальная таблица дескрипторов (LDT), каждая из которых содержит до 8192 дескрипторов сегментов, каждый сегмент дает доступ к 64 КБ памяти. В 80286 дескриптор сегмента предоставляет 24-битный базовый адрес., и этот базовый адрес добавляется к 16-битному смещению для создания абсолютного адреса. Базовый адрес из таблицы выполняет ту же роль, что и буквальное значение сегментного регистра в реальном режиме; сегментные регистры были преобразованы из прямых регистров в косвенные регистры. Каждому сегменту может быть назначен один из четырех уровней кольца, используемых для аппаратной безопасности компьютера . Каждый дескриптор сегмента также содержит поле ограничения сегмента, которое определяет максимальное смещение, которое может использоваться с сегментом. Поскольку смещения составляют 16 бит, каждый сегмент по-прежнему ограничен 64 КБ в защищенном режиме 80286. [27]

Каждый раз, когда сегментный регистр загружается в защищенном режиме, 80286 должен прочитать 6-байтовый дескриптор сегмента из памяти в набор скрытых внутренних регистров. Таким образом, загрузка сегментных регистров в защищенном режиме происходит намного медленнее, чем в реальном, и следует избегать частой смены сегментов. Фактические операции с памятью с использованием сегментов защищенного режима не сильно замедляются, потому что 80286 и более поздние версии имеют оборудование для проверки смещения относительно ограничения сегмента параллельно с выполнением инструкции.

В Intel 80386 расширенные смещения , а также предел поле сегмента в каждом дескрипторе сегмента до 32 бит, что позволяет сегмент , чтобы охватить все пространство памяти. Он также представил поддержку в защищенном режиме для подкачки , механизм, позволяющий использовать выгружаемую виртуальную память.(при размере страницы 4 КБ). Пейджинг позволяет процессору сопоставлять любую страницу пространства виртуальной памяти с любой страницей пространства физической памяти. Для этого он использует дополнительные таблицы сопоставления в памяти, называемые таблицами страниц. Защищенный режим на 80386 может работать с включенной или отключенной подкачкой; механизм сегментации всегда активен и генерирует виртуальные адреса, которые затем отображаются механизмом подкачки, если он включен. Механизм сегментации также можно эффективно отключить, задав для всех сегментов базовый адрес 0 и ограничение по размеру, равное всему адресному пространству; для этого также требуется таблица дескрипторов сегмента минимального размера, состоящая только из четырех дескрипторов (поскольку сегменты FS и GS использовать не обязательно). [q]

Пейджинг широко используется современными многозадачными операционными системами. Linux , 386BSD и Windows NT были разработаны для 386, потому что это был первый процессор на архитектуре Intel, поддерживающий пейджинг и смещение 32-битных сегментов. Архитектура 386 стала основой всех дальнейших разработок в серии x86.

Процессоры x86, которые поддерживают защищенный режим, загружаются в реальный режим для обратной совместимости со старым классом процессоров 8086. При включении питания (он же загрузка ) процессор инициализируется в реальном режиме, а затем начинает выполнять инструкции. Загрузочный код операционной системы, который может храниться в ПЗУ , может переводить процессор в защищенный режим для включения подкачки и других функций. Набор команд в защищенном режиме аналогичен используемому в реальном режиме. Однако некоторые ограничения, которые применяются к реальному режиму (например, невозможность использовать ax, cx, dx при адресации [ необходима ссылка ]) не действуют в защищенном режиме. И наоборот, сегментная арифметика, обычная практика в коде реального режима, не допускается в защищенном режиме.

Виртуальный режим 8086 [ править ]

Существует также подрежим работы в 32-битном защищенном режиме (он же защищенный режим 80386), называемый виртуальным режимом 8086 , также известный как режим V86 . По сути, это специальный гибридный режим работы, который позволяет программам и операционным системам реального режима работать под управлением операционной системы супервизора защищенного режима. Это обеспечивает большую гибкость при одновременном запуске программ как в защищенном, так и в реальном режиме. Этот режим доступен исключительно для 32-битной версии защищенного режима; его нет ни в 16-битной версии защищенного режима, ни в длинном режиме.

Длинный режим [ править ]

В середине 1990-х было очевидно, что 32-битное адресное пространство архитектуры x86 ограничивает ее производительность в приложениях, требующих больших наборов данных. 32-битное адресное пространство позволит процессору напрямую адресовать только 4 ГБ данных, что превышает размер таких приложений, как обработка видео и движки баз данных . Используя 64-битные адреса, можно напрямую адресовать 16  EiB данных, хотя большинство 64-битных архитектур не поддерживают доступ к полному 64-битному адресному пространству; например, AMD64 поддерживает только 48 бит из 64-битного адреса, разделенного на четыре уровня подкачки.

В 1999 году AMD опубликовала (почти) полную спецификацию 64-битного расширения архитектуры x86, которое они назвали x86-64 с заявленными намерениями создать. Эта конструкция в настоящее время используется почти во всех процессорах x86, за некоторыми исключениями, предназначенными для встраиваемых систем .

Серийно выпускаемые чипы x86-64 для общего рынка стали доступны четыре года спустя, в 2003 году, после того, как время было потрачено на испытания и доработку рабочих прототипов; примерно в то же время первоначальное название x86-64 было изменено на AMD64 . Успех линейки процессоров AMD64 в сочетании с вялым приемом архитектуры IA-64 вынудил Intel выпустить собственную реализацию набора инструкций AMD64. Intel ранее реализовывала поддержку AMD64 [28], но решила не включать ее в надежде, что AMD не выведет AMD64 на рынок до того, как новый набор инструкций Itanium IA-64 будет широко принят. Он назвал свою реализацию AMD64 EM64T , а позже переименовал ее в Intel 64 .

В своей литературе и названиях версий продуктов Microsoft и Sun совместно называют AMD64 / Intel 64 x64 в операционных системах Windows и Solaris . В дистрибутивах Linux он обозначается как «x86-64», его вариант «x86_64» или «amd64». В системах BSD используется amd64, а в macOS - x86_64.

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

Это был первый случай, когда серьезное расширение архитектуры x86 было инициировано и разработано производителем, отличным от Intel. Кроме того, это был первый случай, когда Intel приняла технологию подобного рода из внешнего источника.

Расширения [ править ]

Единица с плавающей точкой [ править ]

Ранние процессоры x86 могли быть расширены аппаратным обеспечением с плавающей запятой в виде серии числовых сопроцессоров с плавающей запятой с такими именами, как 8087 , 80287 и 80387, сокращенно x87. Это было также известно как NPX (Расширение числового процессора ), подходящее название, поскольку сопроцессоры, хотя и использовались в основном для вычислений с плавающей запятой, также выполняли целочисленные операции как с двоичными, так и с десятичными форматами. За очень немногими исключениями, 80486 и последующие процессоры x86 затем интегрировали эту функциональность x87 в микросхему, что сделало инструкции x87 де-факто неотъемлемой частью набора инструкций x86.

Каждый регистр x87, известный как от ST (0) до ST (7), имеет ширину 80 бит и хранит числа в стандартном формате двойной расширенной точности с плавающей запятой IEEE . Эти регистры организованы в виде стека с ST (0) наверху. Это было сделано для того, чтобы сохранить пространство кода операции, и поэтому регистры случайным образом доступны только для любого из операндов в инструкции «регистр-регистр»; ST0 всегда должен быть одним из двух операндов, либо источником, либо получателем, независимо от того, является ли другой операнд ST (x) или операндом памяти. Однако произвольный доступ к регистрам стека может быть получен с помощью инструкции, которая заменяет любой указанный ST (x) на ST (0).

Операции включают арифметические и трансцендентные функции, включая тригонометрические и экспоненциальные функции, а также инструкции, которые загружают общие константы (такие как 0; 1; e, основание натурального логарифма; log2 (10); и log10 (2)) в одну из регистры стека. Хотя целочисленные возможности часто упускаются из виду, x87 может работать с большими целыми числами с помощью одной инструкции, чем 8086, 80286, 80386 или любой процессор x86 без 64-битных расширений, и повторять целочисленные вычисления даже с небольшими значениями (например, 16-бит) можно ускорить, выполнив целочисленные инструкции на ЦП x86 и x87 параллельно. (ЦП x86 продолжает работать, пока сопроцессор x87 вычисляет, а x87 устанавливает сигнал на x86, когда он завершается, или прерывает x86, если ему нужно внимание из-за ошибки.)

MMX [ править ]

MMX - это набор инструкций SIMD, разработанный Intel и представленный в 1997 году для микропроцессора Pentium MMX . Набор команд MMX был разработан на основе аналогичной концепции, впервые использованной в Intel i860 . Он поддерживается на большинстве последующих процессоров IA-32 Intel и других поставщиков. MMX обычно используется для обработки видео (например, в мультимедийных приложениях).

MMX добавил в архитектуру 8 новых регистров , известных как MM0 - MM7 (далее именуемые MMn ). На самом деле эти новые регистры были просто псевдонимами для существующих регистров стека x87 FPU. Следовательно, все, что было сделано со стеком с плавающей запятой, также повлияло бы на регистры MMX. В отличие от стека FP, эти регистры MMn были фиксированными, а не относительными, и поэтому они были доступны случайным образом. В наборе команд не использовалась семантика, подобная стеку, поэтому существующие операционные системы могли правильно сохранять и восстанавливать состояние регистров при многозадачности без изменений.

Каждый из регистров MMn представляет собой 64-битное целое число. Однако одной из основных концепций набора инструкций MMX является концепция типов упакованных данных , что означает, что вместо использования всего регистра для одного 64-битного целого числа ( четверного слова ) его можно использовать для хранения двух 32-битных целых чисел. ( двойное слово ), четыре 16-битных целых числа ( слово ) или восемь 8-битных целых чисел ( байт ). Учитывая, что 64-битные регистры MMN MMX имеют псевдонимы для стека FPU и каждый из регистров с плавающей запятой имеет ширину 80 бит, старшие 16 бит регистров с плавающей запятой не используются в MMX. Эти биты устанавливаются на все единицы любой инструкцией MMX, что соответствует представлению NaN или бесконечностей с плавающей запятой .

3DNow! [ редактировать ]

В 1997 году AMD представила 3DNow !. Внедрение этой технологии совпало с появлением развлекательных 3D- приложений и было разработано для повышения производительности векторной обработки ЦП приложений с интенсивной графикой. Разработчики 3D-видеоигр и поставщики оборудования для 3D-графики используют 3DNow! для повышения их производительности на процессорах AMD серий K6 и Athlon .

3DNow! был разработан как естественная эволюция MMX от целых чисел к плавающей запятой. Таким образом, он использует точно такое же соглашение об именах регистров, что и MMX, то есть от MM0 до MM7. Единственное отличие состоит в том, что вместо упаковки целых чисел в эти регистры в каждый регистр упаковываются два числа с плавающей запятой одинарной точности . Преимущество псевдонима регистров FPU заключается в том, что те же самые инструкции и структуры данных, которые используются для сохранения состояния регистров FPU, также могут использоваться для сохранения 3DNow! регистр состояний. Таким образом, не требуется никаких специальных модификаций операционных систем, которые иначе не знали бы о них.

SSE и AVX [ править ]

В 1999 году Intel представила набор инструкций Streaming SIMD Extensions (SSE) , а в 2000 году - SSE2. Первое добавление позволило выгрузить базовые операции с плавающей запятой из стека x87, а второе сделало MMX почти устаревшим и сделало инструкции реалистичными для обычных компиляторов. Введенный в 2004 году вместе с Prescott ревизии Pentium 4 процессора, SSE3 добавлены специальные памяти и потоков инструкций -Обработка для повышения производительности от Intel HyperThreadingтехнология. AMD лицензировала набор инструкций SSE3 и реализовала большинство инструкций SSE3 для своей версии E и более поздних процессоров Athlon 64. Athlon 64 не поддерживает HyperThreading и не имеет тех инструкций SSE3, которые используются только для HyperThreading.

SSE отклонил все устаревшие подключения к стеку FPU. Это также означало, что этот набор команд отбросил все унаследованные соединения с предыдущими поколениями наборов инструкций SIMD, таких как MMX. Но это освободило разработчиков, позволяя им использовать регистры большего размера, не ограничиваясь размером регистров FPU. Разработчики создали восемь 128-битных регистров с именами от XMM0 до XMM7. ( Примечание : в AMD64количество регистров SSE XMM было увеличено с 8 до 16.) Однако обратная сторона заключалась в том, что операционные системы должны были знать об этом новом наборе инструкций, чтобы иметь возможность сохранять свои состояния регистров. Поэтому Intel создала слегка измененную версию защищенного режима, названную расширенным режимом, которая позволяет использовать инструкции SSE, тогда как они остаются отключенными в обычном защищенном режиме. ОС, знающая о SSE, активирует расширенный режим, тогда как ОС, не знающая об этом, войдет только в традиционный защищенный режим.

SSE - это набор инструкций SIMD, который работает только со значениями с плавающей запятой, например 3DNow !. Однако, в отличие от 3DNow! он отключает все унаследованные соединения со стеком FPU. Поскольку у него регистры большего размера, чем у 3DNow !, SSE может упаковать в свои регистры вдвое больше чисел с плавающей запятой одинарной точности . Исходный SSE ограничивался числами одинарной точности, например 3DNow !. SSE2 представил возможность упаковки с двойной точностью.числа тоже, которые 3DNow! не имел возможности сделать это, поскольку число с двойной точностью имеет размер 64 бита, что было бы полным размером одного 3DNow! Регистр MMn. При 128 битах регистры SSE XMMn могут упаковывать два числа с плавающей запятой двойной точности в один регистр. Таким образом, SSE2 гораздо больше подходит для научных расчетов, чем SSE1 или 3DNow !, которые были ограничены только одинарной точностью. SSE3 не вводит никаких дополнительных регистров.

Расширенные векторные расширения (AVX) удвоили размер регистров SSE до 256-битных регистров YMM. Он также представил схему кодирования VEX для размещения регистров большего размера, а также несколько инструкций для перестановки элементов. AVX2 не вводил дополнительных регистров, но отличался добавлением инструкций по маскированию, сбору и перемешиванию.

AVX-512 имеет еще одно расширение до 32 512-битных регистров ZMM и новую схему EVEX. В отличие от своих предшественников с монолитным расширением, он разделен на множество подмножеств, которые могут быть реализованы конкретными моделями процессоров.

Расширение физического адреса (PAE) [ править ]

Расширение физического адреса или PAE было впервые добавлено в Intel Pentium Pro , а затем AMD в процессоры Athlon [29], чтобы обеспечить возможность адресации до 64 ГБ ОЗУ. Без PAE физическая оперативная память в 32-битном защищенном режиме обычно ограничена 4  ГБ . PAE определяет другую структуру таблицы страниц с более широкими записями таблицы страниц и третьим уровнем таблицы страниц, что позволяет использовать дополнительные биты физического адреса. Хотя первоначальные реализации на 32-битных процессорах теоретически поддерживали до 64 ГБ ОЗУ, ограничения набора микросхем и других платформ часто ограничивали то, что фактически можно было использовать. x86-64процессоры определяют структуры таблиц страниц, которые теоретически допускают до 52 бит физического адреса, хотя, опять же, набор микросхем и другие проблемы платформы (например, количество доступных слотов DIMM и максимально возможный объем ОЗУ на модуль DIMM) не позволяют использовать такое большое физическое адресное пространство. осуществленный. На процессорах x86-64 режим PAE должен быть активен до переключения в длительный режим и должен оставаться активным, пока активен длинный режим , поэтому в длинном режиме нет режима «без PAE». Режим PAE не влияет на ширину линейных или виртуальных адресов.

x86-64 [ править ]

В кластерах суперкомпьютеров (по данным TOP 500 и визуализированным на диаграмме выше, последнее обновление 2013 г.) появление 64-битных расширений для архитектуры x86 позволило 64-битным процессорам x86 от AMD и Intel (оливково-серый с небольшими открытыми кружки и красный с маленькими открытыми кружками на диаграмме соответственно) для замены большинства архитектур процессоров RISC, ранее использовавшихся в таких системах (включая PA-RISC , SPARC , Alpha и другие), и 32-битный x86 (зеленый на диаграмме ), хотя изначально Intel безуспешно пыталась заменить x86 на новую несовместимую 64-битную архитектуру в Itanium.процессор. Основной архитектурой, отличной от x86, которая по состоянию на 2014 год все еще используется в суперкомпьютерных кластерах, является Power ISA, используемая микропроцессорами IBM POWER (синяя с ромбовидной мозаикой на диаграмме), с SPARC на втором месте.

К 2000-м годам ограничения на адресацию памяти 32-разрядных процессоров x86 стали препятствием для их использования в высокопроизводительных вычислительных кластерах и мощных настольных рабочих станциях. Устаревшая 32-разрядная архитектура x86 конкурировала с гораздо более продвинутыми 64-разрядными архитектурами RISC, которые могли адресовать гораздо больший объем памяти. Intel и всей экосистеме x86 требовалась 64-битная адресация памяти, если x86 должна была пережить эпоху 64-битных вычислений, поскольку программные приложения для рабочих станций и настольных компьютеров вскоре начали выходить за пределы 32-битной адресации памяти. Однако Intel сочла, что настало подходящее время для смелого шага и использования перехода на 64-битные настольные компьютеры для перехода от архитектуры x86 в целом, эксперимент, который в конечном итоге провалился.

В 2001 году Intel попыталась внедрить в свой процессор Itanium 64-разрядную архитектуру, отличную от x86, под названием IA-64 , изначально нацеленную на рынок высокопроизводительных вычислений , надеясь, что она в конечном итоге заменит 32-разрядную архитектуру x86. [30] Хотя IA-64 был несовместим с x86, процессор Itanium действительно предоставлял возможности эмуляции для перевода инструкций x86 в IA-64, но это так сильно повлияло на производительность программ x86, что редко, если вообще когда-либо, действительно было полезно для Пользователи: программисты должны переписать программы x86 для архитектуры IA-64, иначе их производительность на Itanium будет на несколько порядков хуже, чем на настоящем процессоре x86. Рынок отказался от процессора Itanium, поскольку он сломалсяобратная совместимость и предпочтение продолжать использовать чипы x86, и очень мало программ было переписано для IA-64.

AMD решила пойти другим путем в сторону 64-битной адресации памяти, убедившись, что обратная совместимость не пострадает. В апреле 2003 года AMD выпустила первый процессор x86 с 64-разрядными регистрами общего назначения, Opteron , способный адресовать гораздо более 4  ГБ виртуальной памяти с использованием нового расширения x86-64 (также известного как AMD64 или x64). 64-битные расширения архитектуры x86 были включены только в недавно введенном длинном режиме , поэтому 32-битные и 16-битные приложения и операционные системы могли просто продолжать использовать процессор AMD64 в защищенном или других режимах, даже без малейшей жертвы. производительность [31]и с полной совместимостью с исходными инструкциями 16-разрядного Intel 8086. [32] ( стр. 13–14 ) Рынок отреагировал положительно, приняв 64-разрядные процессоры AMD как для высокопроизводительных приложений, так и для корпоративных или домашних компьютеров.

Увидев, что рынок отвергает несовместимый процессор Itanium, а Microsoft поддерживает AMD64, Intel пришлось отреагировать и в июле 2004 года представила свой собственный процессор x86-64, Prescott Pentium 4 [33]. В результате появился процессор Itanium с его IA-64. набор команд используется редко, и x86, в его воплощении x86-64, по-прежнему является доминирующей архитектурой ЦП в невстроенных компьютерах.

x86-64 также представил бит NX , который предлагает некоторую защиту от ошибок безопасности, вызванных переполнением буфера .

В результате 64-битного вклада AMD в линейку x86 и его последующего принятия Intel, 64-битные RISC-архитектуры перестали быть угрозой для экосистемы x86 и почти исчезли с рынка рабочих станций. x86-64 начали использоваться в мощных суперкомпьютерах (в его воплощениях AMD Opteron и Intel Xeon ), рынке, который ранее был естественной средой обитания для 64-битных RISC-проектов (таких как микропроцессоры IBM POWER или SPARCпроцессоры). Большой скачок к 64-битным вычислениям и поддержание обратной совместимости с 32-битным и 16-битным программным обеспечением позволили архитектуре x86 стать сегодня чрезвычайно гибкой платформой, при этом чипы x86 используются в небольших системах с низким энергопотреблением (например, Intel Quark и Intel Atom ) на быстрые игровые настольные компьютеры (например, Intel Core i7 и AMD FX / Ryzen ) и даже доминируют в больших суперкомпьютерных кластерах , фактически оставляя в качестве конкурента только 32-разрядную и 64-разрядную архитектуру RISC ARM. смартфон и планшет на рынке.

Виртуализация [ править ]

До 2005 года процессоры архитектуры x86 не могли соответствовать требованиям Попека и Голдберга - спецификации для виртуализации, созданной в 1974 году Джеральдом Попеком и Робертом П. Голдбергом . Однако продукты гипервизора виртуализации x86 с открытым исходным кодом и проприетарные продукты были разработаны с использованием программной виртуализации . Проприетарные системы включают Hyper-V , Parallels Workstation , VMware ESX , VMware Workstation , VMware Workstation Player и Windows Virtual PC , а бесплатные системы с открытым исходным кодом включают QEMU., Виртуальная машина на основе ядра , VirtualBox и Xen .

Введение в 2005 году наборов инструкций AMD-V и Intel VT-x позволило процессорам x86 соответствовать требованиям виртуализации Попека и Голдберга. [34]

AES [ править ]

См. Также [ править ]

  • язык ассемблера x86
  • списки инструкций x86
  • CPUID
  • Itanium
  • x86-64
  • 680x0 , конкурирующая архитектура в эпоху 16- и ранних 32-битных
  • PowerPC , конкурирующая архитектура в более позднюю 32-битную и 64-битную эпохи
  • Микроархитектура
  • Список микропроцессоров AMD
  • Список микропроцессоров Intel
  • Список микроархитектур ЦП Intel
  • Список микропроцессоров VIA
  • Список производителей x86
  • Базовый адрес ввода / вывода
  • Запрос на прерывание
  • iAPX
  • Тик-тактовая модель

Заметки [ править ]

  1. ^ В отличие от микроархитектуры (и конкретной электронной и физической реализации), используемой для конкретной конструкции микропроцессора.
  2. ^ Intel отказалась от схемы именования "x86" с P5 Pentium в 1993 году (поскольку числа не могли быть зарегистрированы как товарный знак). Однако термин x86 уже был принят среди технических специалистов, разработчиков компиляторов и т. Д.
  3. ^ GRID компас ноутбук, например.
  4. ^ Включаяпроцессоры 8088 , 80186 , 80188 и 80286 .
  5. ^ Такая система также содержала обычное сочетание стандартныхкомпонентов поддержки серии 7400 , включая мультиплексоры , буферы и логику клея .
  6. ^ Фактическое значение iAPX было Intel Advanced Performance Architecture , или иногда Intel Advanced Processor Architecture .
  7. ^ конец 1981 - начало 1984, приблизительно
  8. ^ Рынок встроенных процессоров представлен более чем 25 различными архитектурами , которые из-за чувствительности к цене, низкого энергопотребления и требований к простоте оборудования превосходят по численности x86.
  9. ^ NEC V20 и V30 также предоставляли более старый набор инструкций 8080, что позволяло ПК, оснащенным этими микропроцессорами, работать с приложениями CP / M на полной скорости (т. Е. Без необходимости имитировать 8080 с помощью программного обеспечения).
  10. ^ Fabless компания разработала чип и контракт другой компании на его производство,то время как fabbed компания будет делать как дизайн и производство сам. Некоторые компании начинали как выдуманные производители, а позже стали дизайнерами без вымыслов, одним из таких примеров является AMD.
  11. ^ Однако у него был более медленный FPU, что немного иронично, поскольку Cyrix начинала как разработчик быстрых модулей с плавающей запятой для процессоров x86.
  12. ^ 16-битные и 32-битные микропроцессоры были представлены в 1978 и 1985 годах соответственно; планы по 64-битной системе были объявлены в 1999 году и постепенно вводились с 2003 года и далее.
  13. ^ Некоторые проекты "CISC", такие как PDP-11 , могут использовать два.
  14. ^ Это потому, что целочисленная арифметика генерирует перенос между последующими битами (в отличие от простых побитовых операций).
  15. ^ Два MSR, представляющих особый интерес, - это SYSENTER_EIP_MSR и SYSENTER_ESP_MSR, представленные в процессоре Pentium® II, которые хранят адрес обработчика системных служб режима ядра и соответствующий указатель стека ядра. Инициализируемые во время запуска системы, SYSENTER_EIP_MSR и SYSENTER_ESP_MSR используются командами SYSENTER (Intel) или SYSCALL (AMD) для выполнения быстрых системных вызовов, что примерно в три раза быстрее, чем метод программного прерывания, использовавшийся ранее.
  16. ^ Поскольку сегментированный адрес представляет собой сумму 16-битного сегмента, умноженного на 16, и 16-битного смещения, максимальный адрес составляет 1,114,095 (шестнадцатеричный 10FFEF), для адресуемости 1,114,096 байт = 1 МБ + 65 520 байт. До 80286 процессоры x86 имели только 20 физических адресных строк (битовые сигналы адреса), поэтому 21-й бит адреса, бит 20, отбрасывался, а адреса после 1 МБ были зеркалами нижнего конца адресного пространства (начиная с адреса нуль). Начиная с 80286, все процессоры x86 имеют не менее 24 физических адресных линий, и бит 20 вычисленного адреса выводится на адресную шину в реальном режиме, позволяя процессору адресовать полные 1114 096 байт, достижимые с помощью сегментированного адреса x86. На популярной платформе IBM PCпереключаемое оборудование для отключения 21-го бита адреса было добавлено к машинам с 80286 или более поздней версией, чтобы могли работать все программы, разработанные для моделей на базе 8088/8086, в то время как более новое программное обеспечение могло использовать преимущества «верхней» памяти в реальном режиме и полной Адресное пространство 16 МБ или больше в защищенном режиме - см. Шлюз A20.
  17. ^ Дополнительная запись дескриптора в верхней части таблицы также требуется, потому что таблица начинается с нуля, но минимальный индекс дескриптора, который может быть загружен в регистр сегмента, равен 1; значение 0 зарезервировано для представления сегментного регистра, который не указывает ни на один сегмент.

Ссылки [ править ]

  1. ^ Прайс, Дэйв (11 мая 1989). «32-разрядный процессор 80486 открывает новые горизонты в области плотности микросхем и операционной производительности. (Intel Corp.) (объявление о продукте) EDN» (пресс-релиз).
  2. ^ "Zet: Открытая реализация x86 (IA-32): Обзор" . OpenCores . 4 ноября 2013 . Проверено 5 января 2014 года .
  3. Брэндон, Джонатан (15 апреля 2015 г.). «Облако за пределами x86: как возвращаются старые архитектуры» . ICloud PE . Новости бизнес-облака . Проверено 23 ноября 2020 года . Несмотря на доминирование x86 в центрах обработки данных, трудно игнорировать тот шум, который производители создавали за последние пару лет вокруг архитектур, отличных от x86, таких как ARM ...
  4. ^ Дворжак, Джон К. "Что случилось с Intel iAPX432?" . Dvorak.org . Проверено 18 апреля 2014 года .
  5. ^ Справочник программиста iAPX 286 (PDF) . Intel. 1983 г.
  6. ^ a b Руководство пользователя iAPX 86, 88 (PDF) . Intel. Август 1981 г.
  7. Эдвардс, Бендж (16 июня 2008 г.). «Рождение стандарта: микропроцессор Intel 8086» . PCWorld . Проверено 14 сентября 2014 года .
  8. Стэнли Мазор (январь – март 2010 г.). «Intel 8086». IEEE Annals of the History of Computing . 32 (1): 75–79. DOI : 10.1109 / MAHC.2010.22 .
  9. ^ «AMD раскрывает новые технологии на форуме микропроцессоров» (пресс-релиз). AMD . 5 октября 1999 года Архивировано из оригинальных 2 -го марта 2000 года «Время и снова, процессорные архитекторы смотрели на безвкусных архитектурах x86 и заявили , что не может быть растянуто , чтобы приспособить самые последние инновации,» сказал Натан Brookwood, главный аналитик Insight 64.
  10. ^ «Microsoft прекращает поддержку Intel Itanium» . Проверено 14 сентября 2014 года .
  11. ^ a b «Справочное руководство по оптимизации архитектур Intel 64 и IA-32» (PDF) . Intel. Сентябрь 2019 г. 3.4.2.2 Оптимизация для макросов.
  12. ^ a b Туман, Агнер. «Микроархитектура процессоров Intel, AMD и VIA» (PDF) . п. 107. Core2 может выполнять слияние макросов только в 16-битном и 32-битном режимах. Core Nehalem также может делать это в 64-битном режиме.
  13. ^ «Рекомендации по установке и установке для компьютеров под управлением Windows x64 Edition» . Проверено 14 сентября 2014 года .
  14. ^ "Процессоры - Какой режим адресации используют процессоры Intel?" . Проверено 14 сентября 2014 года .
  15. ^ "Переключатели DSB" . Усилитель Intel VTune 2013 . Intel . Проверено 26 августа 2013 года .
  16. ^ "Руководство пользователя семейства 8086" (PDF) . Корпорация Intel. Октябрь 1979. С. 2–69.
  17. ^ «Справочное руководство программиста iAPX 286» (PDF) . Корпорация Intel. 1983. 2.4.3 Режимы адресации памяти.
  18. ^ 80386 Справочное руководство программиста (PDF) . Корпорация Intel. 1986. 2.5.3.2 РАСЧЕТ ЭФФЕКТИВНОГО АДРЕСА.
  19. ^ a b Руководство разработчика программного обеспечения для архитектур Intel® 64 и IA-32, Том 1: Базовая архитектура . Корпорация Intel. Март 2018. Глава 3.
  20. ^ «Руководство по сборке x86» . Cs.virginia.edu. 11 сентября 2013 . Проверено 6 февраля 2014 года .
  21. ^ "FSTSW / FNSTSW - Сохранить слово состояния x87 FPU" . Форма инструкции FNSTSW AX используется в основном при условном переходе ...
  22. ^ Руководство разработчика программного обеспечения для архитектур Intel 64 и IA-32 Том 1: Базовая архитектура (PDF) . Intel. Март 2013. Глава 8.
  23. ^ "Семейство Intel 80287" . CPU-мир .
  24. ^ Руководство разработчика программного обеспечения для архитектур Intel 64 и IA-32 Том 1: Базовая архитектура (PDF) . Intel. Март 2013. Глава 9.
  25. ^ Руководство разработчика программного обеспечения для архитектур Intel 64 и IA-32 Том 1: Базовая архитектура (PDF) . Intel. Март 2013. Глава 10.
  26. ^ Справочник программиста iAPX 286 (PDF) . Intel. 1983. Раздел 1.2, «Режимы работы» . Проверено 27 января 2014 года .
  27. ^ Справочник программиста iAPX 286 (PDF) . Intel. 1983. Глава 6, «Управление памятью и виртуальная адресация» . Проверено 27 января 2014 года .
  28. ^ Технология Intel Yamhill: совместимость с x86-64 | Geek.com
  29. AMD, Inc. (февраль 2002 г.). «Приложение E» (PDF) . Руководство по оптимизации кода процессора AMD Athlon ™ x86 (редакция K). п. 250 . Проверено 13 апреля 2017 года . 2-битный индекс, состоящий из битов PCD и PWT записи таблицы страниц, используется для выбора одного из четырех полей регистра PAT, когда PAE (расширения адреса страницы) включен, или когда PDE не описывает большую страницу.
  30. ^ Манек Дубаш (20 июля 2006). «Будет ли Intel отказываться от Itanium?» . Techworld . Проверено 19 декабря 2010 года . Когда-то Intel рекламировала его как замену линейке продуктов x86, но теперь ожидания от Itanium значительно снизились.
  31. ^ "Раскрытие тайны 64-битной производительности IBM WebSphere Application Server" (PDF) . Корпорация IBM. 6 сентября 2007 г. с. 14 . Проверено 9 апреля 2010 года . На рисунках 5, 6 и 7 также показано, что 32-разрядная версия WAS запускает приложения с полной аппаратной производительностью на платформах POWER и x86-64. В отличие от некоторых архитектур с 64-битными процессорами, оборудование POWER и x86-64 не эмулирует 32-битный режим. Следовательно, приложения, не использующие 64-разрядные функции, могут работать с полной производительностью в 32-разрядной версии WebSphere, работающей на вышеупомянутых 64-разрядных платформах.
  32. ^ «Том 2: Системное программирование» (PDF) . Руководство программиста по архитектуре AMD64 . Корпорация AMD. Сентябрь 2012 . Проверено 17 февраля 2014 года .
  33. ^ Чарли Demerjian (26 сентября 2003). «Почему компания Intel Prescott будет использовать расширения AMD64» . Спрашивающий . Проверено 7 октября 2009 года .
  34. ^ Адамс, Кейт; Агесен, Оле (21–25 октября 2006 г.). Сравнение программных и аппаратных средств виртуализации x86 (PDF) . Труды Международной конференции по архитектурной поддержке языков программирования и операционных систем, Сан-Хосе, Калифорния, США, 2006. ACM 1-59593-451-0 / 06/0010 . Проверено 22 декабря 2006 года .

Дальнейшее чтение [ править ]

  • Розенблюм, Мендель; Гарфинкель, Тал (май 2005 г.). Мониторы виртуальных машин: современные технологии и будущие тенденции . 38 . С. 39–47. CiteSeerX  10.1.1.614.9870 . DOI : 10,1109 / MC.2005.176 .

Внешние ссылки [ править ]

  • Почему Intel не может отказаться от x86
  • 32/64-битная инструкция по x86
  • Intel Intrinsics Guide , интерактивный справочный инструмент для внутренних инструкций Intel
  • Руководства разработчика программного обеспечения для архитектур Intel® 64 и IA-32
  • Руководства, руководства и документы ISA AMD для разработчиков, архитектура AMD64