明日試験がありますが、科目の 1 つはアセンブリの例外です。それらのリストはありますが、例外とは何か、それぞれがいつ発生するかについての簡単な説明を見つけることができませんでした。
例外は次のとおりです。
- エリア違反
- 0による除算(これは明らかです)
- 無効な命令
- 無効なアドレス
- 失敗
どの情報も非常に役立ちます。それぞれが何であるかについての一般的な考えだけが必要です。
明日試験がありますが、科目の 1 つはアセンブリの例外です。それらのリストはありますが、例外とは何か、それぞれがいつ発生するかについての簡単な説明を見つけることができませんでした。
例外は次のとおりです。
どの情報も非常に役立ちます。それぞれが何であるかについての一般的な考えだけが必要です。
厳密に言えば、あなたが参照している例外はアセンブリ言語ではなく、CPU の動作動作にあります。
概念的に言えば、CPU は一連の状態レジスタを持ち、一連の命令を消費し、それらの命令に従って状態を操作します。現在、このストリームには、状態を操作する命令 (レジスタ EAX に 1 を追加するなど) と、将来の命令ストリームを変更する命令 (JMP topOfLoop など) が含まれています。
例外は、暗黙的に行われるジャンプのようなものです。たとえば、現在の命令が DIV で除数がゼロの場合、CPU は命令を中止し、代わりに例外ハンドラと呼ばれる別の命令ストリームにジャンプできます。これは、例外ハンドラーが悪い状態から回復するために何かを実行できるため便利です。また、各命令はさまざまな種類の例外 (メモリ エラー、保護エラー、オペランド エラー、モード エラー、アラインメント エラーなど) を引き起こす可能性があり、これらすべての条件をチェックする命令を明示的に記述するのは面倒です。
プロセッサがプログラムを正常に実行し続けることができない場合、基本的にプログラムを実行する能力には例外があります。したがって、理想的には、例外を処理するために使用される、割り込みハンドラーに非常によく似た例外ハンドラー (他のコード) に移動します。割り込みハンドラのように、誰かがアプリケーションを書くだけでなく、そのコードも書かなければなりません。ゼロ除算は明らかであり、無効な命令も同様です。見つかったビットパターンがプロセッサでサポートされている命令 (マシンコード) と一致しない場合、プロセッサは続行できません。メモリシステムが何らかの理由 (ECC マルチビットエラーや無効なアドレスなど) でメモリロケーションを読み書きできない場合のメモリ障害。
すべてのプロセッサに例外があるわけではありません。一部のプロセッサには単に割り込みがあり、それは「プログラムの通常の実行に対する例外」のためのものです...