Какую модификацию имеет процессор 80186

Обновлено: 21.11.2024

Получите полный доступ к PC Hardware in a Nutshell, 3rd Edition и более чем 60 000 другим играм с бесплатной 10-дневной пробной версией O'Reilly.

Есть также прямые онлайн-мероприятия, интерактивный контент, материалы для подготовки к сертификации и многое другое.

Почти все современные ПК используют либо процессор Intel, либо совместимый с Intel процессор AMD Athlon. Доминирование Intel в процессорах и Microsoft в операционных системах привело к появлению гибридного термина Wintel, который относится к системам, работающим под управлением Windows на процессорах Intel или совместимых. Процессоры Intel обычно обозначаются как процессоры x86 в соответствии с ранним соглашением об именовании процессоров Intel: 8086, 80186, 80286 и т. д. Intel выпустила семь поколений процессоров, первые пять из которых устарели, а шестое устарел. Они следующие:

В 1982 году Intel представила долгожданное продолжение процессоров первого поколения. 80286, основанный на ядре iAPX-32, обеспечил квантовый скачок в производительности процессора, выполняя инструкции в пять раз быстрее, чем процессор 808x, работающий на той же тактовой частоте. 80286 обрабатывал инструкции так же быстро, как многие процессоры мейнфреймов того времени. 80286 также увеличил адресуемую память с 1 МБ до 16 МБ и представил операции защищенного режима. IBM PC/AT был первой коммерческой реализацией 80286. Дополнительный чип FPU 80287 добавил ускорение операций с плавающей запятой в системы 80286. Хотя 80286 давно устарел как ЦП общего назначения, он все еще используется во встроенных контроллерах.

Следующее поколение Intel дебютировало в 1985 году как 80386, позже сокращенное до 386. 386 был первым 32-разрядным процессором Intel, который взаимодействовал внутри и снаружи с помощью 32-разрядной шины данных и 32-разрядной адресной шины. Модель 386 была доступна в версиях на 16, 20, 25 и 33 МГц. Хотя тактовые частоты 386 были лишь немного выше, чем у 80286, улучшенная архитектура привела к значительному увеличению производительности. Дополнительный FPU 80387 добавил ускорение операций с плавающей запятой в системы 386. Позже Intel переименовала 386 в 386DX и выпустила более дешевую версию под названием 386SX, которая использовала 32 бита внутри, но только 16 бит снаружи. 386SX был известен как первый процессор Intel с внутренней кэш-памятью (L1), хотя она была всего 8 КБ и относительно неэффективна. 386 давно устарел как ЦП общего назначения, но он по-прежнему широко используется во встроенных контроллерах.

Следующее поколение Intel дебютировало в 1989 году как 486 (80486 никогда не было). 486 был полноценным 32-битным ЦП с 8 КБ кэш-памяти L1, включал встроенный FPU и был доступен с частотой от 20 до 50 МГц. Intel выпустила версии 486DX и 486SX. 486SX на самом деле был 486DX с отключенным FPU. Intel также продавала 487SX, который на самом деле был полноценным 486DX. Установка 487SX в сокет сопроцессора просто отключила существующий 486SX. 486DX/2, представленный в 1992 году, был первым процессором Intel, который работал со скоростью, кратной частоте шины памяти. Тактовая частота 486DX/2 работала с удвоенной частотой шины и была доступна в версиях 25/50, 33/66 и 40/80 МГц. 486DX / 4, представленный в 1994 году, работал (несмотря на свое название) с утроенной скоростью шины, удвоил кэш-память L1 до 16 КБ и был доступен в версиях 25/75, 33/100 и 40/120. 486 устарел как ЦП общего назначения, хотя он по-прежнему популярен во встраиваемых приложениях.

ЦП Intel Pentium относится к пятому поколению. Он обеспечивает гораздо лучшую производительность, чем его предки 486, за счет включения нескольких архитектурных улучшений, в первую очередь увеличения ширины шины данных с 32 до 64 бит и увеличения скорости шины памяти ЦП с 33 МГц до 60 и 66 МГц. На самом деле Intel поставляла несколько разных версий Pentium, в том числе:

Pentium P54 — исходный Pentium, выпущенный в 1993 году в версиях с тактовой частотой 50, 60 и 66 МГц, с множителем ЦП 1X, работал (в горячем состоянии) при напряжении 5,0 В, содержал двойной 8 КБ + 8 КБ Кэш L1 и подходит для материнских плат Socket 4.

Pentium P54C — «классический Pentium», впервые выпущенный в 1994 г., имел частоту от 75 до 200 МГц, множитель ЦП от 1,5 до 3,0, использовал 3,3 В и содержал такой же двойной L1. кэш как у P54. ЦП P54C подходят к материнским платам с разъемом Socket 5 и большинству материнских плат с разъемом Socket 7.

Pentium P55C — процессор Pentium/MMX, выпущенный в 1997 г., имел частоту от 166 до 233 МГц, множитель ЦП от 2,5 до 3,5, потреблял 3,3 В и содержал два Кэш L1 16 КБ, вдвое больше, чем у более ранних Pentium. Другим важным изменением по сравнению с P54C было добавление набора инструкций MMX, набора дополнительных инструкций, которые значительно повысили скорость обработки графики. Процессоры P55C подходят для материнских плат с разъемом Socket 7 и по состоянию на июль 2003 г. все еще находятся в ограниченном количестве.

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

Это поколение началось с выпуска Pentium Pro в 1995 году и включает в себя процессоры Pentium II, Celeron и Pentium III. К началу 2002 года процессоры Intel последнего шестого поколения для настольных ПК были отнесены к системам начального уровня, а к середине 2002 года они были сняты с производства как основные продукты. К концу 2002 года в качестве представителей этого поколения остались только процессоры Celeron с ядром Tualatin. Хотя во многих системах шестого поколения по-прежнему технически возможно обновить процессор, с практической точки зрения обычно имеет смысл заменить системную плату и процессор продуктами седьмого поколения.

