Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

В компьютерной инженерии Halt and Catch Fire , известная как ассемблерная мнемоника HCF , представляет собой идиому, относящуюся к инструкции компьютерного машинного кода, которая заставляет центральный процессор (ЦП) компьютера прекращать значимую работу, обычно требуя перезапуска компьютера. Первоначально он относился к вымышленной инструкции в компьютерах IBM System / 360 (представленной в 1964 году), подшучивая над ее многочисленной неочевидной мнемоникой инструкций.

С появлением MC6800 (представленного в 1974 г.) программисты обнаружили недостаток конструкции. Из-за неполного декодирования кода операции два недопустимых кода операции , 0x9D и 0xDD, заставят счетчик программ на процессоре бесконечно увеличиваться, что блокирует процессор до сброса. Эти коды получили неофициальное название HCF. В процессе разработки MC6802 инженеры изначально планировали удалить эту инструкцию, но оставили ее как есть для целей тестирования. В результате HCF был официально признан настоящей инструкцией. [1] [2]Позже HCF стал юмористическим универсальным термином для инструкций, которые могут заморозить процессор, включая преднамеренные инструкции для целей тестирования и непреднамеренные незаконные инструкции. Некоторые из них считаются дефектами оборудования, и если система используется совместно , злоумышленник может выполнить ее, чтобы запустить атаку отказа в обслуживании .

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

Выражение «загореться» - это шутливое преувеличение скорости, с которой микросхема ЦП будет переключать некоторые схемы шины, вызывая их перегрев и возгорание. [3]

Этимология [ править ]

Апокрифические истории связывают этот термин с незаконным кодом операции в IBM System / 360 . Процессор, получив команду, очень быстро начнет переключать линии шины , что может привести к перегреву. [4] [5]

Мнемоника языка ассемблера [ править ]

В языке ассемблера компьютера используются мнемоники, которые прямо эквивалентны инструкциям машинного кода . Мнемоники часто состоят из трех букв, таких как ADD, CMP (для сравнения двух чисел) и JMP (переход в другое место в программе). Изначально инструкция HCF была вымышленной инструкцией на языке ассемблера, которая, как сообщается, разрабатывалась в IBM для использования на их компьютерах System / 360 вместе со многими другими забавными трехбуквенными сокращениями, такими как XPR (Execute Programmer) и CAI (Corrupt Accounting Information), [6] и аналогичны другим мнемоникам шуток, таким как «SDI» для «Самоуничтожение немедленно» [6]и "CRN" для преобразования в римские цифры. [7] Список таких мнемоник, включая HCF, отображается как «чрезмерно расширенная мнемоника» в апрельском выпуске пародии на обратную сторону Creative Computing . [8]

IBM System / 360 уже включены многочисленные неочевидные мнемоники как ZAP (Ноль и Add Упакованный), EDMK (РЕДАКТИРОВАТЬ и знак), TRT (Преобразовать и испытания), и чтение назад (команда I / O канал), [9] и программисты начали создавать такие же загадочные, но вымышленные инструкции в юмористическом ключе. [10] [11]

В ходе обсуждения USENET в 1990 г. утверждалось, что HCF возник еще до 1977 г. [12] [13]

В научно-фантастическом / фэнтезийном романе Рика Кука « Скомпилированное волшебство» о программистах, перемещенных во вселенную, где можно было программировать магию, один из них называет команду HMCF, что означает «Стой, растопи и загорелся».

В TIS-100 , видеоигре-головоломке, созданной Zachtronics Industries , есть скрытый код операции HCF, который перезапускает всю игру.

В современных процессорах [ править ]

Разработчики ЦП иногда включают одну или несколько недокументированных инструкций машинного кода для целей тестирования, таких как инструкция IBM System / 360 DIAGnose. [9]

Motorola 6800 [ править ]

