Недопустимый код операции - Illegal opcode
Машинный код |
---|
Общие понятия |
инструкции |
Нелегальный опкод , называемый также недокументированные инструкции , является инструкцией к CPU , который не упоминается ни в официальной документации , опубликованном дизайнером или производителем процессора, который тем не менее , имеет эффект. Незаконные коды операций были обычным явлением на старых процессорах, разработанных в 1970-х годах, таких как MOS Technology 6502 , Intel 8086 и Zilog Z80 . На этих старых процессорах многие из них существуют как побочный эффект разводки транзисторов в ЦП и обычно объединяют функции ЦП, которые не планировалось объединять. На старых и современных процессорах также есть инструкции, намеренно включенные в процессор производителем, но не задокументированные ни в одной официальной спецификации.
Обзор
Хотя большинство случайных незаконных инструкций имеют бесполезные или даже крайне нежелательные эффекты (например, сбой компьютера), некоторые из них могут иметь полезные функции в определенных ситуациях. Такие инструкции иногда использовались в компьютерных играх 1970-х и 1980-х годов для ускорения определенных критических по времени участков. Другое частое использование было в продолжающейся битве между реализациями защиты от копирования и взломом . Здесь они были формой безопасности через безвестность , и их секретность обычно длилась недолго.
В некоторых случаях «незаконная» инструкция может быть перепрофилирована. На мэйнфреймах Digital Equipment Corporation PDP10 и DECSYSTEM-20, которые использовались в период с 1960-х по 1990-е годы, не было инструкции системного вызова (средства для запроса ввода-вывода и других служб из операционной системы), поэтому вместо этого операционные системы TOPS-10 и TOPS-20 распознали одну конкретную недопустимую инструкцию как вызов супервизора.
Опасность, связанная с использованием незаконных инструкций, заключалась в том, что, учитывая тот факт, что производитель не гарантирует их существование и функционирование, они могут исчезнуть или вести себя по-другому при любом изменении внутренних компонентов ЦП или любой новой версии ЦП, отображая программы, которые используйте их несовместимые с более новыми версиями. Например, ряд старых игр для Apple II некорректно работал на новом Apple IIc , потому что последний использует новую версию процессора - 65C02 - которая устраняет недопустимые коды операций.
Более современные процессоры, такие как 80186 , 80286 , 68000 и его потомки, не имеют незаконных кодов операций, которые широко известны / используются. В идеале ЦП будет вести себя четко определенным образом, когда он обнаруживает неизвестный код операции в потоке инструкций, такой как запуск определенного исключения или состояния ошибки. В операционной системе «сек исключения или ошибка обработчик будет обычно прекращается приложение , которое вызвало ошибку, если программа не ранее создала свой собственный обработчик исключения / ошибки, в этом случае этого обработчик будет получить контроль. Другой, менее распространенный способ обработки недопустимых инструкций - это определить, что они ничего не делают, кроме занимающих время и пространство (эквивалент официальной инструкции NOP ЦП ); этот метод используется , среди прочего, процессорами TMS9900 и 65C02 .В качестве альтернативы, неизвестные инструкции могут быть эмулированы в программном обеспечении (например, LOADALL ), или даже могут быть реализованы «новые» псевдо-инструкции. Некоторые BIOS , диспетчеры памяти и операционные системы используют это преимущество, например, чтобы позволить задачам V86 взаимодействовать с базовой системой («bop»).
Несмотря на эту гарантию производителя в отношении таких инструкций, исследования с использованием таких методов, как фаззинг , выявили огромное количество недокументированных инструкций в современных процессорах x86. Некоторые из этих инструкций используются производителями процессоров, что указывает на то, что Intel и AMD знают об инструкции и ее назначении, несмотря на то, что они не указаны ни в одной официальной спецификации. Другие инструкции относятся к производителям или конкретным линейкам продуктов. Назначение большинства недокументированных инструкций x86 неизвестно.
Сегодня детали этих инструкций в основном представляют интерес для точной эмуляции старых систем.
Смотрите также
- Бэкдор (вычисления)
- Термин безразлично
- Пасхальное яйцо (медиа)
- Halt and Catch Fire (вычисления)
- Ошибка Pentium F00F
- Недокументированная функция
использованная литература
- Незаконные коды операций на 6502: http://www.ffd2.com/fridge/docs/6502-NMOS.extra.opcodes (см. Также Как действительно работают недопустимые коды операций MOS 6502 )
- Незаконные коды операций на Z80: http://www.myquest.nl/z80undocumented/