←前ページへ :  INDEX :  次ページへ→


7-7.SCAS? ( Scan String ) :ストリングの検索

SCASB ( Scan String Bytes ) :ストリングのバイト検索

SCASB

   動作:ALと[ES:DI]とを比較する
          DF=1の時は、DIを1減らす。
          DF=0の時は、DIを1増やす。
  影響を受けるフラグ:OF,SF,ZGF,AF,PF,CFが結果を反映する

SCASW ( Scan String Words ) :ストリングのワード検索

SCASW

   動作:AXと[ES:DI]とを比較する
          DF=1の時は、DIを2減らす。
          DF=0の時は、DIを2増やす。
  影響を受けるフラグ:OF,SF,ZGF,AF,PF,CFが結果を反映する

SCASD ( Scan String Doublewords ) :ストリングのダブルワード検索

SCASD	(80386以上)

   動作:EAXと[ES:DI]とを比較する
          DF=1の時は、DIを4減らす。
          DF=0の時は、DIを4増やす。
  影響を受けるフラグ:OF,SF,ZGF,AF,PF,CFが結果を反映する
  上のニーモニック表の通り、「SCAS?」命令はレジスタの内容とメモリーの内容を比較する。 DIが増えるか減るかは、「MOSV?」と同様、DF(フラグ)によって変わる。

  この命令は主に、次の用途に使われる。

  • 「REPNE(REPNZ)」と組み合わせ、AL(AX,EAX)と同じ文字を探す。
  • 「REPE(REPZ)」と組み合わせ、AL(AX,EAX)と違う文字を探す。
  ここで注意してほしいのは、同じ文字を探す場合、REPを抜けたときのDIは1つずれて、同じ値の次の値を指している。逆に違う文字を探す場合も、REPを抜けたときのDIは1つずれていることに注意してください。

ストリングの検索 【86】
【書式】
 SCAS  {ES:}dest
 dest   = mem   source = AL/AX/EAX
【フラグ】
OF DF IF TF SF ZF ?? AF ?? PF ?? CF
【動作】
32ビット属性のセグメントの場合、以下のDIはEDIに、CXはECXになります。
source からdest を減算し、結果に従ってフラグを設定します。
sourcedest で示される ES:[DI]
DIをオペランドのサイズに従って増減します。DFが0ならば増加し、DFが1ならば減少します。
DIDI ± オペランドのサイズ
【備考】
  • オペランドは省略できず、sourcedest は同じサイズでなければいけません。
  • オペランドが指定されていても、dest は常にES:[DI]で指定されます。
  • sourcedest のサイズから自動的に設定されます。
  • 減算結果が格納されないことを除きSUB命令と動作は同じです。 但し、sourcedest が逆になっています。
  • 繰り返し用のプレフィックス命令が使用できます。 CXに最大比較回数を設定して、REPNE/REPNZを用いれば最初の一致を、REPE/REPZを用いれば最初の不一致を検出できます。繰り返し終了後にCXが0ならば検出できなかったことを意味し、そうでなければインデックス(DI)は最初の一致または不一致の次の位置を示しています。

←前ページへ :  INDEX :  次ページへ→