stringtranslate.com

Недопустимый код операции

Незаконный командный сигнал, сгенерированный человеком

Недопустимый код операции , также называемый нереализованной операцией , [1] непреднамеренным кодом операции [2] или недокументированной инструкцией , — это инструкция для ЦП , которая не упоминается ни в одной официальной документации, выпущенной разработчиком или производителем ЦП, но которая, тем не менее, имеет эффект. Незаконные коды операций были распространены на старых процессорах, разработанных в 1970-х годах, таких как MOS Technology 6502 , Intel 8086 и Zilog Z80 . В этих старых процессорах многие из них возникают как побочный эффект подключения транзисторов в ЦП и обычно объединяют функции ЦП, объединение которых не предполагалось. На старых и современных процессорах также имеются инструкции, намеренно включенные в процессор производителем, но не задокументированные ни в одной официальной спецификации.

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

Обзор

Хотя большинство случайных незаконных инструкций имеют бесполезные или даже крайне нежелательные последствия (например, сбой в работе компьютера), некоторые из них могут иметь полезные функции в определенных ситуациях. Такие инструкции иногда использовались в компьютерных играх 1970-х и 1980-х годов для ускорения определенных критичных по времени участков. Другое распространенное применение — продолжающаяся битва между реализациями защиты от копирования и взломом . Здесь они были формой безопасности благодаря неизвестности , и их секретность обычно длилась недолго.

Опасность, связанная с использованием незаконных инструкций, заключалась в том, что, учитывая тот факт, что производитель не гарантирует их существование и функционирование, они могут исчезнуть или вести себя по-другому при любом изменении внутреннего устройства ЦП или любой новой версии ЦП, создавая программы, которые используйте их, несовместимые с более новыми версиями. Например, ряд старых игр Apple II не работали корректно на более новом Apple IIc , поскольку последний использовал более новую версию процессора — 65C02  — которая устранила недопустимые коды операций.

Более поздние процессоры, такие как 80186 , 80286 , 68000 и их потомки, не имеют недопустимых кодов операций, которые широко известны/используются. В идеале ЦП будет вести себя четко определенным образом, когда обнаружит неизвестный код операции в потоке команд, например, вызовет определенное исключение или состояние ошибки . Обработчик исключений или сбоев операционной системы обычно завершает работу приложения, вызвавшего сбой, если только программа ранее не установила свой собственный обработчик исключений/ошибок, и в этом случае этот обработчик получит управление. Другой, менее распространенный способ обработки недопустимых инструкций — определить, что они ничего не делают, кроме как занимают время и пространство (эквивалент официальной инструкции NOP процессора ); этот метод используется , среди прочего, процессорами TMS9900 и 65C02 .Альтернативно, неизвестные инструкции могут быть эмулированы в программном обеспечении (например, LOADALL ) или даже могут быть реализованы «новые» псевдоинструкции. Некоторые BIOS , менеджеры памяти и операционные системы используют это в своих интересах, например, чтобы позволить задачам V86 взаимодействовать с базовой системой, то есть BOP (из «Операции BIOS»), используемым Windows NTVDM . [3]

Несмотря на гарантию Intel в отношении таких инструкций, исследования с использованием таких методов, как фаззинг, еще в 2018 году выявили огромное количество недокументированных инструкций в процессорах x86. [4] Некоторые из этих инструкций являются общими для всех производителей процессоров, что указывает на то, что и Intel, и AMD являются осведомлен об инструкции и ее назначении, несмотря на то, что она не фигурирует ни в одной официальной спецификации. Другие инструкции относятся к конкретным производителям или конкретным линейкам продуктов. Назначение большинства недокументированных инструкций x86 неизвестно.

Сегодня детали этих инструкций представляют интерес главным образом для точной эмуляции старых систем.

Смотрите также

Рекомендации

  1. ^ «1.2. Формат инструкции» . Справочное руководство PDP-10: Программирование с использованием набора инструкций PDP-10 (PDF) . Том. 1. Корпорация цифрового оборудования (DEC). 1969. с. 1-7 . Проверено 13 мая 2022 г.
  2. ^ Окессон, Линус (31 марта 2013 г.). «Декодирование GCR на лету». Архивировано из оригинала 21 марта 2017 г. Проверено 21 марта 2017 г.
  3. ^ Шульман, Эндрю; Браун, Ральф Д .; Макси, Дэвид; Михелс, Раймонд Дж.; Кайл, Джим (1994) [ноябрь 1993 г.]. Недокументированная DOS: Руководство программиста по зарезервированным функциям и структурам данных MS-DOS - расширено и включает MS-DOS 6, Novell DOS и Windows 3.1 (2-е изд.). Ридинг, Массачусетс: Эддисон Уэсли . ISBN 0-201-63287-Х.(xviii+856+vi страниц, 3,5-дюймовая дискета) Исправления: [1][2]
  4. ^ Домас, Кристофер. «Нарушение набора инструкций x86». YouTube . Архивировано из оригинала 19 декабря 2021 г. Проверено 3 января 2018 г.

дальнейшее чтение

Внешние ссылки