Что касается 0xCC
и , 0xCD
в частности, эти реликвии от Intel 8088 / 8086 набор команд процессора еще в 1980 - х годах. 0xCC
это особый случай программного кода прерывания . Специальная однобайтовая версия позволяет программе генерировать прерывание 3 .INT
0xCD
0xCC
Хотя номера программных прерываний, в принципе, произвольны, INT 3
традиционно использовались для функции прерывания отладчика или функции точки останова , соглашение, которое сохраняется и по сей день. Каждый раз, когда запускается отладчик, он устанавливает обработчик прерываний для того INT 3
, чтобы при выполнении этого кода операции был запущен отладчик. Обычно это приостанавливает текущее программирование и отображает интерактивное приглашение.
Обычно INT
код операции x86 составляет два байта: 0xCD
за ним следует номер прерывания от 0 до 255. Теперь , хотя вы могли бы выпустить 0xCD 0x03
на INT 3
, Intel решила добавить специальный version-- 0xCC
без дополнительного байта - потому что опкод должен быть только один байт, чтобы функционировать в качестве надежного «заполнения байта» для неиспользуемой памяти.
Суть здесь в том, чтобы обеспечить постепенное восстановление, если процессор ошибочно переходит в память, которая не содержит каких-либо предполагаемых инструкций . Многобайтовые инструкции не подходят для этой цели, так как ошибочный переход может привести к любому возможному смещению байта, где он должен был бы продолжаться с правильно сформированным потоком команд.
Очевидно, что однобайтовые коды операций работают для этого тривиально, но могут быть и причудливые исключения: например, рассматривая последовательность заполнения 0xCDCDCDCD
(также упомянутую на этой странице), мы можем видеть, что она достаточно надежна, поскольку независимо от того, где находится указатель инструкции ( кроме, возможно, последнего заполненного байта), CPU может возобновить выполнение действительной двухбайтовой инструкции x86 CD CD
, в этом случае для генерации программного прерывания 205 (0xCD).
Что еще более странно, в то время CD CC CD CC
как 100% интерпретируемо - дает либо INT 3
или INT 204
- последовательность CC CD CC CD
менее надежна, только 75%, как показано, но обычно 99,99%, когда повторяется как заполнитель памяти целого размера.
Справочник по макросам , 1987