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

あなたは

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

アセンブラ入門内検索

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


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



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

トップ-> アセンブラ入門:3章.算術演算-> 3-2.足し算

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



  ところで、「AL=90h」の時「ADD AL,90h」とした場合はどうなるでしょうか? 90h+90h=120hで、ALレジスタには収まりません。「AX=90h」の時に、「ADD AX,90h」 とすれば、AX=120hで収まります。収まりきれない場合は、「AL=20h」となり、オー バーフローした桁は無視されます。

  「ADD」命令ではレジスタの長さ(80286以下のCPUは16bit、80386以上では32bit)しか 計算できないのでは、僕のお小遣いを計算する分には十分ですが、銀行や大企業の場合は 困ります。私たちは日常の計算の中で1桁の足し算は暗算でできますが、桁が多くなると、 筆算をします。

  このように私たちは繰り上がりという 概念を用いて計算しています。
なんとか、この繰り上がりを用いてもっと大きい 数を計算できないか、これを解決するのが、「ADC」命令です。

  実は上の例では、ALレジスタは20hになるが、桁上がりがあるとキャリーフラグという フラグが「1」に変化します。桁上がりがない場合にはキャリーフラグは「0」になります。

  「ADC」は基本的には「ADD」命令と同じであるが、このキャリーフラグが「0」であれば、 DEST←DEST+SRCを行い、キャリーフラグが「1」であれば、さらに1を足します。 つまり、1桁目を足す場合は「ADD」、2桁目より上を足す場合は「ADC」を用いることで、 32bit(80286以下では16bit)よりも桁の多い数の計算が可能となる。

ADC	DEST,SRC

    動作:DEST←DEST+SRC+CF
    影響を受けるフラグ:OF,SF,ZF,AF,CF,PF
    DEST:レジスタ、メモリー
    SRC :レジスタ、メモリー、即値(ただしメモリー、メモリーの組み合わせは除く)

例)
「ADD AX,BX」を8bitレジスタの足し算で書き換えると次のようになる。
	mov	ax,DATA1
	mov	bx,DATA2

	add	al,bl
	adc	ah,bh

	mov	ANS,ax


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