Motorola 6800 Микропроцессор был первым , для которых документирована сборки мнемонические HCF стали широко известны. Коды операций ( коды операций - части инструкций машинного языка, которые определяют выполняемую операцию) являются шестнадцатеричными 9D и DD, о них сообщалось и им было дано неофициальное [14] мнемоническое HCF в статье, написанной Джерри Уилером в декабре 1977 года. выпуск BYTE журнала на недокументированных опкодах. [14]Уиллер отметил, что Motorola сообщила 197 действующих кодов операций для процессора M6800, и таким образом сделал вывод, что при 256 возможных 8-битных комбинациях должно быть 59 «недопустимых инструкций». Далее он описывает HCF как «большой сюрприз» и говорит о части прозвища Catch Fire: «Ну, почти»:

Когда эта инструкция выполняется, единственный способ увидеть, что она делает, - это осциллограф . С точки зрения пользователя машина останавливается и игнорирует большинство попыток ее перезапуска. Те, у кого есть индикаторные лампы на адресной шине , увидят, что процессор начинает последовательно и очень быстро считывать всю память. Фактически адресная шина превращается в 16-битный счетчик. Однако процессор не замечает, что он читает ... он просто читает. [14]

Процесс рассматривается Дэвидом Агансом, таким образом:

В старые времена микропроцессоров Motorola 6800 код инструкции DD заставлял процессор переходить в бесконечный цикл, считывая из каждого адреса памяти по порядку. (Другие инженеры называли это инструкцией «Остановись и загорелся» [HCF], но мы запомнили код, назвав его инструкцией «Drop Dead».) Режим Drop Dead отлично подходит для определения времени аппаратного обеспечения и решения логических проблем с помощью сфера действия ; все линии адреса и часов были хорошими, вращались прямоугольными волнами. [15]

То есть любой код операции заставлял процессор переходить в режим , непрерывно выполняя циклы чтения памяти с последовательных адресов без промежуточных выборок инструкций. Таким образом, адресная шина фактически превратилась в счетчик , позволяющий быстро проверить работу всех адресных линий . Как только процессор перешел в этот режим, он не реагировал на прерывания , поэтому нормальную работу можно было восстановить только путем сброса (отсюда прозвища «Drop Dead» и «Halt and Catch Fire»). Таким образом, эти ссылки были на отсутствие реакции процессора в этом состоянии, а не на какую-либо форму неустойчивого поведения. [ необходима цитата ]

Мнемоническая функция HCF считается первой встроенной функцией самотестирования микропроцессора Motorola. [2]

Intel x86 [ править ]

Intel 8086 и последующие процессоры серии x86 имели инструкцию HLT (остановка), код операции F4, которая останавливала выполнение инструкции и переводила процессор в состояние HALT. Разрешенное прерывание, исключение отладки, сигнал BINIT, сигнал INIT или сигнал RESET возобновили выполнение, что означало, что процессор всегда можно было перезапустить. [16] Некоторые из ранних чипов Intel DX4 имели проблемы с инструкцией HLT и не могли быть перезапущены после использования этой инструкции, что привело к отключению компьютера и превращению HLT в инструкцию HCF. Ядро Linux добавило параметр «no-hlt», указывающий Linux на выполнение бесконечного цикла вместо использования HLT, что позволяло пользователям этих сломанных микросхем использовать Linux. [17]

80286 имеет недокументированный код операции 0F 04, что приводит к зависанию ЦП при выполнении. Единственный выход - перезагрузка процессора. [ необходима цитата ] [18] В некоторых реализациях код операции эмулировался через BIOS как последовательность остановки . [19]

Многие компьютеры в линейке Intel Pentium могли быть заблокированы из-за выполнения недопустимой инструкции (F00F C7C8), что привело к зависанию компьютера. Это стало известно как ошибка Pentium F00F . Ни один компилятор не будет создавать инструкцию, но злонамеренный программист может вставить ее в код, чтобы вывести пораженный компьютер из строя до тех пор, пока машина не будет выключена и выключена . С момента его открытия были разработаны обходные пути для предотвращения блокировки компьютера, и ошибка была устранена в последующих процессорах Intel. [20] [21]

