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


7-6.STOS? ( Store String ) :ストリングの設定

STOSB ( Store String Bytes ) :ストリングのバイト設定

STOSB

   動作:ALを[ES:DI]に書き込み、
          DF=1の時は、DIを1減らす。
          DF=0の時は、DIを1増やす。
  影響を受けるフラグ:なし

STOSW ( Store String Words ) :ストリングのワード設定

STOSW

   動作:AXを[ES:DI]に書き込み、
          DF=1の時は、DIを2減らす。
          DF=0の時は、DIを2増やす。
  影響を受けるフラグ:なし

STOSD ( Store String Doublewords ) :ストリングのダブルワード設定

STOSD	(80386以上)

   動作:EAXを[ES:DI]に書き込み、
          DF=1の時は、DIを4減らす。
          DF=0の時は、DIを4増やす。
  影響を受けるフラグ:なし
  上のニーモニック表の通り、「STOS?」命令はレジスタの内容をメモリーに書き込む。 DIが増えるか減るかは、「MOSV?」と同様、DF(フラグ)によって変わる。

  この命令は前ページの「LODS?」、「LOOP」と組み合わせて、例えば大文字に変換するといった細工や大文字かなど比較を行いながらのコピーに使われたり、文字列を大文字にしながらコピーするとか、ある文字が出てくるまでコピーすると言った用途に使われる。

  別の用途としては、メモリーの初期化に使われる。例えば、ALに初期値を格納し、 CXに初期化したいメモリーのバイト数を入れ、「REP」命令と組み合わせて、メモリーを初期値(AL)で埋めたりする。


ストリングの設定 【86】
【書式】
 STOS  {ES:}dest
 dest   = mem   source = AL/AX          = EAX   【386】
【フラグ】
OF DF IF TF SF ZF ?? AF ?? PF ?? CF
【動作】
32ビット属性のセグメントの場合、以下のDIはEDIに、CXはECXになります。
source からdest にデータを設定します。
dest で示される ES:[DI]source
DIをオペランドのサイズに従って増減します。 DFが0ならば増加し。DFが1ならば減少します。
DIDI ± オペランドのサイズ
【備考】
  • オペランドは省略できず、source のレジスタはdest と同じサイズとなります。
  • オペランドが指定されていてもdest のアドレスは常にES:[DI]で指定されます。
  • 繰り返し用のREPプレフィックス命令が使用できます。 CXには繰り返し回数を設定します。
【用例】
STOSD命令を使用した例を以下に示します。
 
LEA  EDI,DATBF  ;
データバッファ先頭ポインタを設定
MOV  ECX,1024/4 ;
データバイト数/4(ダブルワード数)を設定
XOR  EAX,EAX    ;
0を設定
REP  STOSD      ;
バッファ内1024バイトを0で初期化

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