トラップフラグ

トラップフラグは、プロセッサをシングルステップモードで動作させることを可能にします。このようなフラグが利用可能な場合、デバッガはそれを用いてコンピュータプログラムの実行をステップ実行することができます[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、フラグ  pusha ; スタック: 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 割り込みを行うとトラップ フラグがリセットされるため、割り込みサービス手順中はシングル ステップ モードが無効になります。

ステータスレジスタ
1514131211109876543210(ビット位置)
----DTSZ--P-C

参考文献

  1. ^ 「Intel 64 および IA-32 アーキテクチャ ソフトウェア開発者マニュアル」(PDF) 。 2024年11月9日時点のオリジナルよりアーカイブ(PDF) 。 2024年11月15日閲覧
Retrieved from "https://en.wikipedia.org/w/index.php?title=Trap_flag&oldid=1272001155"