‹テンプレート マニュアルは統合が検討されています。›
トラップフラグはプロセッサをシングルステップモードで動作させることを可能にする。このようなフラグが利用可能な場合、デバッガはそれを使用してコンピュータプログラムの実行をステップ実行することができる。[1]
シングルステップ割り込み
システムにシングル ステップの指示が出されると、システムは 1 つの命令を実行してから停止します。レジスタとメモリ位置の内容を調べることができ、それらが正しければ、システムに次の命令を実行するように指示できます。Intel 8086トラップ フラグとタイプ 1割り込み応答により、8086 ベースのシステムでシングル ステップ機能を実装することが非常に簡単になります。トラップ フラグが設定されている場合、8086 は各命令の実行後にタイプ 1 割り込みを自動的に行います。8086 がタイプ 1 割り込みを行うと、スタックにフラグ レジスタがプッシュされます。
設定
8086には、トラップ フラグを直接設定またはリセットする命令はありません。これらの操作は、スタックにフラグ レジスタをプッシュし、トラップ フラグ ビットをプログラマが希望する値に変更し、フラグ レジスタをスタックからポップすることで実行されます。トラップ フラグを設定するための命令は次のとおりです。
pushf ; スタックにフラグをプッシュしますmov bp , sp ; インデックスまたはワードとして使用するために SP を BP にコピーしますptr [ bp ], 100 h ; TF フラグを設定しますpopf ; フラグ レジスタを復元します
通常、プログラムは割り込みサービス ルーチン (ISR) から監視されるため、トラップ フラグはこのようには使用されません。プログラムの実行は、通常、IRET によって継続されます。
Int3ISR: ; スタック: Ret、フラグ
プシャ; スタック: Ret、Flags、AX、CX、DX、BX、SP、BP、SI、DI
push ds ; スタック: Ret、Flags、AX、CX、DX、BX、SP、BP、SI、DI、DS
push es ; スタック: Ret、Flags、AX、CX、DX、BX、SP、BP、SI、DI、DS、ES
; ... ISR コードは整数のみを使用します (そうでない場合は浮動小数点レジスタも保存する必要があります)
mov bp , sp ; スタック: Ret、フラグ、AX、CX、DX、BX、SP、BP、SI、DI、DS、ES
mov bp , [ bp + 10 ] ; 保存されたSP
またはワード[ bp ]、100 h ; 保存されたFLAGSレジスタにTFフラグを設定する
ポップエス
ポップDS
ポパ
iret ; 1 つの命令の実行を継続し、その後 ISR を再度呼び出します。
リセット
トラップ フラグをリセットするには、前のシーケンスの OR 命令を次の命令に置き換えるだけです。
ワードポインタ[ bp ] 、0xFEFF
8086 がタイプ 1 割り込みを実行するとトラップ フラグがリセットされるため、割り込みサービス手順中はシングル ステップ モードは無効になります。
参考文献
- ^ 「Intel 64 および IA-32 アーキテクチャ ソフトウェア開発者マニュアル」(PDF)。2024 年 11 月 9 日時点のオリジナルよりアーカイブ(PDF) 。2024 年11 月 15 日閲覧。