Во время Black Hat USA 2017 Кристофер Домас показал, что он нашел новую пока неизвестную инструкцию «Остановись и загорелся» [22] [23] для конкретной модели процессора x86, используя свой собственный фаззер процессора x86, называемый sandsifter . [24]

Другие процессоры [ править ]

MOS Technology 6502 имеет 12 недопустимые инструкции , которые будут замораживать процессор. [25] [26]

На Zilog Z80 выполнение DI (отключение прерываний) с последующим HALT (ожидание прерывания) приводит к тому, что ЦП остается замороженным на неопределенный срок, ожидая прерывания, которое не может произойти. Подобное процессорное ядро ​​Sharp в системе LR35902 Game Boy на кристалле содержит частичное исправление, позволяющее ему восстанавливаться после одного HALT, как аналогичная инструкция WAI 65C02, но оно зависает с тремя последовательными HALT с отключенными прерываниями. [27] Само ядро ​​содержит не менее 11 кодов операций, которые полностью блокируют ЦП при выполнении. [28]

Z80 также поддерживает немаскируемые прерывания. [29] [30] Сигнал / NMI находится на выводе 17 оригинального 40-выводного DIP-корпуса. [31] [32] Поскольку немаскируемое прерывание восстанавливает контроль над ЦП даже после выполнения последовательности команд DI / HALT, эта пара не представляет собой истинный HCF. Это приведет к состоянию HCF только в том случае, если вывод / NMI подключен непосредственно к шине + 5 В, что делает генерацию этого сигнала невозможной, или если процедура прерывания, обслуживающая / NMI, заканчивается возвратом, помещая его обратно в Состояние HALT.

См. Также [ править ]

  • Ошибка Cyrix coma
  • Убийца тыкать
  • lp0 в огне
  • Память только для записи

