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.

SCAS/SCASB/SCASW/SCASD—Scan String<br />

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

AE SCAS ES:(E)DI AL を ES:(E)DI のバイトと比較し、ステータス・フラグを設定する。<br />

AF SCAS ES:DI AX を ES:DI のワードと比較し、ステータス・フラグを設定する。<br />

AF SCAS ES:EDI EAX を ES:EDI のダブルワードと比較し、ステータス・フラグを設<br />

定する。<br />

AE SCASB AL を ES:(E)DI のバイトと比較し、ステータス・フラグを設定する。<br />

AF SCASW AX を ES:DI のワードと比較し、ステータス・フラグを設定する。<br />

AF SCASD EAX を ES:EDI のダブルワードと比較し、ステータス・フラグを設<br />

定する。<br />

説明<br />

ソース ・オペランドで指定されたバイト、 ワード、 またはダブルワードを、 それぞれ<br />

AL、 AX、 または EAX レジスタの値と比較し、 結果に従ってEFLAGS レジスタのス<br />

テータス ・ フラグを設定する。 ソース ・ オペランドは、 アドレス ES:EDI のメモリ ・ ロ<br />

ケーションを指定する ( オペラン ド ・ サイズ属性が 16 の場合は、 DI レジスタがソース ・<br />

イ ンデ ッ ク ス ・ レ ジ ス タ と して使用 さ れる )。 ES セグメン ト は、 セグメン ト ・ オーバラ<br />

イド ・プリフィックスでオーバライドできない。<br />

SCASB、 SCASW、 SCASD ニーモニッ クは、 それぞれ SCAS 命令のバイ ト 版、 ワ ー ド 版、<br />

ダブルワー ド版のシノニムである。 これらのニーモニッ クは使い方が簡単であるが、 タ<br />

イプ ・ チェ ッ クやセグメント ・ チェ ッ クの機能を持たない (SCAS 命令では、 命令の中で<br />

"ES:EDI" を明示的に指定しなければならない )<br />

比較後、 EDI レジスタは EFLAGS レジスタ内のDF フ ラ グの設定に従っ て自動的に イ ン<br />

クリメントまたはデクリメントされる。 (DF フラグが0 である場合は、 EDI レジスタは<br />

インク リ メン ト される。 DF フラグが1 である場合は、 EDI レジスタはデクリメント され<br />

る。 ) EDI レ ジ ス タ は、 バイ ト 操作の場合は 1、 ワー ド操作の場合は 2、 ダブルワー ド操<br />

作の場合は 4、 それぞれインク リ メン ト またはデク リ メン ト される。<br />

SCAS、 SCASB、 SCASW、 SCASD 命令は、 前に REP プリフィックスを付けると、 ECX<br />

バイ ト、 ワー ド、 またはダブルワー ドのブロ ッ ク比較を行う こ とができる。 しかし通常<br />

は、 こ れ ら の命令は、 次の比較が行われる前にス テ ー タ ス ・ フ ラ グの設定に基づいてあ<br />

る処置を行うループ構造体で使用される こ との方が多い。 REP プ リ フ ィ ッ ク スの説明に<br />

ついては、 3:713 ページの 「REP/REPE/REPZ/REPNE/REPNZ—Repeat String Operation<br />

Prefix」 を参照のこ と。<br />

操作<br />

IF (byte cmparison)<br />

THEN<br />

temp ← AL − SRC;<br />

SetStatusFlags(temp);<br />

THEN IF DF = 0<br />

THEN (E)DI ← 1;<br />

ELSE (E)DI ← -1;<br />

FI;<br />

ELSE IF (word comparison)<br />

THEN<br />

temp ← AX − SRC;<br />

SetStatusFlags(temp)<br />

THEN IF DF = 0<br />

THEN DI ← 2;<br />

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

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!