Это текущее поколение процессоров Intel, в которое входят флагманский процессор Intel Pentium 4, а также различные процессоры Celeron на базе архитектуры Pentium 4.

В настоящее время Intel производит несколько процессоров шестого поколения, включая многочисленные варианты и производные процессоров Celeron и Pentium III, а также два процессора седьмого поколения — Pentium 4 и Celeron. В следующих разделах описываются текущие и последние процессоры Intel.

Познакомьтесь с Кратко об оборудовании для ПК, 3-е издание прямо сейчас с онлайн-обучением O’Reilly.

Члены O’Reilly проходят онлайн-обучение в режиме реального времени, а также получают книги, видео и цифровой контент от более чем 200 издателей.

Этот эмулятор называется Intel® Software Development Emulator или сокращенно Intel® SDE.

Текущая версия — 9.0, выпущенная 07 ноября 2021 г. Эта версия соответствует версии 319433-044 справочника по программированию расширений набора инструкций архитектуры Intel® и спецификации архитектуры Intel® AVX512-FP16, доступной в архитектуре набора инструкций Intel. страница. Примечания к выпуску Intel® SDE находятся здесь. В этом крупном обновлении добавлена ​​возможность написания бинарных инструментальных инструментов для выводов с помощью служб Intel® SDE.

Intel® SDE продолжает поддерживать функции предыдущих выпусков:

  • Поддержка эмуляции дополнительных инструкций Intel® Advanced Vector Extensions 512 (Intel® AVX-512), присутствующих в некоторых будущих процессорах Intel®.
  • Поддержка эмуляции расширений Intel® Advanced Matrix Extensions (Intel® AMX), которые будут доступны в некоторых будущих процессорах Intel®.
  • Инструкции Intel® Advanced Vector Extensions 512 (Intel® AVX-512) присутствуют на процессорах Intel®.
  • Intel® Streaming SIMD Extensions 4 (Intel® SSE 4), AES и PCLMULQDQ и Intel® Advanced Vector Extensions (Intel® AVX)
  • Инструкции Intel® AVX2, RTM, BMI1 и BMI2, представленные в семействе процессоров Intel® Core™ 4-го поколения, ранее известном как микроархитектура Haswell.
  • Инструкции ADOX/ADCX представлены в семействе процессоров Intel® Core™ 5-го поколения, ранее известном как микроархитектура Broadwell.
  • Поддержка расширений алгоритма Intel® Secure Hash Algorithm (Intel® SHA), присутствующих в процессорах Intel® Atom™, ранее известных как микроархитектура Goldmont.
  • Поддержка векторных инструкций для глубокого обучения, присутствующих в процессорах Intel®.

Сопутствующие полезные материалы:

  • Дополнительная информация о расширении Intel® SHA доступна здесь и включает пример тестового приложения.

Intel выпускает этот Intel® SDE, чтобы разработчики могли ознакомиться с нашими будущими расширениями набора инструкций. Intel® SDE может помочь гарантировать, что программное обеспечение готово использовать возможности, открываемые этими новыми инструкциями в наших процессорах. Мы надеемся, что разработчики изучат новые инструкции, используя доступные в настоящее время компиляторы и ассемблеры.

Intel SDE построен на основе динамической двоичной измерительной системы Pin и кодировщика-декодера XED. PIN-код управляет выполнением приложения. Pin проверяет каждую статическую инструкцию в приложении примерно один раз, так как строит трассировку для выполнения. Во время этого процесса, который называется инструментированием, для каждой встречаемой инструкции Pin запрашивает Intel® SDE, следует ли эмулировать эту инструкцию или нет. Если инструкция должна быть эмулирована, то Intel® SDE указывает Pin пропустить эту инструкцию и вместо этого перейти к соответствующей процедуре эмуляции. Он также сообщает Pin, как вызывать эту функцию эмуляции, какие аргументы передавать и т. д.

Intel SDE запрашивает CPUID, чтобы выяснить, какие функции следует эмулировать. Он также изменяет вывод CPUID таким образом, что скомпилированные приложения, проверяющие эмулируемые функции, получают информацию о том, что эти функции существуют.

Intel® SDE поставляется с несколькими полезными инструментами Pin с поддержкой эмулятора и дизассемблером XED:

  • Базовый эмулятор
  • Инструмент составления смешанных гистограмм. Этот инструмент Pin может вычислять гистограммы по любому из следующих параметров: выполненные динамические инструкции, длина инструкции, категория инструкции и группировка расширений ISA. Этот инструмент также может отображать первые N наиболее часто выполняемых базовых блоков и разбирать их.
  • Инструмент трассировки debugtrace ASCII. Этот универсальный инструмент удобен для наблюдения за динамическим поведением вашего кода. Он печатает выполненные инструкции, а также записанные регистры, прочитанную и записанную память и т. д.
  • Инструмент посадочного места. Этот простой инструмент подсчитывает количество уникальных 64-байтовых фрагментов данных, на которые ссылались во время выполнения программы.
  • Инструмент командной строки XED, который может дизассемблировать двоичные исполняемые файлы PECOFF или ELF.

Установка

Загрузите и распакуйте соответствующий комплект для вашей платформы. Установите переменную PATH так, чтобы она указывала на этот каталог. Вы также можете ссылаться на инструменты в наборе, используя полные или относительные пути. Не меняйте порядок файлов или подкаталогов в распакованном комплекте. Если вы хотите переместить каталог набора, переместите все.

Windows*: Если вы используете Winzip, он устанавливает соответствующие разрешения для распакованных файлов. Однако, если вы используете команду Cygwin tar для распаковки комплекта Windows*, вы должны выполнить «chmod -R +x путь к комплекту» для распакованного комплекта (где «путь к комплекту» — это каталог распакованного комплекта). имя).

Linux*: в некоторых дистрибутивах необходимо отключить "SE Linux", чтобы Intel® SDE работал. В системах Ubuntu необходимо отключить яму, как описано ниже.

