Альтернативный набор команд (AIS) - это вторая 32-битная архитектура набора команд, встречающаяся в некоторых процессорах x86 производства VIA Technologies. На этих процессорах VIA C3 доступ ко второму скрытому режиму процессора осуществляется путем выполнения инструкции x86 ALTINST
(0F 3F
). Если режим AIS был включен, процессор выполнит JMP EAX и начнет выполнение инструкций AIS по адресу регистра EAX. Использование AIS обеспечивает собственный доступ к ядру Centaur Technology RISC внутри процессора.
номер AIS | имя x86 |
---|---|
R0 | EAX |
R1 | ECX |
R2 | EDX |
R3 | EBX |
R4 | ESP |
R5 | EBP |
R6 | ESI |
R7 | EDI |
R8 ‒ R15 | … |
Производитель описывает альтернативный набор команд как «расширенный набор целых чисел, MMX, с плавающей точкой и 3DNow! вместе с дополнительными регистрами и некоторыми более мощными формами команд ". Каждая инструкция AIS имеет префикс из 3-х байтовой последовательности 0x8D8400
, за которой следует 32-битная инструкция; эта форма префикса для инструкций AIS делает их похожими на инструкции x86 Загрузить эффективный адрес (LEA
). В 2018 году исследователь Кристопер Домас сообщил, что префикс 0x620405
(x86 BOUND
) также работал.
Предложение, сделанное в 2002 году о добавлении поддержки AIS в Netwide Assembler (NASM), было частично отклонено в 2005 году на том основании, что NASM был ассемблером x86, а AIS - отдельной инструкцией. задавать. Ассемблер доступен из исследования Domas 2018.
В 2007 году в патенте некоторые инструкции микрокода были названы load
и store
в / из основной RAM и loadPRAM
и хранят PRAM
в / из частной RAM внутри процессора. Группа проверки Centaur Technologies в статье 2014 года о VIA Nano включила несколько коротких списков микроинструкций, включая ADDIG
, JLINK
, JMP_ALL
, MVIG
, NLOOPE
, STORE_PRAM
, а также микрооперации XADD
и XSUB
. Было показано, что микрооперации имеют формат, который включает поля opcode
, exec unit
, src width
, src1
, . src2
, ширина адресата
, адресат
, флаги записи?
и конец подпрограммы?
.
Из x86 В этом режиме доступность альтернативного набора команд можно определить, выполнив CPUID с регистром EAX, установленным на 0xc0000001
, а затем проверив регистр EDX. Если бит 0 EDX установлен в 1, то поддерживается AIS. Если бит 1 EDX также установлен в 1, то AIS включен. Если ЦП поддерживает AIS, то его состояние можно проверить и изменить с помощью регистров, зависящих от модели, путем проверки и настройки регистра управления функциями (FCR, регистр 0x1107). Если бит 0 («ALTINST
») установлен в 1, то AIS включен.
Ядро Microsoft Windows NT KiGetFeatureBits ()
функция инициализации заранее отключает альтернативную инструкцию режим при загрузке. Если команда перехода x86 ALTINST
выполняется, когда режим AIS отключен, процессор сгенерирует исключительную ситуацию с недопустимой инструкцией. Для установки бита с включенным AIS требуется привилегированный доступ, и его следует устанавливать с помощью последовательности read-modify-write.
В 2018 году Кристофер Домас обнаружил, что некоторые Процессоры Samuel 2 поставлялись с включенным по умолчанию альтернативным набором инструкций, и что, выполняя инструкции AIS из пользовательского пространства, можно было получить повышение привилегий с кольца 3 до кольца 0. У Домаса было частично реконструировал набор команд AIS с использованием автоматического фаззинга для кластера из семи тонких клиентов. Домас использовал термины «глубоко встроенное ядро» (DEC) плюс «глубоко встроенный набор инструкций» (DEIS) для набора инструкций RISC, «инструкция запуска» для ALTINST
, «инструкция моста» для оболочки префикса x86., «регистр глобальной конфигурации» для Регистра управления функциями (FCR) и задокументировал повышение привилегий с именем «Rosenbridge ".