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.

PUSHF/PUSHFD—Push EFLAGS Register onto the Stack<br />

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

9C PUSHF EFLAGS をプッシュする。<br />

9C PUSHFD EFLAGS をプッシュする。<br />

説明<br />

( 現在のオペラ ン ド ・ サイズ属性が 32 である場合は ) スタック ・ ポインタを 4 デク リメ<br />

ントし、 EFLAGS レ ジ ス タ の内容全体を ス タ ッ ク にプ ッ シ ュ する。 ( オペラン ド ・ サイ<br />

ズ属性が 16 である場合は ) スタック ・ ポインタを 2 デク リ メント し、 EFLAGS レジスタ<br />

の下位 16 ビッ トをスタックにプッシュする。 ( これらの命令は、 POPF/POPFD 命令の逆<br />

の操作を実行す る。 )<br />

EFLAGS レ ジ ス タ全体を ス タ ッ ク に コ ピ ー す る と き は、 VM および RF フラグと呼ばれ<br />

るビッ ト 16 および 17 はコピーされない。 その代わりに、 これらのフラグの値は、 ス<br />

タックにストアされるEFLAGS イメージでクリアされる。<br />

PUSHF ( フラグをプッシュ ) ニーモニッ クおよび PUSHFD ( ダブルのフラグをプ ッ シュ )<br />

ニーモニッ クは、 同じオペコー ドを参照する。 PUSHF 命令は、 オペラ ン ド ・ サイ ズ属性<br />

が 16 であ る と き に使用す る ための も のであ り 、 PUSHFD 命令は、 オペラ ン ド ・ サイ ズ属<br />

性が 32 である と きに使用するためのものである。 一部のアセンブラは、 PUSHF が使用<br />

される と きはオペラン ド ・ サイズを 16 に、 PUSHFD が使用される と き は 32 に強制する。<br />

他のアセンブラ は、 これら のニーモニ ッ ク をシ ノ ニム (PUSHF/PUSHFD) として取り扱<br />

い、 オペラ ン ド ・ サ イ ズ属性の現在の設定を使用して、 使用されてい る ニ ー モニ ッ ク に<br />

関係な く 、 ス タ ッ ク にプ ッ シ ュ す る値のサイ ズを決定で き る。<br />

仮想 8086 モー ドで I/O 特権レベル (IOPL) が 3 より小さい場合、 PUSHF/PUSHFD 命令は<br />

一般保護例外 (#GP) を発生させる。 IOPL は、 特権レベル 0 で実行した と き にのみ変更さ<br />

れる。 割り込みフラグは、 IOPL と同等またはそれ以上の特権レベルで実行したときにの<br />

み変更される ( 実ア ド レ ス ・ モー ド は、 特権レベル 0 に相当する )。 不十分な特権レ ベル<br />

で PUSHF/PUSHFD 命令を実行した場合は、 例外は発生しないが、 特権ビ ッ ト は変わら<br />

ない。<br />

実ア ド レス ・ モー ド では、 PUSHF/PUSHFD 命令が実行される と き に、 ESP レジスタまた<br />

は SP レジスタが1、 3、 または 5 であ る場合、 プ ロ セ ッ サは ス タ ッ ク ・ スペー スの不足<br />

によってシャッ ト ・ダウンする。 この状態を示す例外は生成されない。<br />

操作<br />

IF VM=0 (* Not in Virtual-8086 Mode *)<br />

THEN<br />

IF OperandSize = 32<br />

THEN<br />

push(EFLAGS AND 00FCFFFFH);<br />

(* VM and RF EFLAG bits are cleared in image stored on the stack*)<br />

ELSE<br />

push(EFLAGS); (* Lower 16 bits only *)<br />

FI;<br />

ELSE (* In Virtual-8086 Mode *)<br />

IF IOPL=3<br />

THEN<br />

IF OperandSize = 32<br />

THEN push(EFLAGS AND 0FCFFFFH);<br />

(* VM and RF EFLAGS bits are cleared in image stored on the stack*)<br />

ELSE push(EFLAGS); (* Lower 16 bits only *)<br />

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

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!