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


7-5.LODS? ( Load String ) :ストリングの取得

LODSB ( Load String Bytes ) :ストリングのバイト取得

LODSB

   動作:[DS:SI]の内容1バイトをALに読み込み、
          DF=1の時は、SIを1減らす。
          DF=0の時は、SIを1増やす。
  影響を受けるフラグ:なし

LODSW ( Load String Words ) :ストリングのワード取得

LODSW

   動作:[DS:SI]の内容2バイトをAXに読み込み、
          DF=1の時は、SIを2減らす。
          DF=0の時は、SIを2増やす。
  影響を受けるフラグ:なし

LODSD ( Load String Doublewords ) :ストリングのダブルワード取得

LODSD	(80386以上)

   動作:[DS:SI]の内容4バイトをEAXに読み込み、
          DF=1の時は、SIを4減らす。
          DF=0の時は、SIを4増やす。
  影響を受けるフラグ:なし
  上のニーモニック表の通り、「LODS?」命令はメモリーの内容をレジスタに読み込む。 SIが増えるか減るかは、「MOSV?」と同様、DF(フラグ)によって変わる。この命令は、読み込んだ値を細工して(例えば大文字に変換したり)使ったり、比較して(例えば大文字かなど)使うことが多いので、「REP」命令] と組み合わせて使うことはほとんどない。どちらかと言えば、細工や比較した後に、「STOS?」で格納して、「LOOP」命令で繰り返すことが多い。例えば、文字列を大文字にしながらコピーするとか、ある文字が出てくるまでコピーすると言った用途に使われる。

ストリングの取得 【86】
【書式】
 LODS  {segreg:}source
 dest   = AL/AX/EAX    source = mem
【フラグ】
OF DF IF TF SF ZF ?? AF ?? PF ?? CF
【動作】
32ビット属性のセグメントの場合、以下のSIはESIに、CXはECXになります。
source からdest にデータを取得します。
destsource で示される DS:[SI]
SIをオペランドのサイズに従って増減します。 DFが0ならば増加し、DFが1ならば減少します。
SISI ± オペランドのサイズ
【備考】
  • オペランドは省略できず、sourcedest は同じサイズでなければいけません。
  • オペランドが指定されていてもセグメントを変更しない場合、source のアドレスは常にDS:[SI]で指定されます。 source はセグメントの変更が可能です。
  • 繰り返し用のREPプレフィックス命令が使用できます。 CXには繰り返し回数を設定します。
【用例】
 
      LEA    SI,MSGTBL ;
文字列ポインタを設定
;
MSG:  LODSB            ;
1バイトデータを取得
      OR     AL,AL     ;
終了子か検査
      JZ     MSG1      ;
終了子で分岐後復帰へ
;
      INT    29H       ;
CRT直接表示
      JMP    MSG       ;
終了子まで継続
;
MSG1: RET              ;
呼び出し元へ復帰

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