16.02.2013 Aufrufe

24531904_j

24531904_j

24531904_j

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

IRET/IRETD—Interrupt Return<br />

オペコード 命令 説明<br />

CF IRET 割り込みリターン ( オペランド・サイズ : 16 ビット )。<br />

CF IRETD 割り込みリターン ( オペランド・サイズ : 32 ビット )。<br />

説明<br />

プ ロ グ ラ ム制御を例外ハン ド ラ ま たは割 り 込みハン ド ラか ら、 例外、 外部割 り 込み、 ソ<br />

フ ト ウ ェ ア生成割 り 込み ま たは ネ ス ト さ れたタ ス ク か ら の リ タ ー ン に よ っ て中断されて<br />

いたプログラムまたはプロシージャに戻す。 IRET および IRETD は同じオペコ ー ド に対<br />

する 2 つのニーモニッ クである。 IRETD ニーモニッ ク (Interrupt Return Double) は、 32<br />

ビ ッ ト のオペラ ン ド ・ サイ ズを使用してい る と き に割 り 込みか ら 戻る場合に使用する こ<br />

とを目的としているが、 ほとんどのアセンブラはどちらのオペランド ・サイズに対して<br />

も IRET ニーモニッ クを使用している。<br />

実ア ド レス ・ モー ド では、 IRET 命令は割 り 込みに よ っ て中断 されていたプ ロ グ ラ ム ま た<br />

はプロシージャへの far リターンを実行する。 この操作では、 プロセッサはスタックか<br />

ら EIP、 CS、 EFLAGS のレジスタにそれぞれリ ターン命令ポインタ、 リ ターン ・ コー<br />

ド・セグメント・セレクタ、EFLAGS イメージをポップし、 次に中断されていたプログ<br />

ラムまたはプロシージャの実行を再開する。<br />

保護モ ー ド では、 IRET 命令の処理は、 EFLAGS レジスタ内のNT ( ネス ト されたタスク )<br />

およびVM フラグの設定と、 現在のスタックにストアされている EFLAGS イメージの<br />

VM フ ラ グの設定に依存す る。 こ れ ら の フ ラ グの設定に応じ て、 プ ロ セ ッ サは以下の タ<br />

イプの割り込み リ タ ーンのいずれかを実行する。<br />

• 実モー ド<br />

• 仮想 8086 モー ドからのリ ターン<br />

• 仮想 8086 モー ドへのリ ターン<br />

• 特権レ ベル内の リ タ ー ン<br />

• 特権レ ベル間の リ タ ー ン<br />

ネス ト されたタスクからのリ ターン ( タスク ・ スイッチ)<br />

Itanium ベース・システム環境では、すべての形式の IRET 命令は、<br />

IA-32_Intercept(Inst,IRET) を発生させる。<br />

NT フラグ(EFLAGS レジスタ ) がク リアされている場合は、 IRET 命令は タ ス ク ・ ス イ ッ<br />

チなしに割り込みプロシージ ャからの far リ タ ー ンを実行する。 リ タ ーン先の コ ー ド ・<br />

セグメン ト は、 特権レベルが ( スタックからポップされたコード ・ セグメン ト ・ セレク<br />

タの RPL フィールドによって示される) 割り込みハンドラ ・ ルーチンの特権レベル以下<br />

でなければなら ない。 実ア ド レ ス ・ モー ド の割り込み リ タ ー ンの場合と 同様に、 IRET 命<br />

令は リ タ ー ン命令ポ イ ン タ、 リ タ ー ン ・ コ ー ド ・ セグ メ ン ト ・ セレ ク タ、 EFLAGS イ<br />

メージをスタックからそれぞれEIP、 CS、 EFLAGS のレジスタにポップし、 次に中断さ<br />

れていたプログラムまたはプロシージャの実行を再開する。 別の特権レベルへのリター ンの場合は、 IRET 命令は、 スタックからさらにスタック ・ ポインタと SS レジスタも<br />

ポップしてからプログラムの実行を再開する。 仮想8086 モー ドへのリ ターンの場合は、<br />

プロセッサはスタッ クからさらにデータ ・ セグメン ト ・ レジスタもポップする。<br />

NT フラグがセット されている場合は、 IRET 命令は、 ネ ス ト さ れたタ ス ク か ら の リ タ ー<br />

ンを実行する ( コール先タスクからコール元タスクに切り替える ) か、 ま たは タス ク ・<br />

スイ ッ チを発生させた割り込みま たは例外の動作を取り消す。 IRET 命令を実行してい る<br />

タ ス ク の更新後の状態がその TSS にセーブされる。 このタスクが後で再起動される場合<br />

は、 IRET 命令の次か ら コ ー ド が実行される。<br />

IRET は、命令のシリアル化操作とメモリ・フェンス操作を実行する。<br />

3:600 第 3 巻 : IA-32 基本命令リファレンス

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!