Mac*: Intel SDE использует API порта задач MACH. По умолчанию при попытке использовать эти API аутентификация пользователя требуется один раз за сеанс графического интерфейса. Чтобы разрешить запуск PIN/SDE без этой аутентификации, вам необходимо отключить ее. Это делается путем настройки машины на автоматическое подтверждение передачи процесса, как описано ниже.

Запуск Intel® SDE

Это шаблон для запуска SDE:

Двойной тире ("--") важен. Варианты SDE идут перед двойным тире. Квадратные скобки обозначают необязательные аргументы.

Важными параметрами являются короткие и длинные справочные сообщения. Чтобы увидеть короткое справочное сообщение:

И увидеть очень длинное сообщение справки:

В справочных сообщениях параметры командной строки часто отображаются с использованием знаков подчеркивания между словами, но вместо них могут использоваться тире. Часто в справочных сообщениях Intel® SDE и на этой веб-странице параметры командной строки называются «ручками» по историческим причинам. Короткое справочное сообщение содержит некоторые ручки инструментов анализа верхнего уровня, а также список поддерживаемых процессоров.

Имитировать режим «Все»

  • Windows*: в Windows* предоставляется файл с именем sde-win.bat, который запускает окно cmd.exe под управлением Intel® SDE. Вы можете сделать ярлык для него и поместить этот ярлык на рабочий стол. Все, что запускается из этого окна, будет выполняться под управлением Intel® SDE, поэтому вы можете столкнуться с замедлением работы, даже если вы ничего не эмулируете. Все, что он на самом деле делает, это:
  • OS X* или Linux*: вы можете запустить свою любимую оболочку под управлением Intel® SDE:

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

Запуск инструмента гистограммы

Для создания гистограмм набора инструкций по коду операции (XED iclass, по умолчанию) или форме инструкции (iform). Начиная с версии 4.29 всегда включаются гистограммы длины инструкции и категории инструкции.

Примечания:

  • Гистограмма расширения ISA также всегда рассчитывается и печатается в виде строк со звездочкой на гистограммах. Расширения ISA — это такие вещи, как (BASE, X87, MMX, SSE, SSE2, SSE3 и т. д.). Это полезно, чтобы увидеть, какие расширения набора инструкций используются в вашем приложении.
  • Динамическая статистика записывается и передается несколькими способами: (1) для каждого потока, (2) для каждой функции для каждого потока и (3) суммируется для всего выполнения. Количество инструкций по функциям также выдается, если для приложения найдены символы.
  • Вывод записывается в файл sde-mix-out.txt в текущем каталоге. Имя выходного файла можно изменить с помощью параметра -omix:
  • Первые 20 базовых блоков всегда печатаются в выходных данных с их весами выполнения.
  • "-top_blocks N" позволит вам изменить 20 на N, которое вы укажете.
  • Iforms: «Iform» — это термин XED для вариантов инструкций. В простом мире это были бы такие вещи, как reg/reg или reg/mem, но в целом все сложнее. Имена iform взяты из XED. Считайте их экспериментальными и могут быть изменены. Чтобы просмотреть гистограммы по более подробным iform, используйте параметр командной строки "-iform".
  • Существует множество параметров командной строки для инструмента микширования:

Вывод: в sde-mix-out.txt (имя файла по умолчанию)

Смешанный учет

Строки в выходных гистограммах микса бывают двух видов. Строки, начинающиеся с «*», являются метакатегориями, которые суммируют данные по-разному. Ниже приведены описания некоторых метакатегорий:

Проверка неверных указателей и несоответствия данных

Две наиболее распространенные ошибки при запуске нового кода: (а) разыменование неверных указателей, нулевых указателей или указателей на недоступную память, и (б) неверный доступ к данным. В Intel® SDE есть функции, помогающие идентифицировать такие ситуации в программах.

Проверка выравнивания может предоставить профили выравнивания данных в программе, а также когда и где доступ к данным нарушается.

Запуск инструмента отслеживания ASCII

По умолчанию выходные данные записываются в файл sde-debugtrace-out.txt в текущем каталоге. Есть много вариантов. Запустите инструмент «sde -debugtrace -thelp» для закрепления, чтобы увидеть варианты. Он печатает регистры и флаги, измененные каждой инструкцией. Он также печатает прочитанные/записанные значения памяти.

Использование функции проверки микросхем

Чтобы узнать больше о механизме проверки микросхем, параметрах управления и поддерживаемых микросхемах, а также просмотреть несколько примеров использования, перейдите к разделу Использование функции проверки микросхем Intel® Software Development Emulator.

Использование расширений Intel® Transactional Synchronization Extensions (Intel® TSX)

Intel® TSX поддерживает эмуляцию технологии Restricted Transactional Memory (RTM), начиная с версии 6.1.

Параметры RTM следующие. Вы можете увидеть это в длинном выводе справки, выдаваемом при запуске "sde -long-help".

(Как и во всех ручках SDE, вы можете использовать тире вместо подчеркивания.)

Для RTM существует 4 различных режима: rtm, отключено, прерывание, полное и нет. Отключено по умолчанию, потому что эмуляция RTM в программном обеспечении очень медленная. Режимы прерывания всегда прерываются при выполнении xbegin. Full — это режим с поддержкой RTM. И NOP обрабатывает инструкции RTM как NOP. Дополнительные сведения об использовании RTM см. в этой записи блога.

Intel SDE предоставляет статистику использования RTM во время выполнения вашей программы:

Вот несколько простых примеров работы с Intel® TSX:

А вот более полный пример запуска RTM в Windows*

Запуск дизассемблера XED

Приведенная выше команда записывает файл dis.txt.
См. справочное сообщение (-help) для многих параметров.

XED печатает расширение ISA для каждой инструкции. Это полезно для поиска новых инструкций в вашем коде. Пример вывода:

Отладка эмулируемого кода

Intel SDE обеспечивает поддержку отладки приложений с эмулируемым кодом. Описание использования системного отладчика доступно здесь.

Проверка перехода Intel AVX и Intel SSE

