あなたは
人目のアセンブラの受講生です。 |
アセンブラ入門内検索
アセンブラトップ
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の世界〜
このページの先頭に戻る
トップページに戻る
このページの先頭に戻る
トップページに戻る
|
練習問題へ :
トップへ :
次ページへ
論理演算
-
論理演算とは算術演算と異なり、真か偽か2つの状態から一定の規則に従って結果を
得る計算方法である。2つの状態ということは、真と偽を2進数の1と0に置き換えて
考えれば、2進数の1桁で表すことができる。一方、レジスタやメモリーの最小単位は
8bit(1byte)であるので、8bit(1byte)で、真か偽かの状態を8個記憶することができる。
したがってこれから紹介する命令では最小単位が8bitであるから、8桁の2進数になおして
計算することになる。
- 5-1.AND命令
AND命令は「論理積」を表す。論理積とは「両方とも1ならば結果は1、それ以外の場合の
結果は0」である。(0×0=0, 0×1=0, 1×0=0, 1×1=1であるから各ビットの積と考える
こともできる)
これを表にすると下のようになる。(このような表を真理値表という)
DEST | SRC | 結果(DEST) |
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
AND DEST,SRC
動作:DEST←DEST and SRC
影響を受けるフラグ:OF=0,CF=0,ZF,SF,PF,AF
DEST:レジスタ、メモリー
SRC :レジスタ、メモリー、即値 (ただしメモリー、メモリーの組み合わせは除く)
|
フラグはCF,OFがクリアされる。AFは不定。結果が0になった場合ZF=1、それ以外はZF=0。
上位1bitがSFに反映される。PFは結果に応じてセットされる。
用途-
- ・0でのマスク
-
マスクとは、いらないビットを0または1で埋めることで、必要な部分を抜き出すことをいう。
0でのマスクとは、必要のない桁を0にすることをいう。
例えば4bit目と5bit目以外を0でマスクしたい場合には、次のようにする。
al=78h(=11110000b)の場合、
11110000 |
00011000 |
|
00010000 |
|
となり、4bit目と5bit目以外は0になり、4bit目と5bit目は元のデータのままに
なっていることがわかる。
- ・0かどうかのチェック
-
同じレジスタ同士の論理積をとると0かどうかのチェックをすることができる。
例えば、AL=78h(=11110000b)のとき、
11110000 |
11110000 |
|
11110000 |
|
AL=0(=00000000b)の時は
00000000 |
00000000 |
|
00000000 |
|
したがってどちらの場合もレジスタの値は変わらない。しかし下の例ではゼロフラグが
セットされる。したがって「CMP AL,0」と(レジスタの値とゼロフラグは)同じ結果が
得られる。レジスタが8bit,32bitの時は「AND」命令で0かどうかのチェックをするメリットは
ないが、16bitレジスタの場合は命令のサイズが1バイト小さくなり、さらにCPUが80286以下の
CPUでは若干処理速度も速くなる。ただし、なぜだかわからないが、0かどうかのチェックには
「OR」命令を用いるのが一般的である。
- ・正か負かのチェック
-
上の例と同様に正か負かのチェックをしたい場合は「AND」命令を用いることができ、
同様のメリットが生まれる。
練習問題へ :
トップへ :
次ページへ
|