「アセンブリ言語」 - 第12章割り込み内王双

https://zhidao.baidu.com/question/130424698.html

 

例えば8086のような能力を備えている共通のCPUのいずれかが、特定のメッセージにわたって検出または内部で生成される外部のCPUから送信された、現在実行中の命令の実行が完了した後に行ってもよいし、直ちに受信することができます。情報が処理されます。この特定の情報は、我々はそれを呼び出すことができます。割り込み情報を。

情報割り込みCPUは、内部と外部の両方から来ることができます

この章では、我々はから内部CPU割り込み情報を議論します

12.1で生成された割り込み

割り込み種別コードデータのバイトであり、それは情報の割り込み256種類のソースを示すことができます。

内部CPUは、次のを持っている場合は、対応する割り込み情報を発生します。

1:除算エラー、例えば、オーバーフロー実行命令生成DIVの分割

2:シングルステップ実行

3:命令実行中

4:INT命令実行

8086CPU情報の割り込みソースを識別するためのコードと呼ばれるデータのタイプによって中断しました。

割り込み要因の上記4種類、8086CPUタイプコード次のように

1.除算エラー:0

2.シングルステップ:1

3.命令実行へ:4

4.命令のINTフォーマットは、N N直ちにバイトはタイプコード割り込みCPUに供給される命令の数であり、命令INTを実行します。

12.2割り込みハンドラ

CPUは割り込み情報、処理のために必要とされる割り込み情報を受信した後。それが私たちのプログラミングによって決定することができる割り込み、情報がどのように処理されます。一般的に、異なる割り込み書き込み異なる情報処理プログラムの必要性。

最初の質問は、ハンドラ割り込みその入り口が情報に基づいて決定されるか、情報を受け取った後、CPUの割り込みで見られます。

CPUは割り込み情報に基づいて実行されるハンドラを見つけることができるように、CPUの設計者は、情報および割り込みハンドラのそのエントリアドレスとの間のリンクを確立する必要があります。

CPUの設計、割り込みタイプコードは、割り込みハンドラの影響位置決めに使用されます。

缶アテンダントの問題は、それがセグメントとオフセットアドレスのアドレスを知っている必要があり、どのようにコードの8種類のんに基づいて、端末の割り込みハンドラセグメントアドレスとオフセットアドレスを取得するには、割り込みハンドラを見つけることでしょうか?

12.3割り込みベクタテーブル

割り込み種別コードによって8ビットCPUの割り込みは、割り込みベクタテーブルハンドラの適切なエントリアドレスを検索します。だから、割り込みベクタそれは何ですか?または割り込みハンドラのエントリアドレス。

格納された割り込みソース256は、割り込みハンドラエントリに対応する前記割り込みベクタテーブルは、メモリに格納されています。

この方式では、主な問題は、CPUの割り込みベクタテーブルを見つける方法ですか?さて、割り込みベクタテーブルは、割り込みハンドラのエントリの前提条件アドレスによって発見割り込みタイプコードになった見つけます。

割込みベクタテーブルメモリ割込みベクタテーブルアドレス0で指定8086PC機のために、メモリに格納されています。03FFで部1024を格納し、割り込みベクタテーブル:0000:0000-0000。

そして、ベクタテーブル、それは破るどのくらいのスペースのアカウントのエントリ?割り込みベクタのエントリを格納し、割り込みエントリアドレスが8086CPUのハンドラであり、エントリ・アドレスは、セグメント・アドレスとオフセットアドレスワードを表すエントリ、高いワードアドレスセグメント格納アドレス、ローアドレスを含みますオフセットアドレスワードを保存します。

4Nである割り込みハンドラのエントリのオフセットアドレスに対応する割り込み要因のN番号を格納するためのアドレス記憶手段

割り込みハンドラエントリセグメントアドレスの割り込みソースに対応するN個の番号を記憶するアドレス記憶手段は、4N + 2であります

12.4割り込み処理

検索究極の目標のエントリアドレスがCSとIPを設定するためにそれを使用することで、CPUは割り込みハンドラを実行します。

タイプコード割り込み割り込みベクターで発見し、CSとIPを設定するためにそれを使用して、この作業は自動的にCPUのハードウェアによって行われます。

CPUのハードウェアこれは、割り込み処理と呼ばれます。

CPUは割り込み処理に最初の割り込みルーチンをトリガした情報を、割り込み情報を受け取ります。ターミナルハードウェア処理が完了すると、CS:IPは、CPUが起動する割り込みハンドラを実行し、割り込みエントリハンドラを指します。

中断時には、セットCS:IPは、元のCS及びIP値を保存する必要があります。あなたはサブルーチンコール命令を使用する場合があり、同じ問題を呼び出しますが、またそう、サブルーチンの後に続けるために、実行の原点に戻るには、CSとIPの現在の値を保存するためのコール命令、その後、CSとIPを設定します。

ここ8086CPUは、プロセスを中断することによって引き起こされる中断情報を受信した後です。