Рекомендуется вставлять VZEROALL или VZEROUPPER между кодом, использующим Intel SSE, и кодом, использующим 256-битные инструкции Intel AVX. Intel SDE может проверять инструкции Intel SSE, за которыми следуют инструкции Intel AVX без промежуточной инструкции обнуления, и наоборот.

Используйте ручку инструмента "-ast" для закрепления

Используйте "-oast filename", чтобы указать имя файла, отличное от "avx-sse-transition.out" . При использовании драйвера "sde" -oast подразумевает -ast.

Вывод: в "avx-sse-transition.out"

​В этом случае расположение счетчиков программ связано с вызовами isnan() в следующем коде:

Использование Intel SDE для записи и воспроизведения программы

Intel SDE теперь включает технологию pinplay для записи и воспроизведения программы.

Информация об этой технологии доступна в статье Pinplay Program Record/Replay Toolkit

Основная команда для создания пинбола (контрольной точки пинплея):

Основная команда для воспроизведения пинбола (захваченного из 64-битного приложения):

Все остальные ручки Intel SDE, такие как -mix, также доступны в режиме воспроизведения.

Использование Intel SDE для эмуляции технологии управления потоком управления

Технология Intel Control-Flow Enforcement (CET) была описана в предварительной версии технологии на странице расширений ISA.

Intel SDE теперь позволяет эмулировать аспекты пользовательского пространства этой технологии и готовность программного обеспечения, скомпилированного с помощью проверок стека CET или непрямых проверок ветвлений CET. Intel® SDE поддерживает запуск приложения на существующих хостах (Linux и Windows) и предоставляет способы уменьшить количество ложных отчетов из-за работы с устаревшими системными библиотеками времени выполнения (которые не были скомпилированы с помощью CET).

Инструкции по запуску приложения в Intel SDE с технологией принудительного управления потоком доступны в статье Эмуляция приложений с помощью Intel SDE и технологии принудительного управления потоком.

Конфигурация системы

Линукс

В системе Ubuntu функция yama запрещает процессам использовать ptrace для подключения к родительскому процессу. Intel SDE использует эту функцию для внедрения в процесс. Чтобы отключить yama в системе, запустите от имени root следующее:

Это изменение вступает в силу до следующей перезагрузки. Чтобы сделать это изменение постоянным, добавьте его в сценарии инициализации системы.

Intel SDE использует API-интерфейс taskport для внедрения в процесс приложения (будь то в режиме подключения или в режиме запуска).Это приводит к всплывающему окну, чтобы подтвердить, что ему разрешено взять под контроль другой процесс. Это происходит только при первом использовании Intel® SDE в сеансе графического интерфейса. Однако при работе в сеансах без графического интерфейса (например, в сеансе SSH) всплывающее окно никогда не появится и сразу же завершится ошибкой. Чтобы справиться с этой проблемой, необходимо выполнить однократную настройку на машине, чтобы ОС не пыталась отобразить это всплывающее окно и автоматически подтверждала передачу процесса.

Защита системной интеграции

Защита целостности системы — это технология безопасности в macOS* El Capitan (10.11) и более поздних версиях, которая ограничивает учетную запись пользователя root и ограничивает действия, которые пользователь root может выполнять в защищенных частях операционной системы Mac.
Защита целостности системы включает защиту следующих частей системы:

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

Чтобы отключить/включить SIP, следуйте инструкциям по следующей ссылке (Конец статьи): Как изменить SIP

Пожалуйста, прочтите следующую статью, чтобы узнать больше о политике целостности системы и ее влиянии: Apple* SIP

Пример кода: процедуры шифрования и дешифрования AES-128

В этом примере кода представлен набор процедур C, демонстрирующих процедуры шифрования и дешифрования с использованием AES-128 в режиме ECB. Эти образцы распространяются по лицензии Intel Simplified Software License (версия от августа 2021 г.).

Часто задаваемые вопросы

Как загрузить Intel SDE?

Intel® SDE доступен на странице загрузки.

Как задать вопросы и получить поддержку?

Форум инструкций Intel AVX и ЦП был создан для решения вопросов. Инженеры Intel будут отслеживать и отвечать на вопросы пользователей.

В: Каковы системные требования?

Intel® SDE будет работать на процессорах IA-32 или Intel® 64 под управлением операционных систем Windows, Linux или OS X.

Каковы требования к CPUID?

Pin, поэтому для Intel SDE требуется процессор Pentium 4 или более поздней версии.

Как насчет запуска приложений с архитектурой IA-32 на платформах с процессорами Intel® 64?

Это поддерживается.

Как насчет точной обработки исключений SSE в MXCSR?

Intel SDE пытается точно установить флаги исключений MXCSR, но немаскированные исключения с плавающей запятой не поддерживаются.

Что происходит, когда моя программа разыменовывает недоступную память для эмулируемых инструкций?

Произойдет сбой Intel SDE. Вы можете использовать «sde -ptr-check -- ваше приложение», чтобы получить более подробное сообщение об ошибке. В качестве альтернативы вы можете использовать «sde -trace-execute -- ваше приложение», чтобы получить дамп инструкций, выполненных в вашей задаче, чтобы узнать, какая инструкция была выполнена последней. Затем вы можете использовать «sde -debugtrace -- your app», чтобы найти последнюю запись в регистры, участвующие в вычислении эффективного адреса для этой последней выполненной инструкции.

Обрабатывает ли Intel® SDE пути или символические ссылки cygwin /cygdrive/c?

Нет, поскольку Pin не обрабатывает их, Intel® SDE не может их обрабатывать.

Где я могу узнать больше о пинах?

Pin – инструмент динамического бинарного инструментирования и группа "pinheads" на Groups.io. Примечания к выпуску Pin доступны здесь. В нем содержится дополнительная информация и ограничения по использованию Intel SDE, основанного на Pin.

Где я могу узнать больше о микшировании и отладке?

Основные источники для отладки и микширования доступны в наборах Pin на веб-сайте Pin. Я немного изменил их, чтобы вызвать Intel® SDE и распечатать новые регистры.

Каковы условия лицензирования?

Как заставить Intel SDE работать в Ubuntu 10 или более поздней версии?

