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.

REP/REPE/REPZ/REPNE /REPNZ—Repeat String Operation Prefix ( 続き )<br />

これらすべてのリ ピー ト ・ プリ フ ィ ッ クスは、 ECX レジスタのカウントが0 にデク リ メ<br />

ン ト される ま で、 関連す る命令を繰 り 返 さ せる ( 下記の表を参照 )。 REPE、 REPNE、<br />

REPZ、 REPNZ プリフィックスも、 各リピート後にZF フラグの状態をチェックし、 ZF フ<br />

ラ グが指定された状態になければ リ ピ ー ト ・ ル ー プを終了す る。 両方の終了条件がテ ス<br />

トされるときは、 リピート終了の原因は、 JECXZ 命令での ECX レジスタのテスト、 また<br />

は JZ、 JNZ、 JNE 命令での ZF フラグのテストによって判断することができる。<br />

表 1-17. リピート条件<br />

リピート・プリフィックス 終了条件 1 終了条件 2<br />

REP ECX=0 なし<br />

REPE/REPZ ECX=0 ZF=0<br />

REPNE/REPNZ ECX=0 ZF=1<br />

REPE/REPZ および REPNE/REPNZ プリフィックスを使用すると、 CMPS 命令 と SCAS 命<br />

令の両方が、 それ ら が行 う 比較の結果に従 っ て ZF フ ラ グに影響を与え る ので、 ZF フラ<br />

グを初期化する必要はない。<br />

リ ピ ー ト ・ ス ト リ ン グ操作は、 例外 ま たは割 り 込みに よ っ て中断 さ れる こ と があ る。 こ<br />

う な って も、 レ ジス タの状態は、 例外ハン ド ラ ま たは割り込みハン ド ラか ら の リ タ ー ン<br />

時にス ト リ ング操作を再開でき る よ う に保たれる。 ソ ース ・ レジスタおよびデステ ィ<br />

ネーション ・ レジスタは操作する次のストリング要素を指し、 EIP レジスタはスト リン<br />

グ命令を指し、 ECX レ ジスタ は命令の最後の正常な リ ピ ー ト の後に保持していた値を も<br />

つ。 こ れに よ っ て、 シ ス テ ムの割 り 込み応答時間に影響を与えずに、 長いス ト リ ン グ操<br />

作を進められる。<br />

REPNE プリフィックスの付いたCMPS 命令 ま たは SCAS 命令の実行中にペー ジ ・ フ ォ ル<br />

ト が発生した場合、 EFLAGS の値は命令の実行前の状態に リ ス ト アされないこ と がある。<br />

SCAS および CMPS は EFLAGS を入力として使用しないので、 プロセッサはページ ・<br />

フォルト ・ハンドラの後に命令を再開することができる。<br />

REP INS 命令お よ び REP OUTS 命令は、 注意して使用しなければな ら ない。 こ れ ら の命<br />

令が実行する レ ー ト を処理できない I/O ポー ト もある。<br />

REP STOS 命令は、 大き い メ モ リ ・ ブ ロ ッ ク を初期化す る最 も 速い方法であ る。<br />

操作<br />

IF AddressSize = 16<br />

THEN<br />

use CX for CountReg;<br />

ELSE (* AddressSize = 32 *)<br />

use ECX for CountReg;<br />

FI;<br />

WHILE CountReg ≠ 0<br />

DO<br />

service pending interrupts (if any);<br />

execute associated string instruction;<br />

CountReg ← CountReg - 1;<br />

IF CountReg = 0<br />

THEN exit WHILE loop<br />

FI;<br />

IF (repeat prefix is REPZ or REPE) AND (ZF=0)<br />

OR (repeat prefix is REPNZ or REPNE) AND (ZF=1)<br />

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

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!