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

あなたは

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

アセンブラ入門内検索

目次
アセンブラトップ
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-4.フラグ

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



  3-3.練習問題の解答をフラグとALレジスタの変化をあわせて見てみる。
		                   CF PF ZF SF OF AL
	mov	si,offset DATA1    ?  ?  ?  ?  ?  ??
	mov	di,offset DATA2    ?  ?  ?  ?  ?  ??
	mov	bx,ANS             ?  ?  ?  ?  ?  ??

	mov	al,[si]            ?  ?  ?  ?  ?  FF
	add	al,[di]            1  1  1  0  0  00
	mov	[bx],al            1  1  1  0  0  00

	mov	al,[si+1]          1  1  1  0  0  FF
	adc	al,[di+1]          1  1  1  0  0  00
	mov	[bx+1],al          1  1  1  0  0  00

	mov	al,[si+2]          1  1  1  0  0  FF
	adc	al,[di+2]          1  1  1  0  0  00
	mov	[bx+2],al          1  1  1  0  0  00

	mov	al,[si+3]          1  1  1  0  0  EF
	adc	al,[di+3]          0  1  0  1  0  F0
	mov	[bx+3],al          0  1  0  1  0  F0 

	mov	ax,4c00h
	int	21h

DATA1	dd	0EFFFFFFFh
DATA2	dd	1
ANS	dd	?
「?」は前の結果が残っているため、不明
最初の「ADD」命令以前
フラグの変わらない「MOV」命令なので、フラグの値は変化しない。

最初の「ADD」命令
  1. FFh+01h=100hはALレジスタに収まりきれず、桁があがっているので、CF(キャリーフラグ)は「1」になる
  2. FFh+01h=100h→AL=00hなので、PF(パリティフラグ)は「1」になる
  3. ALレジスタは00hが入るので、ZF(ゼロフラグ)は「1」になる
  4. ALレジスタは00hで、最上位ビットは「0」。したがってSF(サインフラグ)は「0」になる
  5. 符号なし演算の場合はオーバーフローになったが、この加算を符号あり演算と解釈すると、-1+1=0でオーバーフローしていないので、OF(オーバーフローフラグ)は「0」になる

次の「ADC」命令以前
フラグの変わらない「MOV」命令なので、フラグの値は変化しない。

次の「ADC」命令
FFh+00h+CY(1)=100hなので、最初の「ADD」命令と同じ結果になる。

次の「ADC」命令以前
フラグの変わらない「MOV」命令なので、フラグの値は変化しない。

次の「ADC」命令
FFh+00h+CY(1)=100hなので、最初の「ADD」命令と同じ結果になる。

最後の「ADC」命令以前
フラグの変わらない「MOV」命令なので、フラグの値は変化しない。

最後の「ADC」命令
  1. EFh+00h+CY(1)=F0hなので、桁あふれしていないのでCFは「0」になる
  2. AL=F0hとなるので、2進数で考えると「11110000」。1の数は4つ。したがってPFは「0」になる
  3. AL≠0なので、ZFは「0」になる
  4. AL=F0hとなるので、2進数で考えると「11110000」で、最上位ビットは「1」。したがってSF(サインフラグ)は「1」になる
  5. 符号付き演算としてみてもオーバーフローしない。したがってOFは「0」になる


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