Существует известная проблема использования Intel® SDE в системах Linux*, которая не позволяет использовать подключение ptrace через sysctl /proc/sys/kernel/yama/ptrace_scope. В этом случае Pin не может использовать режим внедрения по умолчанию (родительский). Чтобы решить эту проблему, выполните следующую команду echo от имени пользователя root. (SDE не нужно запускать от имени пользователя root.)
$ echo 0 > /proc/sys/kernel/yama/ptrace_scope

Основное контактное лицо по технологиям

Ади Таль. Ади — старший инженер-программист в Intel Software and Services Group. Эди присоединился к Intel в 1996 году. Эди работает над эмуляцией новых инструкций для поддержки компилятора, архитектуры и вспомогательных команд.

Войны алгоритмов CPUID

В сентябре я представил основы определения идентификации конкретных семейств процессоров x86 — 8086/88, 80186/88, 80286, 80386, 80486, Pentium, Pentium Pro и им подобных. При этом я проанализировал алгоритм обнаружения процессоров, распространяемый Intel, отметив, что он не смог обнаружить некоторые семейства процессоров, содержал ошибку, из-за которой он неправильно диагностировал некоторые процессоры, зависел от недокументированного поведения процессора и не гарантировал работу за пределами реального режима.

Несмотря на эти недостатки, алгоритм Intel по-прежнему широко используется, прежде всего потому, что он поддерживается корпорацией Intel и работает большую часть времени. В заключение я упомянул о возможности написания алгоритма, который был бы более надежным, обнаруживал бы больше типов процессоров, не полагался бы на недокументированное поведение процессора и возвращал фактическую информацию о степпинге процессора — даже на процессорах, которые не поддерживают инструкцию CPUID.

Подобно методу Intel, мой метод использует алгоритм для обнаружения различных семейств процессоров, в которых не используется инструкция CPUID. Мой алгоритм выполняет ряд инструкций, которые существуют не во всех семействах процессоров. Алгоритм определяет, поддерживает ли процессор конкретную инструкцию, тем самым определяя семейство процессоров. Например, Intel реализовала как минимум одну новую инструкцию для каждого последующего семейства процессоров. Мой алгоритм обнаруживает различия между процессорами, пытаясь выполнить эти недавно реализованные инструкции. Если инструкция не существует, генерируется исключение недопустимого кода операции. Мой алгоритм перехватывает это исключение и сообщает, что обнаружен неверный код операции. Как только вновь реализованный код операции успешно выполняется, семейство процессоров определяется. Однако это не будет работать на 8086/88, так как этот микропроцессор не использует тип исключения недопустимого кода операции.

"iAPX 286 будет помещать в стек другое значение для PUSH SP, чем iAPX 86/88."

У 8086/88 и 80186/188 была ошибка в микрокоде PUSH SP. 8086 и 80186 сохраняли значение SP в стеке после его уменьшения вместо того, чтобы сначала уменьшать SP и сохранять результирующее значение в стеке. Любая программа, выполняющая PUSH SP и последующую POP SP, не получит одинаковое значение для комбинации PUSH/POP. Поэтому это хорошо задокументированное различие используется для обнаружения различий в этих семействах процессоров. Примеры 1(a) и 1(b) иллюстрируют использование микрокодированного алгоритма PUSH SP.

"Когда запись слова выполняется по смещению FFFFh в сегменте, 8086 запишет один байт по смещению FFFFh, а другой по смещению 0, в то время как процессор семейства 80186 запишет один байт по смещению FFFFh, а другой по смещению 10000h (на один байт дальше конца сегмента)."

Все процессоры от 80286 до 80486 обнаруживаются путем установки обработчика исключения недопустимого кода операции и выполнения инструкций, уникальных для каждого процессора. При выполнении инструкции (без создания исключения) семейство процессоров определено.

Любое семейство процессоров, реализующее инструкцию CPUID, не обязано использовать этот метод. Это будет включать все процессоры класса Pentium, последние модели 486 и некоторые процессоры, несовместимые с Intel x86. После обнаружения процессора класса 386 или 486 мой алгоритм вслепую выполняет инструкцию CPUID. Я не пытаюсь проверить наличие инструкции CPUID, используя подход, рекомендованный Intel (попытка переключить EFLAGS.ID). Я делаю это, потому что

