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.

JMP—Jump ( 続き )<br />

far ジ ャ ンプを実行する と、 プロセ ッ サは タ ーゲ ッ ト ・ オペラ ン ド で指定されたコ ー ド ・<br />

セグメント とアドレスにジャンプする。 この場合は、 ターゲッ ト ・ オペランドは、 絶対<br />

far アドレスをポインタ (ptr16:16 または ptr16:32) で直接に、 ま たはメモ リ ・ ロ ケ ーシ ョ<br />

ン (m16:16 または m16:32) で間接的に指定する。 ポ イ ン タ方式では、 4 バイ ト (16 ビッ<br />

ト・オペランド・サイズ) または 6 バイ ト (32 ビッ ト ・オペランド ・サイズ) の far アド<br />

レ ス即値を使用して、 コ ール先プ ロ シ ー ジ ャ のセグ メ ン ト お よ びア ド レ スが命令内に<br />

コ ー ド 化される。 間接方式では、 タ ーゲ ッ ト ・ オペラ ン ド が 4 バイ ト (16 ビッ ト ・オペ<br />

ランド ・ サイズ ) または 6 バイ ト (32 ビッ ト ・オペランド ・サイズ) の far アドレスを内<br />

容とするメモリ ・ ロケーションを指定する。 far アド レスのオフセッ ト のサイズ (16 ビッ<br />

トまたは32 ビッ ト ) は、 オペラン ド ・ サイズ属性に よ って決ま る。 far アドレスは、 CS<br />

およびEIP レジスタに直接ロード される。 オペランド ・サイズ属性が16 である場合は、<br />

EIP レジスタの上位2バイ ト は 0 にクリアされる。<br />

プ ロ セ ッ サが保護モ ー ド で動作している と き は、 far ジャンプを使用して、 コール・ゲー<br />

トを介してコード ・セグメントにアクセスしたり、 タスクを切り替えられる。 この場合、<br />

プロセッサは、 far アドレスのセグメント ・セレクタ部を使用して、 ジャンプ先セグメン<br />

トのセグメント ・ディスク リプタにアクセスする。 JMP 命令は、 セグ メ ン ト ・ セ レ ク タ<br />

内のタ イプおよ びアク セス権情報の値に基づいて、 以下の操作を実行でき る。<br />

• コンフォーミングまたは非コンフォーミングのコード ・セグメントへのfar ジャン<br />

プ。 ( 前の段落で説明した far ジャンプと同じ機構であるが、 プロセッサがジャンプ<br />

先の コ ー ド ・ セグメ ン ト のア クセス権をチェ ッ ク する点が異なる )。<br />

• コール・ゲートを介したfar ジャンプ。<br />

• タスク ・ スイッチ。 Itanium ベース・システム環境では、IA-32_Intercept(Gate) が発<br />

生する。<br />

JMP 命令を使用して特権レベル間の far ジャンプを実行することはできない。<br />

コール・ゲートを介してfar ジャンプを実行するときは、 ターゲット ・オペランドに<br />

よって指定されたセグメント ・セレクタによってコール・ゲートが識別される。 ( ター<br />

ゲッ ト ・オペランドのオフセッ ト部は無視される。 ) そこで、 プロセッサはコール・ゲー<br />

ト・ディスクリプタで指定されたコード・セグメントにジャンプし、ゲートで指定され<br />

たオ フ セ ッ ト か ら命令の実行を開始する。 ス タ ッ ク ・ ス イ ッ チは行われない。 こ の場合<br />

もやはり、 ターゲッ ト ・ オペランドは、 コール・ゲー トおよび命令のfar アドレスをポ<br />

インタ (ptr16:16 または ptr16:32) で直接に も、 メモ リ ・ ロ ケ ーシ ョ ン (m16:16 または<br />

m16:32) で間接的に も指定でき る。<br />

JMP 命令でタ ス ク ・ ス イ ッ チを実行する のは、 コ ール ・ ゲー ト を介したジ ャ ンプを実行<br />

す る のに似てい る。 タ ス ク ・ ス イ ッ チの場合は、 タ ー ゲ ッ ト ・ オペラ ン ド は、 切 り 替え<br />

先タスクへのタスク ・ ゲー ト のセグメン ト ・ セレ クタを指定する ( ターゲッ ト ・ オペラ<br />

ンドのオフセット部は無視される)。 このタスク ・ ゲー ト は、 切り替え先タスクの TSS<br />

を指す。 この TSS には、 そのタスクのコード ・セグメント、 データ・セグメント、 ス<br />

タ ッ ク ・ セグメン ト のセグメン ト ・ セレ ク タ と、 ターゲッ ト 命令への命令ポインタが格<br />

納されている。 JMP 命令には、 タ ス ク ・ ゲ ー ト を通 ら ずに、 TSS に直接ジ ャ ンプする命<br />

令形式 も ある。 タ ス ク ・ ス イ ッ チの仕組みの詳細は、 『IA-32 インテル ® アーキテク<br />

チャ ・ ソフ ト ウェア・ディベロッパーズ・マニュアル、 下巻』 第13 章を参照のこ と。<br />

すべての分岐は、 ジ ャンプ ・ ア ド レスやキャ ッ シュの可否に関係な く 、 1 つまたは 2 つ<br />

のキャ ッシュ ・ ラインのコ ー ド ・ フ ェ ッチに変換される。<br />

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

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!