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.

CALL ─ Call Procedure<br />

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

E8 cw CALL rel16 near コール、次の命令とディスプレースメント相対。<br />

E8 cd CALL rel32 near コール、次の命令とディスプレースメント相対。<br />

FF /2 CALL r/m16 near コール、r/m16 間接。<br />

FF /2 CALL r/m32 near コール、r/m32 間接。<br />

9A cd CALL ptr16:16 far コール、所定のフルポインタへ。<br />

9A cp CALL ptr16:32 far コール、所定のフルポインタへ。<br />

FF /3 CALL m16:16 far コール、r/m16 でアドレスを指定。<br />

FF /3 CALL m16:32 far コール、r/m32 でアドレスを指定。<br />

説明<br />

プロシージャ ・ リンク情報をプロシージャ ・ スタックにセーブし、 デスティネーション<br />

( ターゲッ ト ) オペラン ド で指定されるプロシージ ャ ( コール先プロシージャ ) にジャン<br />

プする。 ターゲッ ト ・ オペランドは、 コール先プロシージャの最初の命令のアドレスを 指定す る。 こ のオペラ ン ド に は、 即値、 汎用レ ジ ス タ、 ま たは メ モ リ ・ ロ ケ ー シ ョ ン を<br />

使用で き る。<br />

この命令を使用して、 以下の異なる 4 つのタイプのコ ールを実行でき る。<br />

• near コール - 現在の コ ー ド ・ セグ メ ン ト ( 現在の CS レジスタの指示先のセグメント )<br />

内にあるプロシージャへのコール。 セグメント内コールともいう。<br />

• far コール - 現在の コ ー ド ・ セグ メ ン ト と は異なるセグ メ ン ト 内にある プ ロ シ ー ジ ャ<br />

へのコ ール。 セグメン ト 間コ ール と もいう。<br />

• 特権レ ベル間 far コール - 現在実行中のプログラムまたはプロシージャの特権レベル<br />

とは異なる特権レベルのセグメント内にあるプロシージャへのコール。 Itanium ベー<br />

ス・システム環境では、IA-32_Intercept(Gate) が発生する。<br />

• タスク ・ スイッチ - 異なる タス ク内にあるプロシー ジ ャ へのコ ール。 Itanium ベー<br />

ス・システム環境では、IA-32_Intercept(Gate) が発生する。<br />

上記の最後の 2 つのコ ール ・ タイプ ( 特権レベル間 コ ー ル と タ ス ク ・ ス イ ッ チ ) は、 保<br />

護モー ド でのみ実行でき る。 CALL 命令に よ る タ ス ク ・ ス イ ッ チの実行の詳細は、<br />

『IA-32 インテル ® アーキテクチャ ・ ソフ ト ウェア ・ ディベロッパーズ ・ マニュアル、 下<br />

巻』 第 6 章を参照のこ と。<br />

near コールを実行する と きは、 プロセッサは、 EIP レジスタの値(CALL 命令の次の命令<br />

のア ド レ ス を内容 と す る ) を ( 後で リ タ ー ン命令のポ イ ン タ と して使用す る ために ) プロ<br />

シージャ・スタックにプッシュする。 次に、 プロセッサは、 ターゲット ・オペランドで<br />

指定される、 コール先プロシージャのアドレスにジャンプする。 ターゲット ・オペラン<br />

ドは、 コード ・セグメント内の絶対アドレス( すなわち、 コ ー ド ・ セグメン ト のベース<br />

からのオフセッ ト ) か、 相対オ フ セ ッ ト (CALL の次の命令を指示先 と する、 EIP レジス<br />

タ内の命令ポ イ ン タ の現在値に相対的な符号付き デ ィ スプ レ ー ス メ ン ト ) かを指定す る。<br />

絶対ア ド レ ス は、 レ ジ ス タ内で直接指定される か、 ま たは メ モ リ ・ ロ ケ ー シ ョ ン内で間<br />

接的に指定 さ れる (r/m16 または r/m32 ターゲッ ト ・オペランド形式)。 スタッ ク ・ ポイ<br />

ンタ (ESP) をベース ・ レジスタ と して使用して、 絶対アド レスに間接的にアクセスする<br />

場合は、 使用 さ れる ベー ス値は、 命令が実行 さ れる前の ESP の値である。 相対オフセ ッ<br />

ト (rel16 または rel32) は、 一般的に、 アセンブ リ ・ コ ー ド では ラ ベル と して指定 さ れる<br />

が、 マシン ・ コ ー ド ・ レベルでは符号付きの 16 ビットまたは32 ビット即値としてコー<br />

ド化され、 この値が命令ポインタに加算される。<br />

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

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!