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