24531904_j

24531904_j 24531904_j

16.02.2013 Aufrufe

LEAVE—High Level Procedure Exit オペコード 命令 説明 C9 LEAVE SP を BP に設定し、次に BP をポップする。 C9 LEAVE ESP を EBP に設定し、次に EBP をポップする。 説明 先行す る ENTER 命令で移行したプ ロ シ ー ジ ャ ( またはネスト されたプロシージャのグ ループ ) か ら の リ タ ー ン を実行す る。 こ の命令は、 EBP レジスタ内のフレーム ・ ポイン タをスタック ・ ポインタ ・ レジスタ (ESP) に コ ピ ー し、 プ ロ シ ー ジ ャ が ロ ー カ ル変数用 に使用していたスタ ッ ク空間を解放する。 次に、 古いフレーム ・ ポインタ (ENTER 命令 を発行するコール元プロシージャのフレーム ・ ポインタ ) がスタ ッ クから EBP レジスタ にポップされ、 コール元プロシージャのスタッ ク ・ フレームがリス トアされる。 通常は、 LEAVE 命令の後に RET 命令を実行して、 プログラム制御をコール元プロシー ジャに返し、 コール先プロシージャによってスタック上にプッシュされていた引数をす べて削除する。 操作 IF StackAddressSize = 32 THEN ESP ← EBP; ELSE (* StackAddressSize = 16*) SP ← BP; FI; IF OperandSize = 32 THEN EBP ← Pop(); ELSE (* OperandSize = 16*) BP ← Pop(); FI; 影響を受けるフラグ なし。 追加の Itanium ベース・システム環境例外 Itanium アーキテクチャ ・ レジスタ ・ フォルト Itanium アーキテクチャ ・ メモリ ・ フォル ト NaT レ ジ ス タ参照アボ ー ト 。 VHPT データ ・ フォル ト、 ネス ト された TLB フォルト、 データ TLB フォルト、 代替データTLB フォルト、 デー タ・ページ不在フォルト、 データNaT ページ参照アボー ト、 データ・キー・ ミス・フォルト、 データ・キー許可 フォルト、 データ・アクセス権フォルト、 データ・アクセ ス・ビット ・フォルト、 データ・ダーティ ・ビット ・フォ ルト。 保護モード例外 #SS(0) EBP レ ジ ス タ の指示先の ロ ケ ー シ ョ ンが現在のス タ ッ ク ・ セグ メ ン ト の範囲内にない場合。 3:630 第 3 巻 : IA-32 基本命令リファレンス

LEAVE—High Level Procedure Exit ( 続き ) 実アドレス・モード例外 #GP EBP レ ジ ス タ の指示先の ロ ケ ー シ ョ ンが 0 ~ 0FFFFH の実 効ア ド レ ス空間の範囲外の場合。 仮想 8086 モード例外 #GP(0) EBP レ ジ ス タ の指示先の ロ ケ ー シ ョ ンが 0 ~ 0FFFFH の実 効ア ド レ ス空間の範囲外の場合。 第 3 巻 : IA-32 基本命令リファレンス 3:631

LEAVE—High Level Procedure Exit<br />

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

C9 LEAVE SP を BP に設定し、次に BP をポップする。<br />

C9 LEAVE ESP を EBP に設定し、次に EBP をポップする。<br />

説明<br />

先行す る ENTER 命令で移行したプ ロ シ ー ジ ャ ( またはネスト されたプロシージャのグ<br />

ループ ) か ら の リ タ ー ン を実行す る。 こ の命令は、 EBP レジスタ内のフレーム ・ ポイン<br />

タをスタック ・ ポインタ ・ レジスタ (ESP) に コ ピ ー し、 プ ロ シ ー ジ ャ が ロ ー カ ル変数用<br />

に使用していたスタ ッ ク空間を解放する。 次に、 古いフレーム ・ ポインタ (ENTER 命令<br />

を発行するコール元プロシージャのフレーム ・ ポインタ ) がスタ ッ クから EBP レジスタ<br />

にポップされ、 コール元プロシージャのスタッ ク ・ フレームがリス トアされる。<br />

通常は、 LEAVE 命令の後に RET 命令を実行して、 プログラム制御をコール元プロシー<br />

ジャに返し、 コール先プロシージャによってスタック上にプッシュされていた引数をす<br />

べて削除する。<br />

操作<br />

IF StackAddressSize = 32<br />

THEN<br />

ESP ← EBP;<br />

ELSE (* StackAddressSize = 16*)<br />

SP ← BP;<br />

FI;<br />

IF OperandSize = 32<br />

THEN<br />

EBP ← Pop();<br />

ELSE (* OperandSize = 16*)<br />

BP ← Pop();<br />

FI;<br />

影響を受けるフラグ<br />

なし。<br />

追加の Itanium ベース・システム環境例外<br />

Itanium アーキテクチャ ・<br />

レジスタ ・ フォルト<br />

Itanium アーキテクチャ ・<br />

メモリ ・ フォル ト<br />

NaT レ ジ ス タ参照アボ ー ト 。<br />

VHPT データ ・ フォル ト、 ネス ト された TLB フォルト、<br />

データ TLB フォルト、 代替データTLB フォルト、 デー<br />

タ・ページ不在フォルト、 データNaT ページ参照アボー<br />

ト、 データ・キー・ ミス・フォルト、 データ・キー許可<br />

フォルト、 データ・アクセス権フォルト、 データ・アクセ<br />

ス・ビット ・フォルト、 データ・ダーティ ・ビット ・フォ<br />

ルト。<br />

保護モード例外<br />

#SS(0) EBP レ ジ ス タ の指示先の ロ ケ ー シ ョ ンが現在のス タ ッ ク ・<br />

セグ メ ン ト の範囲内にない場合。<br />

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

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!