トップ->アセンブラ入門

あなたは

人目のアセンブラの受講生です。

アセンブラ入門内検索

目次
アセンブラトップ
0. はじめに

1. 基礎
   1. レジスタとは
   2. セグメントとは

2. MOV命令
   1. MOV命令
   2. コンパイル
   3. 即値の転送
   4. メモリーへの転送
   5. データ定義疑似命令
   6. 練習問題

3. 算術演算
   1. 符号なし演算と符号付き演算
   2. 足し算
   3. 練習問題
   4. フラグ
   5. 引き算
   6. かけ算
   7. わり算
   8. INC,DEC

4. 分岐
   1. 無条件分離
   2. 比較命令
   3. 条件分離
   4. 練習問題
   5. ループ
   6. サブルーチン
   7. スタックとは
   8. PUSH,POP
   9. 練習問題

5. 論理演算
   1. AND命令
   2. OR命令
   3. XOR命令
   4. NOT命令
   5. NEG命令
   6. TEST命令
   7. 練習問題

6. シフト演算
   1. シフト
   2. ローテート
   3. 練習問題1
   4. 練習問題2

7. ストリング命令
   1. ストリング命令とは
   2. MOVS?
   3. REP
   4. DFの設定
   5. LODS?
   6. STOS?
   7. SCAS?
   8. CMPS?
   9 .練習問題

8. 入出力
   1. 概要
   2. IN命令
   3. OUT命令
   4. INS,OUTS命令

9. その他
   1. LEA
   2. XCHG
   3. NOP

10. 割り込み
   1. 割り込みとは
   2. ソフトウェア割り込み
   3. ハードウェア割り込み
   4. 割り込みベクター
   5. 割り込み処理の作り方
   6. 練習問題

11. レジスタの型変換(キャスト)

12. 卒業試験
   1. 卒業試験
   2. 画像データの格納形式
   3. インラインアセンブラ
   4. ネガポジ反転
   5. 明るくする、暗くする
   6. グレースケール
   7. 二値化
   8. 上下反転、左右反転
   9. 4分割
   10. モザイク
   11. シャープ
   12. ぼかし
   13. エンボス
   14. ディザ拡散
   15. 鉛筆を置いてください

13. 終わりに

文字コード

アセンブラ 〜MS-DOSの世界〜


・ このページの先頭に戻る
・ トップページに戻る



・ このページの先頭に戻る
・ トップページに戻る

トップ-> アセンブラ入門:7章.ストリング命令-> 7-3.REP

←次ページへ :  トップへ :  次ページへ→



7-3.REP

  「MOVS?」命令だけでは1単位の転送しかできないため、ある領域の転送を行いたい 場合にはこの「REP」命令と組み合わせて使う。
例:REP MOVSB

   動作:[DS:SI]の内容1バイトを[ES:DI]に転送し、
          DF=1の時は、SI,DIを1減らす。
          DF=0の時は、SI,DIを1増やす。
          これをCX回繰り返す。
  影響を受けるフラグ:なし
  したがって、100バイトのメモリーの転送を行いたい場合は、CX=100の状態で、「REP MOVSB」 を実行すればよい。CXは何回繰り返すかであり、バイト数ではない 。したがって、CX=100の状態で「REP MOVSW」を実行すると200バイトの メモリーが転送される。またCX=0の時に「LOOP」を実行すると65536回 繰り返されたが、「REP」命令は1回も実行されない


例)
	mov	si,1000h
	mov	di,2000h	
	mov	cx,100
	rep	movsb
というプログラムを「DF=1」の時に実行すると、900h〜1000hの内容が1900h〜2000hにコピーされる。 (SI,DIが減るため)

  ところが同じプログラムを「DF=0」の時に実行すると、1000h〜1100hの内容が2000h〜2100hに コピーされる。(SI,DIが増えるため)

  DFの設定の仕方は次ページに譲るとして、「REP」の兄弟を 紹介する。「REPE(REPZ)」と「REPNE(REPNZ)」である。これは後述するストリング命令 「SCAS?」、「CMPS?」と組み合わせて 使う。「SCAS?」「CMPS?」は後述するように比較命令である。比較命令と言うことは お察しの通り、フラグが変化するのである。この「REPE(REPZ)」と「REPNE(REPNZ)」は ゼロフラグ(ZF)とCXの値を見て終了するか、繰り返すかを決める。どう決めるかは下表の 通りである。

繰り返しプリフィックス命令 終了条件 終了条件
REP CX=0 ZF=0(ただし、比較命令の時のみ)
REPE(REPZ) CX=0 ZF=0(ただし、比較命令の時のみ)
REPNE(REPNZ) CX=0 ZF=1(ただし、比較命令の時のみ)

  この表で、2つの終了条件はどちらかが成り立てば終了するものである。

  この表の通り、実は「REP」と「REPE(REPZ)」は同じものである。ただしストリング命令が 比較命令の場合は「REPE(REPZ)」を用い、転送命令の場合は「REP」を用いるのが一般的で ある。

  なお、これらの命令の直後にストリング命令がない場合は、無視されます。


←次ページへ :  トップへ :  次ページへ→