x86 (также известный как 80x86 [3] или семейство 8086 [4] ) — семейство архитектур набора команд компьютера со сложным набором команд (CISC) [a], изначально разработанных Intel на основе микропроцессора 8086 и его варианта с 8-битной внешней шиной, 8088 . 8086 был представлен в 1978 году как полностью 16-битное расширение 8-битного микропроцессора Intel 8080 с сегментацией памяти в качестве решения для адресации большего объема памяти, чем может быть охвачено простым 16-битным адресом. Термин «x86» появился потому, что названия нескольких преемников процессора Intel 8086 заканчиваются на «86», включая 80186 , 80286 , 80386 и 80486 . В разговорной речи их названия были «186», «286», «386» и «486».
Термин не является синонимом совместимости с IBM PC , поскольку подразумевает множество другого компьютерного оборудования . Встроенные системы и компьютеры общего назначения использовали чипы x86 до начала рынка ПК-совместимых компьютеров , [b] некоторые из них до дебюта IBM PC (1981).
По состоянию на июнь 2022 года [обновлять]большинство проданных настольных и портативных компьютеров основаны на семействе архитектуры x86, [5] в то время как в мобильных категориях, таких как смартфоны или планшеты, доминирует ARM . В верхнем сегменте x86 продолжает доминировать в сегментах рабочих станций с интенсивными вычислениями и облачных вычислений . [6]
В 1980-х и начале 1990-х годов, когда 8088 и 80286 все еще были в ходу, термин x86 обычно представлял любой совместимый с 8086 процессор. Сегодня, однако, x86 обычно подразумевает двоичную совместимость с 32 -битным набором инструкций 80386. Это связано с тем, что этот набор инструкций стал чем-то вроде наименьшего общего знаменателя для многих современных операционных систем, а также, вероятно, потому, что этот термин стал общепринятым после появления 80386 в 1985 году.
Через несколько лет после появления 8086 и 8088, Intel добавила некоторую сложность в свою схему именования и терминологию, поскольку «iAPX» амбициозного, но злополучного процессора Intel iAPX 432 был опробован на более успешном семействе чипов 8086, [c] применяемом как своего рода префикс системного уровня. Система 8086, включая сопроцессоры, такие как 8087 и 8089 , и более простые системные чипы Intel, [d] таким образом была описана как система iAPX 86. [7] [e] Существовали также термины iRMX (для операционных систем), iSBC (для одноплатных компьютеров) и iSBX (для многомодульных плат на основе архитектуры 8086), все вместе под заголовком Microsystem 80. [ 8] [9] Однако эта схема именования была довольно временной, просуществовав несколько лет в начале 1980-х годов. [f]
Хотя 8086 был в первую очередь разработан для встраиваемых систем и небольших многопользовательских или однопользовательских компьютеров, в основном как ответ на успешный 8080-совместимый Zilog Z80 , [10] линейка x86 вскоре выросла в возможностях и вычислительной мощности. Сегодня x86 повсеместно используется как в стационарных, так и в портативных персональных компьютерах, а также в компьютерах среднего уровня , рабочих станциях , серверах и большинстве новых суперкомпьютерных кластеров списка TOP500 . Большое количество программного обеспечения , включая большой список операционных систем x86, используют аппаратное обеспечение на базе x86.
Однако современный x86 относительно редко встречается во встраиваемых системах , а небольшие маломощные приложения (использующие крошечные батареи) и рынки недорогих микропроцессоров, такие как бытовая техника и игрушки, не имеют значительного присутствия x86. [g] Здесь распространены простые 8- и 16-битные архитектуры, а также более простые RISC-архитектуры, такие как RISC-V , хотя x86-совместимые VIA C7 , VIA Nano , AMD Geode , Athlon Neo и Intel Atom являются примерами 32- и 64-битных конструкций, используемых в некоторых относительно маломощных и недорогих сегментах.
Было предпринято несколько попыток, в том числе и Intel, положить конец доминированию на рынке «неэлегантной» архитектуры x86, разработанной непосредственно на основе первых простых 8-битных микропроцессоров. Примерами этого являются iAPX 432 (проект, первоначально названный Intel 8800 [11] ), Intel 960 , Intel 860 и архитектура Intel/Hewlett-Packard Itanium . Однако постоянное совершенствование микроархитектуры x86 , схемотехники и производства полупроводников затруднило бы замену x86 во многих сегментах. 64-битное расширение x86 от AMD (на которое Intel в конечном итоге отреагировала совместимым дизайном) [12] и масштабируемость чипов x86 в виде современных многоядерных процессоров подчеркивают x86 как пример того, как постоянное совершенствование устоявшихся отраслевых стандартов может противостоять конкуренции со стороны совершенно новых архитектур. [13]
В таблице ниже перечислены модели процессоров и модельные ряды, реализующие различные архитектуры в семействе x86, в хронологическом порядке. Каждая линейка характеризуется значительно улучшенными или коммерчески успешными проектами микроархитектуры процессора.
В разное время такие компании, как IBM , VIA , NEC , [h] AMD , TI , STM , Fujitsu , OKI , Siemens , Cyrix , Intersil , C&T , NexGen , UMC и DM&P начали проектировать или производить [i] процессоры x86 (ЦП), предназначенные для персональных компьютеров и встраиваемых систем. Другие компании, которые проектировали или производили процессоры x86 или x87, включают ITT Corporation , National Semiconductor , ULSI System Technology и Weitek .
Такие реализации x86 редко были простыми копиями, но часто использовали различные внутренние микроархитектуры и различные решения на электронном и физическом уровнях. Вполне естественно, что ранние совместимые микропроцессоры были 16-битными, в то время как 32-битные конструкции были разработаны гораздо позже. Для рынка персональных компьютеров реальные количества начали появляться около 1990 года с процессорами, совместимыми с i386 и i486 , часто названными аналогично оригинальным чипам Intel.
После полностью конвейерного i486 в 1993 году Intel представила торговую марку Pentium (которая, в отличие от чисел, могла быть зарегистрирована как торговая марка ) для своего нового набора суперскалярных x86-проектов. После того, как схема наименования x86 теперь была юридически одобрена, другим поставщикам x86 пришлось выбирать другие названия для своих x86-совместимых продуктов, и изначально некоторые решили продолжить с вариациями схемы нумерации: IBM объединилась с Cyrix для производства 5x86 , а затем очень эффективных линеек 6x86 (M1) и 6x86 MX ( MII ) проектов Cyrix, которые были первыми x86-микропроцессорами, реализующими переименование регистров для обеспечения спекулятивного выполнения .
Тем временем AMD разработала и изготовила усовершенствованный, но задержанный процессор 5k86 ( K5 ), который внутренне был тесно связан с более ранней конструкцией AMD 29K RISC ; подобно Nx586 от NexGen , он использовал стратегию, при которой выделенные этапы конвейера декодируют инструкции x86 в единообразные и легко обрабатываемые микрооперации , — метод, который по сей день остается основой для большинства конструкций x86.
Некоторые ранние версии этих микропроцессоров имели проблемы с рассеиванием тепла. 6x86 также страдал от нескольких незначительных проблем совместимости, у Nx586 не было блока с плавающей точкой (FPU) и (тогда решающей) совместимости по выводам, в то время как у K5 была несколько разочаровывающая производительность, когда он (в конце концов) был представлен.
Неосведомленность потребителей об альтернативах серии Pentium еще больше способствовала тому, что эти разработки оказались сравнительно неудачными, несмотря на то, что K5 имел очень хорошую совместимость с Pentium, а 6x86 был значительно быстрее Pentium на целочисленном коде. [j] Позднее AMD удалось вырасти в серьезного конкурента с набором процессоров K6 , который уступил место очень успешным Athlon и Opteron .
Были и другие претенденты, такие как Centaur Technology (ранее IDT ), Rise Technology и Transmeta . Энергоэффективные процессоры C3 и C7 от VIA Technologies , разработанные компанией Centaur , продавались в течение многих лет после их выпуска в 2005 году. Разработка Centaur 2008 года, VIA Nano , была их первым процессором с суперскалярным и спекулятивным исполнением . Он был представлен примерно в то же время (в 2008 году), когда Intel представила Intel Atom , свой первый процессор «по порядку» после Pentium P5 .
За прошедшие годы к исходному набору инструкций x86 было добавлено множество дополнений и расширений, практически всегда с полной обратной совместимостью . [k] Семейство архитектур было реализовано в процессорах Intel, Cyrix , AMD , VIA Technologies и многих других компаний; существуют также открытые реализации, такие как платформа Zet SoC (в настоящее время неактивна). [16] Тем не менее, из них только Intel, AMD, VIA Technologies и DM&P Electronics имеют архитектурные лицензии x86, и из них только первые две активно производят современные 64-битные проекты, что привело к тому, что было названо «дуополией» Intel и AMD в процессорах x86.
Однако в 2014 году базирующаяся в Шанхае китайская компания Zhaoxin , совместное предприятие китайской компании и VIA Technologies, начала проектировать процессоры x86 на базе VIA для настольных компьютеров и ноутбуков. Выпуск новейшего семейства "7" [17] процессоров x86 (например, KX-7000), которые не так быстры, как чипы AMD или Intel, но все еще являются современными, [18] был запланирован на 2021 год; однако по состоянию на март 2022 года выпуск еще не состоялся. [19]
Архитектура набора инструкций дважды расширялась до большего размера слова . В 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». [20]
В 2023 году Intel предложила существенное изменение архитектуры, называемое X86S (ранее известное как X86-S). S в X86S означает «упрощение», что направлено на устранение поддержки устаревших режимов выполнения и инструкций. Процессор, реализующий это предложение, начнет выполнение непосредственно в длинном режиме и будет поддерживать только 64-разрядные операционные системы. 32-разрядный код будет поддерживаться только для пользовательских приложений, работающих в кольце 3, и будет использовать ту же упрощенную сегментацию, что и в длинном режиме. [21] [22]
Архитектура x86 представляет собой переменную длину инструкций, в первую очередь " CISC "-дизайн с упором на обратную совместимость . Однако набор инструкций не является типичным для CISC, а в основном представляет собой расширенную версию простых восьмибитных архитектур 8008 и 8080. Байтовая адресация включена, и слова хранятся в памяти с прямым порядком байтов. Доступ к памяти по невыровненным адресам разрешен почти для всех инструкций. Наибольший собственный размер для целочисленной арифметики и адресов памяти (или смещений ) составляет 16, 32 или 64 бита в зависимости от поколения архитектуры (более новые процессоры также включают прямую поддержку меньших целых чисел). Несколько скалярных значений могут обрабатываться одновременно с помощью блока SIMD, представленного в более поздних поколениях, как описано ниже. [l] Смещения немедленной адресации и немедленные данные могут быть выражены как 8-битные величины для часто встречающихся случаев или контекстов, где достаточно диапазона −128..127. Таким образом, типичные инструкции имеют длину 2 или 3 байта (хотя некоторые из них гораздо длиннее, а некоторые являются однобайтовыми).
Для дальнейшей экономии пространства кодирования большинство регистров выражаются в кодах операций с использованием трех или четырех бит, последний через префикс кода операции в 64-битном режиме, в то время как максимум один операнд инструкции может быть ячейкой памяти. [m] Однако этот операнд памяти может также быть местом назначения (или комбинированным источником и местом назначения), в то время как другой операнд, источник, может быть либо регистром, либо непосредственным. Помимо других факторов, это способствует размеру кода, который конкурирует с восьмибитными машинами, и позволяет эффективно использовать кэш-память инструкций. Относительно небольшое количество общих регистров (также унаследованных от своих 8-битных предков) сделало адресацию относительно регистра (использующую небольшие непосредственные смещения) важным методом доступа к операндам, особенно в стеке. Поэтому много работы было вложено в то, чтобы сделать такой доступ таким же быстрым, как доступ к регистрам, т. е. пропускную способность инструкции за один цикл в большинстве случаев, когда доступные данные доступны в кэше верхнего уровня.
Для оригинального 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 Many Core, реализованные процессорами Knights Corner Xeon Phi , и инструкции AVX-512, реализованные процессорами Knights Landing Xeon Phi и процессорами Skylake-X , используют 512-битные регистры SIMD.
Во время выполнения современные процессоры x86 используют несколько дополнительных шагов декодирования для разделения большинства инструкций на более мелкие части, называемые микрооперациями. Затем они передаются в блок управления , который буферизует и планирует их в соответствии с семантикой x86, чтобы они могли быть выполнены, частично параллельно, одним из нескольких (более или менее специализированных) блоков выполнения . Таким образом, эти современные конструкции x86 являются конвейерными , суперскалярными , а также способны к неупорядоченному и спекулятивному выполнению (через предсказание ветвлений , переименование регистров и предсказание зависимости памяти ), что означает, что они могут выполнять несколько (частичных или полных) инструкций x86 одновременно, и не обязательно в том же порядке, что и указано в потоке инструкций. [23] Некоторые процессоры 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). [24]
Transmeta использовала совершенно другой метод в своих процессорах Crusoe x86-совместимых. Они использовали JIT- трансляцию для преобразования инструкций x86 в набор инструкций VLIW процессора . Transmeta утверждала, что их подход позволяет создавать более энергоэффективные конструкции, поскольку процессор может отказаться от сложного шага декодирования более традиционных реализаций x86.
Режимы адресации для 16-разрядных режимов процессора можно суммировать с помощью формулы: [25] [26]
Режимы адресации для 32-разрядных режимов процессора x86 [27] можно суммировать с помощью формулы: [28]
Режимы адресации для 64-битного режима процессора можно суммировать формулой: [28]
Относительная адресация инструкций в 64-битном коде (RIP + смещение, где RIP — регистр указателя инструкций ) упрощает реализацию позиционно-независимого кода (как это используется в разделяемых библиотеках в некоторых операционных системах). [29]
У 8086 было64 КБ восьмибитной (или альтернативно32 К-слова 16-битного пространства ввода -вывода иСтек 64 КБ (один сегмент) в памяти, поддерживаемый компьютерным оборудованием . В стек можно помещать только слова (два байта). Стек растет в сторону численно меньших адресов, причем SS:SP указывает на последний помещенный элемент. Существует 256 прерываний , которые могут быть вызваны как оборудованием, так и программным обеспечением. Прерывания могут каскадироваться, используя стек для хранения адреса возврата .
Оригинальные Intel 8086 и 8088 имеют четырнадцать 16- битных регистров. Четыре из них (AX, BX, CX, DX) являются регистрами общего назначения (GPR), хотя каждый может иметь дополнительное назначение; например, только CX может использоваться как счетчик с инструкцией цикла. Каждый из них может быть доступен как два отдельных байта (таким образом, старший байт BX может быть доступен как BH, а младший байт как BL). Два регистра указателя имеют особые роли: SP (указатель стека) указывает на «вершину» стека , а BP (указатель базы) часто используется для указания на какое-то другое место в стеке, обычно выше локальных переменных (см. указатель кадра ). Регистры SI, DI, BX и BP являются адресными регистрами и также могут использоваться для индексации массива.
Для формирования адреса памяти используется один из четырех возможных «сегментных регистров» (CS, DS, SS и ES). В исходных 8086 / 8088 / 80186 / 80188 каждый адрес был построен из сегментного регистра и одного из регистров общего назначения. Например, ds:si — это обозначение для адреса, сформированного как [16 * ds + si], чтобы разрешить 20-битную адресацию вместо 16 бит, хотя это изменилось в более поздних процессорах. В то время поддерживались только определенные комбинации.
Регистр FLAGS содержит флаги, такие как флаг переноса , флаг переполнения и флаг нуля . Наконец, указатель инструкции (IP) указывает на следующую инструкцию, которая будет извлечена из памяти и затем выполнена; этот регистр не может быть напрямую доступен (чтен или записан) программой. [30]
Процессоры 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-битное упакованное десятичное целое число. [9] : S-6, S-13..S-15 Он также имеет свой собственный 16-битный регистр состояния, доступный через инструкцию fstsw , и обычно просто используют некоторые из его битов для ветвления, копируя их в обычные ФЛАГИ. [31]
В Intel 80286 для поддержки защищенного режима три специальных регистра содержат адреса таблиц дескрипторов (GDTR, LDTR, IDTR ), а четвертый регистр задач (TR) используется для переключения задач. 80287 является сопроцессором с плавающей точкой для 80286 и имеет те же регистры, что и 8087, с теми же форматами данных.
С появлением 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), [32] как 8087 и 80287. 80386 также мог использовать сопроцессор 80287. [33] В 80486 и всех последующих моделях x86 блок обработки с плавающей точкой (FPU) был интегрирован на кристалле.
В Pentium MMX добавлено восемь 64-битных целочисленных векторных регистров MMX (MM0–MM7, которые разделяют младшие биты с 80-битным стеком FPU). [34] В Pentium III компания Intel добавила 32-битный регистр управления/состояния потоковых расширений SIMD (SSE) (MXCSR) и восемь 128-битных регистров с плавающей точкой SSE (XMM0–XMM7). [35]
Начиная с процессора AMD Opteron , архитектура x86 расширила 32-битные регистры до 64-битных регистров аналогично тому, как имело место расширение с 16 до 32 бит. Префикс R (для «регистра») идентифицирует 64-битные регистры (RAX, RBX, RCX, RDX, RSI, RDI, RBP, RSP, RFLAGS, RIP), а также восемь дополнительных 64-битных общих регистров (R8–R15) были также введены при создании x86-64 . Кроме того, были добавлены еще восемь векторных регистров SSE (XMM8–XMM15). Однако эти расширения можно использовать только в 64-битном режиме, который является одним из двух режимов, доступных только в длинном режиме . Режимы адресации не претерпели кардинальных изменений по сравнению с 32-битным режимом, за исключением того, что адресация была расширена до 64 бит, виртуальные адреса теперь имеют знаковое расширение до 64 бит (чтобы запретить биты режима в виртуальных адресах), а другие детали селектора были значительно сокращены. Кроме того, был добавлен режим адресации, позволяющий ссылаться на память относительно RIP ( указатель инструкций ), чтобы облегчить реализацию позиционно-независимого кода , используемого в общих библиотеках в некоторых операционных системах.
Регистры SIMD XMM0–XMM15 (XMM0–XMM31 при поддержке AVX-512 ).
Регистры SIMD YMM0–YMM15 (YMM0–YMM31 при поддержке AVX-512 ). Нижняя половина каждого регистра YMM отображается на соответствующий регистр XMM.
Регистры SIMD ZMM0–ZMM31. Нижняя половина каждого регистра ZMM отображается на соответствующий регистр YMM.
Процессоры 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-битных регистров маски K0–K7 для выбора элементов в векторном регистре. В зависимости от векторного регистра и ширины элементов, только подмножество бит регистра маски может использоваться данной инструкцией.
Хотя основные регистры (за исключением указателя инструкций) являются «универсальными» в 32- и 64-битных версиях набора инструкций и могут использоваться для чего угодно, изначально предполагалось, что они будут использоваться для следующих целей:
Регистры сегмента:
Для остальных 8 регистров, доступных только в 64-битном режиме, никаких особых целей не предусмотрено.
Некоторые инструкции компилируются и выполняются более эффективно при использовании этих регистров по их прямому назначению. Например, использование AL в качестве аккумулятора и добавление к нему непосредственного байтового значения создает эффективный код операции добавления к AL 04h, в то время как использование регистра BL создает общий и более длинный код операции добавления к регистру 80C3h. Другим примером является деление и умножение двойной точности, которые работают специально с регистрами AX и DX.
Современные компиляторы выиграли от введения байта sib ( scale-index-base byte ), который позволяет обрабатывать регистры единообразно ( как в миникомпьютере ). Однако использование байта sib повсеместно неоптимально, так как это приводит к более длинным кодировкам, чем его выборочное использование при необходимости. (Главное преимущество байта sib — ортогональность и более мощные режимы адресации, которые он предоставляет, что позволяет экономить инструкции и использовать регистры для вычислений адреса, таких как масштабирование индекса.) Некоторые специальные инструкции утратили приоритет в аппаратной конструкции и стали медленнее, чем эквивалентные небольшие кодовые последовательности. Ярким примером является инструкция LODSW.
Примечание: регистры ?PL доступны только в 64-битном режиме.
Примечание: регистры ?IL доступны только в 64-битном режиме.
Режим реального адреса [36] , обычно называемый реальным режимом, является рабочим режимом 8086 и более поздних x86-совместимых процессоров . Реальный режим характеризуется 20-битным сегментированным адресным пространством памяти (что означает, что может быть адресовано лишь немного больше 1 МБ памяти [p] ), прямым программным доступом к периферийному оборудованию и отсутствием концепции защиты памяти или многозадачности на аппаратном уровне. Все x86-процессоры в серии 80286 и более поздних запускаются в реальном режиме при включении питания; процессоры 80186 и более ранние имели только один рабочий режим, который эквивалентен реальному режиму в более поздних чипах. (На платформе IBM PC прямой программный доступ к процедурам IBM BIOS доступен только в реальном режиме, поскольку BIOS написан для реального режима. Однако это свойство не x86-процессора, а конструкции IBM BIOS.)
Чтобы использовать более 64 КБ памяти, необходимо использовать сегментные регистры. Это создало большие сложности для разработчиков компиляторов, которые ввели нечетные режимы указателей, такие как «near», «far» и «huge», чтобы в разной степени использовать неявную природу сегментированной архитектуры, при этом некоторые указатели содержали 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. [37]
Каждый раз, когда сегментный регистр загружается в защищенном режиме, 80286 должен считывать 6-байтовый дескриптор сегмента из памяти в набор скрытых внутренних регистров. Таким образом, загрузка сегментных регистров в защищенном режиме происходит намного медленнее, чем в реальном режиме, и следует избегать слишком частой смены сегментов. Фактические операции с памятью, использующие сегменты защищенного режима, не сильно замедляются, поскольку 80286 и более поздние версии имеют аппаратное обеспечение для проверки смещения относительно предела сегмента параллельно с выполнением инструкции.
Intel 80386 расширил смещения, а также поле ограничения сегмента в каждом дескрипторе сегмента до 32 бит, что позволило сегменту охватывать все пространство памяти. Он также ввел поддержку защищенного режима для страничного обмена , механизма, позволяющего использовать страничную виртуальную память (с размером страницы 4 КБ). Страничное управление позволяет ЦП отображать любую страницу пространства виртуальной памяти на любую страницу пространства физической памяти. Для этого он использует дополнительные таблицы отображения в памяти, называемые таблицами страниц. Защищенный режим на 80386 может работать как с включенным, так и с отключенным страничным обменом; механизм сегментации всегда активен и генерирует виртуальные адреса, которые затем отображаются страничным механизмом, если он включен. Механизм сегментации также можно эффективно отключить, установив для всех сегментов базовый адрес 0 и ограничение размера, равное всему адресному пространству; для этого также требуется таблица дескрипторов сегментов минимального размера, состоящая всего из четырех дескрипторов (поскольку сегменты FS и GS не нужно использовать). [q]
Подкачка страниц широко используется современными многозадачными операционными системами. Linux , 386BSD и Windows NT были разработаны для 386, поскольку это был первый процессор архитектуры Intel, поддерживающий подкачку страниц и 32-битные смещения сегментов. Архитектура 386 стала основой для всех дальнейших разработок в серии x86.
Процессоры x86, поддерживающие защищенный режим, загружаются в реальном режиме для обратной совместимости со старым классом процессоров 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 [38], но решила не включать ее в надежде, что AMD не выведет AMD64 на рынок до того, как новый набор инструкций IA-64 от Itanium получит широкое распространение. Она обозначила свою реализацию 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 ( Numeric Processor eXtension ), подходящее название, поскольку сопроцессоры, хотя и использовались в основном для вычислений с плавающей точкой, также выполняли целочисленные операции как в двоичном, так и в десятичном формате. За очень немногими исключениями, 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 CPU без расширений до 64 бит, и повторяющиеся целочисленные вычисления даже с небольшими значениями (например, 16 бит) могут быть ускорены путем параллельного выполнения целочисленных инструкций на x86 CPU и x87. (x86 CPU продолжает работать, пока сопроцессор x87 вычисляет, и x87 устанавливает сигнал для x86, когда он завершает работу, или прерывает x86, если ему требуется внимание из-за ошибки.)
MMX — это набор инструкций SIMD , разработанный Intel и представленный в 1997 году для микропроцессора Pentium MMX . [39] Набор инструкций MMX был разработан на основе аналогичной концепции, впервые использованной в Intel i860 . Он поддерживается большинством последующих процессоров IA-32 Intel и другими поставщиками. MMX обычно используется для обработки видео (например, в мультимедийных приложениях). [40]
MMX добавил 8 новых регистров в архитектуру, известных как MM0 через MM7 (далее именуемых MMn ). На самом деле, эти новые регистры были просто псевдонимами для существующих регистров стека x87 FPU. Следовательно, все, что было сделано со стеком с плавающей точкой, также повлияло бы на регистры MMX. В отличие от стека FP, эти регистры MMn были фиксированными, а не относительными, и поэтому они были доступны случайным образом. Набор инструкций не принял стекоподобную семантику, так что существующие операционные системы могли по-прежнему правильно сохранять и восстанавливать состояние регистра при многозадачности без модификаций. [39]
Каждый из регистров MMn представляет собой 64-битное целое число. Однако одной из основных концепций набора инструкций MMX является концепция упакованных типов данных , что означает, что вместо использования всего регистра для одного 64-битного целого числа ( quadword ), можно использовать его для хранения двух 32-битных целых чисел ( doubleword ), четырех 16-битных целых чисел ( word ) или восьми 8-битных целых чисел ( byte ). Учитывая, что 64-битные регистры MMn MMX являются псевдонимами стека FPU, а каждый из регистров с плавающей точкой имеет ширину 80 бит, верхние 16 бит регистров с плавающей точкой не используются в MMX. Эти биты устанавливаются в единицы любой инструкцией MMX, что соответствует представлению с плавающей точкой NaN или бесконечностей. [39]
В 1997 году AMD представила 3DNow!. [41] Внедрение этой технологии совпало с ростом популярности 3D- развлекательных приложений и было разработано для повышения производительности векторной обработки ЦП в графически насыщенных приложениях. Разработчики 3D-видеоигр и поставщики 3D-графического оборудования используют 3DNow! для повышения производительности на процессорах AMD серий K6 и Athlon . [42]
3DNow! был разработан как естественная эволюция MMX от целых чисел к числам с плавающей точкой. Таким образом, он использует точно такое же соглашение об именовании регистров, как и MMX, то есть от MM0 до MM7. [43] Единственное отличие заключается в том, что вместо упаковки целых чисел в эти регистры, в каждый регистр упакованы два числа с плавающей точкой одинарной точности . Преимущество псевдонимизации регистров FPU заключается в том, что те же инструкции и структуры данных, которые используются для сохранения состояния регистров FPU, могут также использоваться для сохранения состояний регистров 3DNow!. Таким образом, не требуется вносить никаких специальных изменений в операционные системы, которые в противном случае не знали бы о них. [44]
В 1999 году Intel представила набор инструкций Streaming SIMD Extensions (SSE) , за которым в 2000 году последовал SSE2. Первое дополнение позволило выгрузить основные операции с плавающей точкой из стека x87, а второе сделало MMX практически устаревшим и позволило реалистично нацеливать инструкции на обычные компиляторы. Представленный в 2004 году вместе с ревизией Prescott процессора Pentium 4 , SSE3 добавил специальные инструкции по обработке памяти и потоков для повышения производительности технологии HyperThreading от Intel . AMD лицензировала набор инструкций SSE3 и реализовала большинство инструкций SSE3 для своей ревизии E и более поздних процессоров Athlon 64. Athlon 64 не поддерживает HyperThreading и не имеет тех инструкций SSE3, которые используются только для HyperThreading. [45]
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 не вводит никаких дополнительных регистров. [45]
Расширенные векторные расширения (AVX) удвоили размер регистров SSE до 256-битных регистров YMM. Также была введена схема кодирования VEX для размещения больших регистров, а также несколько инструкций для перестановки элементов. AVX2 не вводил дополнительных регистров, но был примечателен добавлением инструкций маскирования, сбора и перемешивания.
AVX-512 представляет собой еще одно расширение до 32 512-битных регистров ZMM и новую схему EVEX. В отличие от своих предшественников, имеющих монолитное расширение, он разделен на множество подмножеств, которые могут быть выбраны для реализации определенными моделями ЦП.
Physical Address Extension или PAE впервые был добавлен в Intel Pentium Pro , а затем AMD в процессорах Athlon [46] , чтобы разрешить адресацию до 64 ГБ ОЗУ. Без PAE физическая ОЗУ в 32-разрядном защищенном режиме обычно ограничена 4 ГБ . PAE определяет другую структуру таблицы страниц с более широкими записями таблицы страниц и третьим уровнем таблицы страниц, что позволяет использовать дополнительные биты физического адреса. Хотя первоначальные реализации на 32-разрядных процессорах теоретически поддерживали до 64 ГБ ОЗУ, ограничения чипсета и других платформ часто ограничивали то, что можно было фактически использовать. Процессоры x86-64 определяют структуры таблиц страниц, которые теоретически допускают до 52 бит физического адреса, хотя, опять же, проблемы чипсета и других платформ (например, количество доступных слотов DIMM и максимально возможный объем ОЗУ на DIMM) не позволяют реализовать такое большое физическое адресное пространство. На процессорах x86-64 режим PAE должен быть активен до переключения в длинный режим и должен оставаться активным, пока активен длинный режим , поэтому в длинном режиме нет режима «не-PAE». Режим PAE не влияет на ширину линейных или виртуальных адресов.
К 2000-м годам ограничения 32-разрядных процессоров x86 в адресации памяти стали препятствием для их использования в высокопроизводительных вычислительных кластерах и мощных настольных рабочих станциях. Устаревший 32-разрядный x86 конкурировал с гораздо более продвинутыми 64-разрядными архитектурами RISC, которые могли адресовать гораздо больше памяти. Intel и всей экосистеме x86 требовалась 64-разрядная адресация памяти, если x86 должен был пережить эру 64-разрядных вычислений, поскольку вскоре рабочие станции и настольные программные приложения начали упираться в пределы 32-разрядной адресации памяти. Однако Intel посчитала, что настало время сделать смелый шаг и использовать переход на 64-разрядные настольные компьютеры для перехода от архитектуры x86 в целом, эксперимент, который в конечном итоге провалился.
В 2001 году Intel попыталась представить не-x86 64-битную архитектуру под названием IA-64 в своем процессоре Itanium , изначально нацеленную на рынок высокопроизводительных вычислений , надеясь, что она в конечном итоге заменит 32-битную x86. [47] Хотя 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 в защищенных или других режимах, без малейшего ущерба производительности [48] и с полной совместимостью с исходными инструкциями 16-битного Intel 8086. [49] : 13–14 Рынок отреагировал положительно, приняв 64-битные процессоры AMD как для высокопроизводительных приложений, так и для деловых или домашних компьютеров.
Видя, что рынок отвергает несовместимый процессор Itanium, а Microsoft поддерживает AMD64, Intel пришлось отреагировать и в июле 2004 года представить свой собственный процессор x86-64, Prescott Pentium 4. [50] В результате процессор 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 ), и даже доминируют в крупных суперкомпьютерных кластерах , фактически оставляя только ARM 32-разрядную и 64-разрядную RISC-архитектуру в качестве конкурента на рынке смартфонов и планшетов .
До 2005 года процессоры архитектуры x86 не могли соответствовать требованиям Попека и Голдберга — спецификации для виртуализации, созданной в 1974 году Джеральдом Дж. Попеком и Робертом П. Голдбергом . Однако как проприетарные, так и продукты с открытым исходным кодом для виртуализации x86 были разработаны с использованием программной виртуализации . К проприетарным системам относятся Hyper-V , Parallels Workstation , VMware ESX , VMware Workstation , VMware Workstation Player и Windows Virtual PC , в то время как к бесплатным и открытым исходным кодам относятся QEMU , Kernel-based Virtual Machine , VirtualBox и Xen .
Появление наборов инструкций AMD-V и Intel VT-x в 2005 году позволило процессорам x86 соответствовать требованиям виртуализации Попека и Голдберга. [51]
APX (Advanced Performance Extensions) — это расширения, позволяющие удвоить количество регистров общего назначения с 16 до 32 и добавить новые функции для улучшения производительности общего назначения. [52] [53] [54] [55] Эти расширения были названы «поколенческими» [56] и «крупнейшим дополнением x86 со времен 64 бит». [57] Intel внесла поддержку APX в GNU Compiler Collection (GCC) 14. [58]
Согласно спецификации архитектуры [59] , основными особенностями APX являются:
Расширенные GPR для инструкций общего назначения кодируются с использованием 2-байтового префикса REX2 , в то время как новые инструкции и расширенные операнды для существующих инструкций AVX / AVX2 / AVX-512 кодируются с использованием расширенного префикса EVEX , который имеет четыре варианта, используемых для различных групп инструкций.
Несмотря на доминирование x86 в центрах обработки данных, трудно игнорировать шум, который поставщики создавали в течение последних нескольких лет вокруг архитектур, отличных от x86, таких как ARM...
«Раз за разом архитекторы процессоров смотрели на неэлегантную архитектуру x86 и заявляли, что ее невозможно расширить для соответствия последним инновациям», — сказал Натан Бруквуд, главный аналитик Insight 64.
может выполнять слияние макроопераций только в 16- и 32-битном режиме. Core Nehalem также может делать это в 64-битном режиме.
Форма FNSTSW AX инструкции используется в основном в условном переходе...
2-битный индекс, состоящий из битов PCD и PWT записи таблицы страниц, используется для выбора одного из четырех полей регистра PAT, когда включено PAE (расширения адреса страницы) или когда PDE не описывает большую страницу.
-то Intel рекламировала Itanium как замену линейки продуктов x86, но теперь ожидания относительно него значительно снизились.
5, 6 и 7 также показывают, что 32-разрядная версия WAS запускает приложения с полной собственной производительностью оборудования на платформах POWER и x86-64. В отличие от некоторых 64-разрядных архитектур процессоров, оборудование POWER и x86-64 не эмулирует 32-разрядный режим. Поэтому приложения, которые не получают выгоды от 64-разрядных функций, могут работать с полной производительностью на 32-разрядной версии WebSphere, работающей на вышеупомянутых 64-разрядных платформах.