<УЛ>
  • У меня уже установлен обработчик недопустимого кода операции, поэтому выполнение инструкции CPUID не причинит вреда.
  • Nexgen Nx586 реализует инструкцию CPUID, но не бит EFLAGS.ID. В этом случае алгоритм Intel, используемый для обнаружения бита EFLAGS.ID, не будет работать.
  • Cyrix 6x86 реализует как EFLAGS.ID, так и CPUID, но их необходимо активировать путем программирования регистра конфигурации процессора. Для алгоритма идентификации ЦП было бы неуместно делать какие-либо предположения о возможности конфигурирования неизвестного типа процессора и, следовательно, программировать некоторые регистры, характерные для модели.
  • Остальная часть алгоритма зависит от успеха или неудачи инструкции CPUID. Если CPUID существует, он используется для определения того, является ли процессор подлинным процессором Intel. Если это так, алгоритм обнаружения процессора завершен; если нет, результаты модифицируются флажком, указывающим на процессор, отличный от Intel (см. комментарии в файле CPUID.ASM, доступном в электронном виде; см. «Доступность» ниже). Если инструкция CPUID не существует, возникает исключение недопустимого кода операции, а модель процессора и степпинг определяются другими способами.

    Определение модели процессора

    Определить модель процессора на процессорах без инструкции CPUID значительно сложнее. Например, 80386, 80486 и Pentium имеют множество типов моделей. Семейство 80386 состоит из моделей DX, SX, CX, EX и SL. Семейство 80486 состоит из моделей DX, DX2, DX4, SX, SX2 и SL, а также 80487 DX и SX. Семейство Pentium все еще растет, но в настоящее время оно включает процессоры P5, P54C, OverDrive и OverDrive для DX4. Иногда можно обнаружить эти разные модели, а иногда нет. (Алгоритм Intel не пытается определить какие-либо модели процессоров.)

    Определение информации о степпинге процессора

    Более глубокий уровень идентификации процессора включает получение фактической информации о степпинге процессора. Пошаговая информация полезна для определения того, какие ошибки исправлены в конкретной модели. Даже имея эту информацию, вы должны сопоставить идентификатор шага с документами об ошибках, чтобы определить, какие ошибки исправлены. Эта информация общедоступна для Pentium и Pentium Pro. Для всех остальных обработчиков она по-прежнему является конфиденциальной и публикуется только по соглашению о неразглашении.

    Информация о степпинге содержится во внутреннем регистре процессора, который называется «регистр ID». На всех процессорах 80386 и более поздних версиях эта информация возвращается в EDX после того, как процессор завершает СБРОС. Эта информация не предоставляется ни в одном семействе процессоров до 80386. Несмотря на то, что формат этого регистра немного изменился с течением времени, он содержит ту же важную информацию. Чтобы получить этот регистр ID на процессорах, которые не поддерживают инструкцию CPUID, вы должны СБРОСИТЬ процессор. Все ПК-совместимые устройства имеют средства восстановления после СБРОСА и возврата управления программе пользователя. Для этого вы должны сохранить специальную подпись в CMOS RAM и указатель дальнего перехода в памяти до того, как произойдет RESET. После RESET BIOS считывает эту подпись и возвращает управление вашей программе по указанному указателю дальнего перехода. Это не всегда работает для получения идентификатора процессора, так как нет гарантии, что EDX не будет уничтожен к тому времени, когда пользовательская программа восстановит управление. Есть и другая техника, но она намного сложнее.

    Чтобы получить идентификатор процессора, вы должны взять под контроль выполнение кода сразу после сброса. Всякий раз, когда процессор сбрасывается, он начинает выполнение с физического адреса 0xFFFFFFF0. Набор микросхем сопоставляет BIOS с 0xF0000 с верхней частью памяти по адресу 0xFFFF0000. Это позволяет ЦП начать выполнение кода BIOS сразу после RESET. Мы хотим, чтобы BIOS не получил контроль над выполнением после RESET, а вместо этого направить управление нашей собственной программе. Теоретически это невозможно, но из-за конструкции ПК есть способ получить контроль над выполнением до BIOS. Представьте, что произойдет, если первые инструкции, полученные процессором из вектора RESET, будут содержать кучу недопустимых кодов операций. Процессор сгенерирует исключение с недопустимым кодом операции и отправит обработчик исключения с недопустимым кодом операции. Обработчик исключений с недопустимым кодом операции отправляется путем считывания дальнего указателя с адреса 0:Ox18 и перехода к этому местоположению всякий раз, когда возникает такое исключение. Если вы настроили обработчик исключений с недопустимым кодом операции до того, как произойдет СБРОС, и каким-то образом помешали BIOS взять на себя управление выполнением после СБРОСА, обработчик исключений может сохранить содержимое CPUID (содержащееся в EDX), прежде чем вернуть управление вашему CPUID. программа обнаружения. Трудность в этом методе заключается в том, что после RESET возникает исключение недопустимого кода операции после получения первых инструкций. Обычно этого не происходит, так как первыми извлекаемыми инструкциями всегда будут допустимые инструкции BIOS.

    Бывают случаи, когда этот метод не работает. Некоторые чипсеты рассматривают эту аномалию как ошибку, которая может привести к зависанию системы. Такие наборы микросхем сопоставляют BIOS с обоими адресами (0xFFEF0000 и 0xFFFF0000). Таким образом, независимо от состояния шлюза A20, системный RESET изящно вызовет код сброса BIOS вместо того, чтобы позволить системе зависнуть. Когда чипсет декодирует BIOS в обоих регионах, этот метод не сработает. Поэтому мой исходный код определяет это условие и не пытается использовать эту технику, если она не работает.

    Предупреждения

    Этот алгоритм написан для реального режима и режима v86. Однако алгоритм (а не фактическая реализация) можно легко адаптировать к защищенному режиму CPL-0.

    Выполнение этого алгоритма при использовании некоторых менеджеров памяти может не работать. Старые менеджеры памяти, такие как Microsoft EMM386.EXE, не позволяют прикладной программе выполнять свой собственный обработчик исключения недопустимого кода операции. Такие менеджеры памяти останавливают работу системы при возникновении такого исключения. Такое поведение диспетчера памяти следует рассматривать как конструктивный недостаток с их стороны и несовместимый с первоначальным намерением Intel предоставить тип исключения неверный код операции. Исключение недопустимого кода операции предназначалось для перехвата недопустимых кодов операций и разрешения расширений архитектуры x86. Предполагалось, что разработчик программного обеспечения может определять свои собственные коды операций и полагаться на свой собственный обработчик исключений недопустимых кодов операций для реализации расширений инструкций. Это намерение было задокументировано Intel в Справочном руководстве программиста iAPX 286, Приложение B:

    " 0F0B и 0FB9 следует использовать при преднамеренном создании исключения с недопустимым кодом операции. "

    Все доступные в настоящее время диспетчеры памяти передают исключение недопустимого кода операции сбойной задаче v86. Это развитие превращает все возражения, выдвинутые против моего алгоритма, в устаревшие.Я протестировал EMM386-95, 386Max v8.0 и QEMM v8.0 и обнаружил, что мой алгоритм работает без проблем.

    Я не пытаюсь определить некоторые типы моделей процессоров. В некоторых случаях можно использовать различия процессоров (например, количество адресных строк ЦП) для обнаружения различий моделей. Однако любой такой метод будет зависеть от реализации набора микросхем (которая может отображать неиспользуемую память на системную шину) и сделает этот метод неэффективным.

    Результаты

    Иногда алгоритм Intel не может правильно определить любой процессор выше 80386, вместо этого идентифицируя 80486, Pentium и Pentium Pro как 80386. (Я описал эту ошибку в своей сентябрьской колонке.) Эта ошибка проявляется, когда я загрузиться без каких-либо драйверов устройств (Чистая) и при использовании всех вариантов V86MON. Как я выяснил, почти идеальная эмуляция V86MON в реальном режиме была слишком идеальной, поскольку алгоритм Intel демонстрировал такое же ошибочное поведение при запуске под V86MON. Ошибка не проявлялась при запуске под EMM386, 386Max или QEMM. В этих случаях ошибка была скрыта, потому что эти менеджеры памяти не полностью эмулировали поведение в реальном режиме. Несмотря на это, мой алгоритм не подвержен этому сбою.

    Алгоритм Intel блокировал компьютер при работе на V86MON (обычный режим v86) с включенной виртуализацией прерываний. Мой алгоритм отлично работал в этой среде.

    Алгоритм Intel определяет AMD 5k86 как процессор класса 80486, несмотря на то, что он обладает всеми функциями и инструкциями Pentium, включая инструкцию CPUID. Мой алгоритм правильно определяет этот процессор как процессор класса Pentium, произведенный не Intel.

    Алгоритм Intel определил Cyrix 6x86 как процессор класса 80486, несмотря на то, что он имеет всю производительность и инструкции процессора класса Pentium. В реальном режиме мой алгоритм использовал технику выключения процессора для правильного определения 6x86 как процессора класса Pentium, отличного от Intel. Вне реального режима мой алгоритм также определил 6x86 как процессор класса 80486. Алгоритм Intel определил Nexgen Nx586 как процессор класса 80386. Мой алгоритм обнаружил Nx586, используя CPUID, и правильно сообщил, что это процессор класса Pentium, произведенный не Intel.

    В целом оба алгоритма дают одинаковые результаты и правильно работают в самых разных средах. Когда бушевали войны за алгоритмы CPUID (около 1988, 1989), ученые мужи хвалили алгоритм Intel, а не мой подход, утверждая, что их алгоритм работает в более широком диапазоне операционных сред. Я доказывал техническую правильность своего алгоритма и утверждал, что менеджеры памяти, которые мешали работе моего алгоритма, были спроектированы неправильно. Поэтому я с гордостью обнаружил, что все диспетчеры памяти, которые я тестировал для этой статьи, имеют исправленный дизайн. Это позволяет моему алгоритму работать без сбоев. Как показывают мои результаты, мой алгоритм работает в более широком диапазоне операционных сред, не склонен к неправильной диагностике семейства процессоров, не склонен к неправильной диагностике процессоров сторонних производителей, предоставляет тип модели процессора, где это применимо, и предоставляет модель и информация о степпинге процессоров, не поддерживающих инструкцию CPUID. В дополнение к этим преимуществам мой алгоритм можно адаптировать к защищенному режиму, а алгоритм Intel — нет. Это должно решить конфликты алгоритмов CPUID раз и навсегда или, по крайней мере, на ближайшую дельту времени.

    80186 должен был стать естественным преемником 8086 в персональных компьютерах. Однако, поскольку его встроенное оборудование было несовместимо с оборудованием, используемым в оригинальном IBM PC, 80286 использовался в качестве преемника вместо IBM PC/AT.

    Это объясняет, почему большинство ПК-совместимых устройств также не использовали его.

    Что именно делает 186 несовместимого с IBM PC?

    Я вижу, что он использовался в RM Nimbus. Пользовался этими штуками в колледже. Возмутительно почти, но не совсем совместимый с IBM.

    У меня был сопроцессор 80186 (для BBC Micro) — на плате было 512 КБ ОЗУ. Он запускал довольно близкую версию DOS (похожую на 3.1, IIRC) и мог играть в игры, в которых не использовалась прямая аппаратная адресация.

    3 ответа 3

    Основная проблема с 80186 связана не с самим ядром ЦП, а с его интегрированными периферийными устройствами: они несовместимы с теми, которые используются в IBM PC, и они также не интегрированы таким же образом.< /p>

    В IBM PC используется контроллер DMA 8237 со смещением 0x00 в адресном пространстве ввода-вывода, PIC 8259 со смещением 0x20 и PIT 8253 со смещением 0x40. Интегрированные периферийные устройства 80186 отображаются с помощью «периферийного блока управления», который можно перемещать в адресном пространстве ввода-вывода (по умолчанию он равен 0xFF00), но их смещения фиксированы и не совпадают с ПК: в то время как PIC по смещению 0x20, PIT — по смещению 0x50, а дескрипторы DMA — по смещению 0xC0.Регистры управления DMA не такие, как у 8237, поэтому код, ожидающий 8237, не будет работать с 80186. PIC и PIT у 80186 более сложные, чем у 8253 и 8259, и управляются по-разному.

    В 80186 также больше зарезервированных аппаратных прерываний, чем в 8086.

    Ряд более или менее совместимых компьютеров был создан с использованием 80186, в том числе тот, который уже обсуждался здесь (почему RM Nimbus PC-186 не совместим с IBM PC?), и знаменитый Tandy 2000, Siemens PC-D и несколько карманных компьютеров HP (100LX, 200LX, 1000CX). Они были максимально совместимы с DOS и Windows благодаря способности DOS и Windows работать на несовместимых с ПК системах (с соответствующими уровнями аппаратного интерфейса). Многие такие компьютеры воспользовались своей несовместимостью с ПК, чтобы обеспечить улучшения по сравнению с ПК, например, больше памяти для программ DOS.

    Был также шведский COMPIS, запускающий CP/M из ПЗУ (по умолчанию), разработанный как компьютер для школ. Как известно, на задней стороне много разных разъемов ввода-вывода, но (IIRC) нет RS-232.

    У меня смутные воспоминания о 80186 — своего рода предшественнике сегодняшних высокоинтегрированных однокристальных микроконтроллеров, не так ли? Почти уверен, что я сидел в одной комнате с кем-то, кто разрабатывал какую-то встраиваемую систему, в которой когда-то, давным-давно, был 80186.

    @Solomon да, это SoC, предназначенный для встроенных систем (мое руководство Intel для 80186 является частью серии «встраиваемых микропроцессоров», наряду с 376 на базе 386).

    Конечно, с точки зрения типичного программного обеспечения Dos несовместимости не имели значения. Все, что использовало только прерывания DOS или BIOS для взаимодействия с оборудованием, можно было заставить работать. Для пользователя Nimbus PC186, например, наиболее актуальной проблемой было то, что графический интерфейс этих машин не был полностью совместим ни с одним стандартным дисплеем ПК (его можно было установить в режим совместимости с CGA, но только с фиксированной палитрой, iirc, поэтому многие программы оказались со странными цветами).

    Да, 80186 часто использовался во встраиваемых устройствах благодаря встроенным периферийным устройствам и логике декодирования. У него была программируемая логика выбора микросхем, которая позволяла определять несколько областей памяти ROM и RAM. Это сэкономило много связующей логики. В течение многих лет Intel (186EC с 4 высокоскоростными последовательными каналами) и AMD (Am186EM) разработали множество вариантов с большим количеством функций. Некоторые варианты использовались до 2000 года. Моя компания использовала AM186EM, который был действительно хорошей демультиплексированной шиной. до 40 МГц, много ввода/вывода, последовательные порты и т.д.

    • Проверка массива (BOUND)
    • Немедленное целочисленное умножение 8/16 (IMUL)
    • Отправить немедленно 16 августа
    • Push/Pop All (PUSHA/POPA)
    • Инструкции по смене с немедленным подсчетом (ROL/RCL/SHL/и т. д.)
    • Ввод нескольких байтов/слов (INSB/W)
    • Вывод нескольких байтов/слов (OUTB/W)
    • Обработка кадров стека (ВВОД/ВЫХОД)
    • Проверка массива INT 5
    • INT 6 Неиспользуемая инструкция
    • Инструкция ESC INT 7 (FPU)

    Пока программное обеспечение будет сталкиваться с теми же несовместимостями, что и с 286.

    Кроме того, несовместимость дополнительного оборудования не представляет большой проблемы, в зависимости от выбранного дизайна.

    Как сказал Стивен, входящие в комплект периферийные устройства превосходят 8-разрядные компоненты IBM. Это особенно верно для контроллера прямого доступа к памяти, который может передавать данные в любое место любой длины (до 64 КиБ).

    Несмотря на то, что адресная структура блока ввода-вывода полностью отличается от адресной структуры ПК, он не мешает аппаратному обеспечению ПК, поскольку после сброса находится в FF00h. Площадь, которую не занимает никакое компьютерное оборудование (я знаю). Даже не позднее. Его можно переместить в любое место в адресном пространстве или ввода-вывода.

    Самый очевидный способ добиться совместимости с IBM-PC — добавить все то же самое, что и ПК. Хотя это устранило бы многие преимущества встроенных периферийных устройств, но это звучит еще хуже, так как большая часть ПК-ввода/вывода может быть добавлена ​​как один чип южного моста.

    Единственной оставшейся несовместимостью будет контроллер прерываний (PIC), так как он расположен по другому адресу.

    Здесь можно использовать довольно удобный декодер адресов. Подключив его выход к NMI и настроив его так, чтобы он покрывал диапазон адресов ввода-вывода 0000h..03FFh, который является диапазоном всех вводов-выводов на исходном ПК, он будет генерировать NMI (*1) при каждом доступе ( *2). Теперь обработчик NMI может декодировать ошибочную инструкцию (*3) и транслировать ее на реальное оборудование и обратно.

    В системах 80186, работающих на частоте не менее 6 МГц, влияние уровня трансляции на производительность было приемлемым. На самом деле, я помню только одно использование, которое нельзя было эмулировать, и это активная генерация звука, когда ЦП по существу обрабатывает динамик в программном обеспечении. что-то уже критичное для подлинного оборудования.

    Машина Olivetti Prodest PC1 1987 года (!), основанный на NEC V40 (SoC, очень похожий на 80188, но с ПК, подобным таймеру / UART / PIO), использовал обработчик NMI для эмуляции ПК-совместимого контроллера 8237 DMA при использовании сборки в 20-битном DMA.

    Короче говоря: вполне возможно использовать 80186 и его преимущества при большей совместимости.

    Упомянутая PC-D, задуманная как рабочая станция Unix, предлагала другой путь. Здесь вся память и ввод-вывод требовались для обработки сигнала READY, управляемого сторожевым таймером, также предусмотренным 80186. Хотя теоретически это можно было бы использовать и для эмуляции (я так и сделал), влияние на производительность было довольно сильным, поскольку оно срабатывало только примерно через 1 миллисекунду. Эоны процессорного времени. Приятной частью было то, что системное ПЗУ, как и MS-Windows, по умолчанию направляло любой NMI в отладчик на основе ПЗУ. Оттуда оставалось всего несколько команд, пока можно было исправить проблемное программное обеспечение, чтобы оно работало безупречно :)

    *1 - NMI в любом случае странный тип на IBM-PC AT, так как его можно замаскировать. Джеп, это то, что нужно прочитать дважды, поскольку сама особенность NMI заключается в том, что ее нельзя маскировать, поэтому ее можно использовать для сообщения о критических состояниях (например, ошибках памяти).

    *2 - То же самое можно заархивировать, просто выбрав все вводы-выводы с нулевыми старшими 6 битами, для которых требуется один TTL, оставив сигналы PCS для другого использования.

    *3 - Хотя декодирование вызывающей ошибку инструкции памяти только с адресом инструкции следующая, как это предусмотрено NMI, является довольно сложным и довольно подверженным ошибкам процессом, он прямолинейный, когда он приходит к вводу-выводу, так как есть только 4 (ну, 8 с INS/OUTS) кодов операций для обнаружения, и они имеют фиксированные форматы.

    Единственной возможной двусмысленностью могут быть инструкции прямого адреса (8-битный номер порта), но, к счастью, этот диапазон адресов (0Exh) не используется на ПК. Точно так же INS/OUTS не конфликтуют - ну, их вообще не следует ожидать от программного обеспечения 8088.

    Читайте также: