0xCC
特に、これらは 1980 年代のIntel 8088 / 8086プロセッサ命令セット0xCD
の遺物です。ソフトウェア割り込みオペコード の特殊なケースです。特殊な 1 バイト バージョンでは、プログラムで割り込みを生成できます 3。0xCC
INT
0xCD
0xCC
ソフトウェア割り込み番号は、原則として任意ですINT 3
が、伝統的にデバッガーのブレークまたはブレークポイント機能に使用され、今日まで残っている慣例です。INT 3
デバッガーが起動されるたびに、そのオペコードが実行されたときにデバッガーがトリガーされるように、割り込みハンドラーがインストールされます。通常、現在実行中のプログラミングを一時停止し、インタラクティブなプロンプトを表示します。
通常、x86INT
オペコードは 2 バイト0xCD
で、その後に 0 ~ 255 の目的の割り込み番号が続きます。を発行することはできますが、未使用メモリの信頼できる「フィル バイト」として機能するには、オペコードが 1 バイトのみである必要がある0xCD 0x03
ためINT 3
、Intel は特別なバージョンを追加することにしました。追加のバイトはありません。0xCC
ここでのポイントは、意図した命令が含まれていないメモリにプロセッサが誤ってジャンプした場合に、正常に回復できるようにすることです。マルチバイト命令は、この目的には適していません。誤ったジャンプが、適切に形成された命令ストリームを続行する必要がある可能性のあるバイト オフセットに到達する可能性があるためです。
明らかに、1 バイトのオペコードはこれに対して自明に機能しますが、風変わりな例外もある可能性があります。たとえば、フィル シーケンス (このページでも説明されています) を考慮すると、命令ポインター0xCDCDCDCD
がどこに到達しても(おそらく最後に満たされたバイトを除いて)、CPU は有効な2 バイトx86 命令の実行を再開できます。この場合、ソフトウェア割り込み 205 (0xCD) を生成します。CD CD
さらに奇妙ですが、CD CC CD CC
100% 解釈可能であり、どちらINT 3
かを指定すると、INT 204
シーケンスCC CD CC CD
の信頼性が低くなり、示されているように 75% しかありませんが、一般に、int サイズのメモリ フィラーとして繰り返されると 99.99% です。

マクロ アセンブラー リファレンス、1987 年