Ссылки [ править ]

  1. ^ http://bytecollector.com/archive/digital_group/documentation/hardware/dg_systems/system_cards/6800_cpu_card/6800_Instruction_Set.PDF Набор инструкций MC6800
  2. ^ a b Дэниэлс, Р. Гэри; Брюс, Уильям (апрель 1985 г.). «Тенденции встроенного самотестирования микропроцессоров Motorola». Дизайн и тестирование IEEE . 2 (2): 64–71. DOI : 10.1109 / MDT.1985.294865 .Чтобы добавить оскорбления к травме, мы обнаружили, что у нас есть незаконный HACOF, инструкция, которую наши клиенты нашли на MC6800. Это был неиспользованный код операции - недопустимая инструкция. При непреднамеренном выполнении счетчик программы будет увеличиваться бесконечно. Проблема, которая была вызвана неполным декодированием кода операции, была неприятной, потому что сброс был единственным средством завершения инструкции. ... В процессе проектирования мы придумали, как убрать инструкцию HACOF. Примерно в то же время инженеры по продукту пришли к нам с идеей. Они сказали: «Знаешь, чего мы действительно хотим? Какой-то способ быстро проверить оперативную память. Если бы мы могли каким-то образом указать программному счетчику на первый адрес ОЗУ, а затем просто увеличивать объем ОЗУ, мы могли бы протестировать его намного быстрее ». Поскольку «инструкция» HACOF делала именно это - а мы действительно этого не делали »Я не хочу прилагать усилия, чтобы удалить его - мы ответили: «У нас есть для вас сделка!» Таким образом, HACOF стал первой встроенной функцией самотестирования микропроцессора Motorola.
  3. ^ Запись в файле жаргона для мнемоники сборки HCF
  4. Клементс, Алан (28 октября 2006 г.). Внедрение этики в компьютерную архитектуру . Конференция ASEE / IEEE Frontiers in Education (36-е изд.). п. 4 . Проверено 2 марта 2018 .
  5. Колер, Эдди (4 апреля 2005 г.). «CS111 - Лекция 1» (PDF) . п. 2 . Проверено 2 марта 2018 .
  6. ^ a b Данлэп, Брайан. «Предлагаемый набор инструкций» . Физический факультет Государственного университета Огайо . Архивировано из оригинала на 8 сентября 2017 года . Проверено 20 июня +2016 .
  7. ^ Далеко ОП - кодов , Вернер Cirsovius, архивируются с оригинала на 5 марта 2016 года , извлекаться +28 May 2 015
  8. ^ "Overextended Mnemonics" , Creative Computing , 6 (4): 17 (шестнадцатеричный) (оборотная сторона), апрель 1980 г. , получено 12 марта 2017 г.
  9. ^ a b Принципы работы IBM System / 360 (PDF) , IBM , получено 2 июля 2014 г.
  10. ^ «Анекдоты Кевина Корба: Операционные коды ассемблера, которые должны существовать» . Проверено 13 декабря +2016 .
  11. ^ «Забытые команды языка ассемблера» . Проверено 13 декабря +2016 .
  12. ^ "Тема: Инструкция HCF: из Принципов работы" , Архив на textfiles.com
  13. ^ "apocryphal opcode mnemonics, long" , 23 апреля 1990 г., alt.folklore.computers , (через группы Google)
  14. ^ a b c Уиллер, Джерри (декабрь 1977 г.). «Недокументированные инструкции M6800» . БАЙТ . Vol. 2 шт. 12. С. 46–47. Мнемоника, конечно, присваивается мной.
  15. ^ Аганс, Дэвид Дж. (2002). Отладка: 9 обязательных правил для поиска даже самых труднодостижимых программных и аппаратных проблем . Нью-Йорк: Американская ассоциация менеджмента. п. 77. ISBN 9780814426784. OCLC  52043345 .
  16. ^ "Ссылка на набор команд x86: HLT" . Проверено 2 июля 2014 .
  17. ^ Gortmaker, Пол (21 марта 2003). «Подсказка по загрузке Linux» (PDF) . Проект документации Linux . Проверено 2 июля 2014 .
  18. ^ "Re: Недокументированные коды операций (HINT_NOP)" . Архивировано из оригинала 6 ноября 2004 года . Проверено 7 ноября 2010 года .
  19. ^ "Re: Также некоторые недокументированные коды операций 0Fh" . Архивировано из оригинального 26 июня 2003 года . Проверено 7 ноября 2010 года .
  20. ^ Коллинз, Роберт Р. (1 мая 1998 г.). «Ошибка Pentium F00F: обходные пути для неприятной проблемы» . Журнал доктора Добба .
  21. ^ Обновление спецификаций процессора Pentium (PDF) . Корпорация Intel . Январь 1999. С. 51–52. номер для заказа 242480-041 . Источник +2 Ноября 2006 .
  22. ^ «Взлом x86 ISA (PDF)» (PDF) . Кристофер Домас . Проверено 9 декабря 2017 .
  23. ^ "Взлом x86 ISA (видео)" . Кристофер Домас . Проверено 9 декабря 2017 .
  24. ^ "Sandsifter: фаззер процессора x86" . Кристофер Домас . Проверено 9 декабря 2017 .
  25. ^ Steil, Майкл. «Как на самом деле работают нелегальные коды операций MOS 6502» . pagetable.com .
  26. ^ Оффенга, Фредди. «6502 Недокументированные коды операций» . NesDev .
  27. ^ "Руководство по процессору GameBoy" (PDF) .
  28. ^ "Набор команд процессора Game Boy" .
  29. ^ «Механизм прерывания - Развитие - Сила SMS!» .
  30. ^ Фламменкамп, Ахим. «Поведение процессора Z80 при прерывании» .
  31. ^ "Распиновка - семейство Z80" .
  32. ^ Vis, Питер Дж. "Распиновка Zilog Z80" .

Внешние ссылки [ править ]

  • Файл жаргона / статья в словаре нового хакера для Halt and Catch Fire