1.(割り込み情報から)割り込みタイプコードを取得します。

2.(割り込みフラグレジスタの値を変更するので、スタック内の最初にそれを保存するためのプロセスのように)フラグ・スタック・レジスタの値

3.設定されたフラグの値(以下、このステップの目的を説明する)TF IFのための8の0とレジスタ9

スタックの4.CS内容

スタックの5.IP内容

割り込み種別コードと割り込みタイプコードのメモリアドレスから6 * 4 * 4 + 2ワード単位は、IPとCSを設けた割り込みハンドラのエントリアドレスを読み出します。

 あなたは、スタックでそれらの保存CPUを見ることができます。ビットは、そうすることを目的として、以下のページで説明するなら、私たちは、TFを登録やるべき仕事の中断時にフラグを設定することで、ことに注意してください。

割り込みハンドラに入る前に(一度に、CPUの各レジスタの値)サイトを復元するために、割り込みハンドラを実行した後、CPUの必要があるため。だから、ロゴを変更する前に登録する必要があり、それはスタックの値を保存します。

次のように我々割り込み処理では、より簡潔に説明されています。

1.取得の割り込みタイプコードN

2kpushfa

3.TF = 0、IF = 0

4.プッシュCS

5.push IP

6.IP = N * 4、CS = N * 4 + 2

最後のステップの後、CPUは、プログラマによって書かれた割り込み処理プログラムを実行します。

12.5割り込みハンドラと怒りの指示

CPUが言うことです情報を、中断することがあり、いつでもCPUが割り込みハンドラを実行することができる。任意の時点で検出されているので、割り込みハンドラは、常に一定のメモリ空間に格納する必要があります。

割り込みハンドラは、以下の従来の手順の調製方法およびルーチンと非常によく似ています:

使用1.保存レジスタ

2.割り込み

使用するレジスタを復元します3.

4. IRETリターン命令。

IRET機能命令アセンブラ構文の説明は次のとおりです。

IPポップ

CSをポップ

POPF

IRET命令が実行された後、割り込みハンドラの実行前にポイントにCPUの背面には、プログラムを継続します。

12.6処理除算エラー割り込み

プログラミングプロセス割り込み12.7 0

私たちは、DO0と呼ばれるプログラムを書かれています。

質問は以下のようになります。DO0はそれを置くべきではどこ?

私たちは、オペレーティング・システムに適用する必要があり、DO0格納するメモリ領域の一部を取得したいので、私たちは、オペレーティングシステムの上にコンピュータを使用しているので、すべてのハードウェアリソースは、オペレーティングシステムの管理下にあります。

しかし、ここでは、二つの理由のために、私たちはこれを行うにはしたくありません。

メインラインからのずれの問題を議論しますあまりにも多くのメモリを適用する1

2.私たちは、重要な目的のコンパイルは、コンピュータプログラミングの経験の下を得ることです学びます。可能なのであれば、私たちは、ハードウェアリソースに直接オペレーティングシステムを気にしますが、ありません。

問題は単純明快になり、私たちは、他の手順が使用されることはありませんメモリ領域を見つける必要があります。

言及したフロント、メモリ0000:0000-0000:03FF、スペースの1キロバイトのサイズは、ベクタテーブルのハンドラのエントリアドレス割り込みシステムを格納します。しかし、実際には、プロセスへの割り込みイベントシステムは、256のはるか及ばない。

一般的には、0000から:0200から0000:割り込みベクタテーブルに対応する02FF 256バイトのスペースは空です。

結論:0200:私たちは、メモリDO0 0000に転送することができます。

12.8インストール

12.9 DO0

ベクタ割り込み12.10セット

12.11シングルステップブレーク

レッツ・簡潔には、シングルステップデバッグCPUの使用は、割り込み機能をどのように提供するかを検討します。

まず、ハンドラ割り込みシングルステップを提供し、割り込み、デバッグ、すべてのレジスタの内容を表示する機能は、入力コマンドを待ちます。そして、Tでコマンドの実行、デバッグTFは、CPUがシングルステップ割り込みモードで動作するように、1に設定されています。

割り込みハンドラに入る前に、TF = 0を設定します。したがって、割り込みハンドラを実行するときに発生する割り込みCPUシングルステップを回避することができます。

プロセスのこの段階割り込みTF = 0があるのはこのためです。

(この問題は再びマル)

割り込み12.12に応答して、例外的な状況

いくつかのケースでは、完了するために現在の命令の後にCPUは、中断が発生した場合でも、それが応答しません。たとえば、次のレジスタSSにデータを送信するための命令は、割り込みが発生した場合でも、実行された後、CPUは応答しません。

私たちは、命令のセットはすぐにSS、SP命令の実行を提供するように、この機能、セットSS SPと列に格納された命令を活用する必要がある、とこの間に、CPUは割り込み処理は発生しません。

実験12書き込み0割り込みハンドラ

おすすめ

転載: www.cnblogs.com/JasonPeng1/p/12110079.html