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

あなたは

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

アセンブラ入門内検索

目次
アセンブラトップ
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の世界〜


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



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

トップ-> アセンブラ入門:6章.シフト演算-> 6-1.シフト

←練習問題へ :  トップへ :  次ページへ→



シフト演算



  シフト演算とは論理演算と同じようにビットを操作する命令である。具体的には、 2進数の各ビットをずらすことである。ローテート命令は循環(回転)させる命令である。

6-1. シフト
  シフト命令は上で説明したように、ビットをずらす命令である。左にずらすか、右に ずらすか、ずらすデータが符号付き整数か、符号なし整数(もしくは数値以外のデータ)かによって 4種類のソフト命令が用意されている。

  まず、符号なし整数(もしくは数値以外のデータ)のシフト命令について説明する。 これらは論理シフトと言い、ずらしてはみ出す1桁はキャリーフラグ(CF)に格納される。 足りなくなる1桁には無条件に0が入る(下図参照)。

SHR	DEST,Count
SHL	DEST,Count

   動作:別途解説
  影響を受けるフラグ:OF(Count=1の場合のみ結果を反映),
                        SF,ZF,PF(結果を反映),
                        CF:別途解説
    DEST  :レジスタ、メモリー
    Count :CL、即値(8bit以下)
  シフト命令はCount(CLまたは8bitの符号なし整数で表せる範囲の即値)で指定した分だけ、 上述のシフトを行う。CFには、はみ出した桁が格納されるが、Countの値がDESTのサイズを 越えた場合(「SHR AX,17」など)は、CFの値は未定である。上のニーモニックにも示したが、 OFはCount=1nの時のみ結果を反映するが、Count=1の時もOFを見て何かするようなことは あまりない。

  次に、符号付き整数のシフトを説明する。符号付き整数は、上位1bitが符号を表している。 この符号を壊さないようにシフトさせる(下図参照)。この理由は後述する。

  上図のようにSHLとSALは同じ働きをする。しかしSARはSALと異なり、上位1bitには0が入る のではなく、ずらす前の値がそのまま残る。

SAR	DEST,Count
SAL	DEST,Count

   動作:別途解説
  影響を受けるフラグ:OF(Count=1の場合のみ結果を反映),
                        SF,ZF,PF(結果を反映),
                        CF:別途解説
    DEST  :レジスタ、メモリー
    Count :CL、即値(8bit以下)

  さて、シフトを行うとデータはどうなるのだろうか?まず、左にずらした時(SAL, SHL)の例を示す。


  このように左にずらすと、その値は2倍になる。

  次に、8bitの128を右にずらすことを考える。8bitの128は符号付き整数で考えると -128である。この両者をSHRとSARでシフトさせると下図のようになる。


  右にずらす場合、SHRとSARでこのような差がでる。もし符号付き整数の-128を 「SHR」で右にずらすと、-128→+64となる。これを「SAR」でずらすと-128→-64と なり、1/2になる。このようにその値が符号付き整数の場合は「SAR」を使い、 それ以外の場合は「SHR」を使うように、使い分ける必要がある。


←練習問題へ :  トップへ :  次ページへ→