16.02.2013 Aufrufe

24531904_j

24531904_j

24531904_j

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

SAL/SAR/SHL/SHR—Shift ( 続き )<br />

説明<br />

第 1 オペラン ド ( デステ ィ ネーシ ョ ン ・ オペラン ド ) のビッ ト を第 2 オペラン ド ( カウン<br />

ト・オペランド) に指定されたビッ ト数だけ左または右にシフ ト する。 デステ ィ ネー<br />

シ ョ ン ・ オペラ ン ド の境界を超えてシ フ ト さ れる ビ ッ ト は、 ま ず CF フラグにシフト さ<br />

れ、 次に捨てられる。 シ フ ト 操作の最後では、 CF フラグには、 デスティネーション・オ<br />

ペラン ドから最後にシフ ト されたビッ トが含まれる。<br />

デスティネーション ・ オペランドには、 レジスタまたはメモリ ・ ロケーションを使用で<br />

きる。 カウント ・ オペランドには、 即値またはレジスタ CL を使用でき る。 カウン ト は、<br />

5 ビットにマスクされ、 0 から 31 までのカウント範囲に制限される。 1 のカウン ト に対<br />

しては、 特別なオペコー ド ・ エンコーディ ングが備えられている。<br />

左への算術シ フ ト (SAL) 命令お よ び左への論理シ フ ト (SHL) 命令は、 同じ操作を実行し<br />

する。 すなわち、 デスティネーション ・ オペランドのビッ ト を左 ( 上位ビ ッ ト ・ ロ ケ ー<br />

ションの方向) にシフトする。 シフト ・カウントごとに、 デスティネーション・オペラ<br />

ン ド の最上位ビ ッ ト が CF フラグにシフト され、 最下位ビットはクリアされる。 右への算術シ フ ト (SAR) 命令お よ び右への論理シ フ ト (SHR) 命令は、 デステ ィ ネ ー シ ョ<br />

ン・オペランドのビットを右( 下位ビ ッ ト ・ ロ ケ ー シ ョ ンの方向 ) にシフ トする。 シフ<br />

ト ・ カ ウ ン ト ご と に、 デス テ ィ ネ ー シ ョ ン ・ オペラ ン ド の最下位ビ ッ ト が CF フラグに<br />

シ フ ト さ れ、 最上位ビ ッ ト は、 命令タ イ プに応じ てセ ッ ト ま たは ク リ ア さ れる。 SHR 命<br />

令は、 最上位ビ ッ ト を ク リ アする。 SAR 命令は、 デス テ ィ ネ ー シ ョ ン ・ オペラ ン ド の元<br />

の値の符号 ( 最上位ビ ッ ト ) に相当す る よ う に最上位ビ ッ ト をセ ッ ト ま たは ク リ アす る。<br />

実際上、 SAR 命令は、 空のビ ッ ト 位置のシフ ト された値をシフ ト されていない値の符号<br />

で埋める。<br />

SAR 命令お よ び SHR 命令を使用して、 それぞれデス テ ィ ネ ー シ ョ ン ・ オペラ ン ド に 2<br />

の累乗によ る符号付き または符号なしの除算を行える。 例えば、 SAR 命令を使用して符<br />

号付き整数を 1 ビッ ト右にシフトするのは、 値を2 で割る こ と になる。<br />

SAR 命令を使用して除算演算を実行しても、 IDIV 命令 と 同じ結果は生成 さ れない。<br />

IDIV 命令の商はゼ ロ方向に丸め られるのに対し、 SAR 命令の 「商」 は負の無限大方向に<br />

丸められる。 こ の違いは、 負の数に対してだけ明白である。 例えば、 IDIV 命令を使用し<br />

て -9 を 4 で除算する と、 結果は -2 であ り 、 剰余は -1 である。 SAR 命令を使用して -9 を<br />

右に 2 ビ ッ ト だけ シ フ ト す る と 、 結果は -3 であり、 「剰余」 は +3 である。 ただし、 SAR<br />

命令は、 剰余の最上位ビ ッ ト だけ を (CF フラグに) ストアする。<br />

OF フラグは、 1 ビ ッ ト ・ シフ ト の場合だけに影響を受ける。 左シフ ト では、 結果の最上<br />

位ビ ッ ト が CF フラグと同じである ( すなわち、 元のオペラ ン ド の最上位 2 ビッ トが同じ<br />

である ) 場合は、 OF フラグは 0 にク リ アされ、 そ う でない場合は 1 にセッ ト される。<br />

SAR 命令では、 OF フラグはすべての1ビッ ト ・シフトでクリアされる。 SHR 命令では、<br />

OF フ ラ グは元のオペラ ン ド の最上位ビ ッ ト に設定 される。<br />

操作<br />

tempCOUNT ← COUNT;<br />

tempDEST ← DEST;<br />

WHILE (tempCOUNT ≠ 0)<br />

DO<br />

IF instruction is SAL or SHL<br />

THEN<br />

CF ← MSB(DEST);<br />

ELSE (* instruction is SAR or SHR *)<br />

CF ← LSB(DEST);<br />

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

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!