← На главную

Команда Halt and Catch Fire реально перегревала чипы

16.05.2026 18:16 · hackernews

Фраза «Halt and Catch Fire» стала легендой индустрии компьютеров, хотя многим она известна только благодаря сериалу от AMC. Изначально это был инженерный шут над машинным кодом, который заставляет процессор перестать работать и требует перезагрузки устройства. В буквальном смысле это действительно возможно: при ошибочной инструкции процессор начинает бесконечно считывать оперативную память, превращая адресную шину в быстрый счётчик. Если так долго, чип действительно может сильно нагреться. Яркий пример — IBM System/360, который при определённой некорректной команде постоянно писал в одно место магнитной памяти и зажигался. Термин стал универсальным для обозначения любых недокументированных команд, режимов теста, имитирующих зависание, и реальных аппаратных сбоев. Известный случай — F00F bug на старых процессорах Pentium, где специальная инструкция навсегда блокировала CPU. Шутка возникла на волне популярности трёхбуквенных ассемблерных обозначений вроде ADD или JMP. Автор статьи, Джерри Уилер, в статье для BYTE в декабре 1977 года официально предложил название для двух байтов инструкции процессора Motorola 6800, которые вели себя особо агрессивно. Хотя в документации компании Motorola было задокументировано только 197 инструкций из 256 возможных битовых паттернов, остальные оставались без названия. Некоторые выполняли функцию NOP, а другие меняли регистры состояния, но два конкретных байта — 9D и DD — считались самыми опасными. Уилер объяснил, что при выполнении этой команды пользователь не может сделать ничего, кроме как сбросить устройство, так как процессор игнорирует всё прочитанное. Интересно, что инженеры Motorola даже сохранили это поведение, потому что оно позволяло быстро сканировать RAM при запуске, не платя за его устранение. Более того, для отладки на осциллографе команда называла эту инструкцию «Drop Dead», чтобы видеть красивые квадратные волны на экране. В отличие от IBM, чей чип действительно вспыхивал, моторола 6800 нагревался, но не горел. Однако проблема повторяется и в других архитектурах: некорректные команды на 6502, зависания процессоров x86 и современные тесты на поиск уязвимостей показывают, что подобные сбои — не редкость. В наши дни с помощью фаззинга специалисты намеренно вводят в процессор случайные данные, чтобы найти ошибки. Это подтверждает, что за красивым именем скрывается грубая реальность электроники: чипы — это просто кремний, который иногда ведёт себя непредсказуемо.

Читать оригинал →