教科書のList5-3のプログラムを例にして、マスク処理と条件分岐について説明する。
データの特定のビットパターンを選び出すことをマスキングという。このビットパターン
を選び出すために、演算を行うわけであるが、その演算のためのデータをマスクと言う。
例えば、教科書のList5-3の場合、2行目の
AND GR0,MASKがマスキング(マスク処理)
であって、ラベル
Aのデータがマスクである。このマスクを用いたマスキングにより、
GR0特定のビットパターンを選び出している。
ここでは、次のようにしている。
なので
としている。仮に、ラベル
Aの値が
としたら、
となる。この例から分かるように、論理積(
AND)の結果は、ラベル
Aの最下位ビッ
トに依存していることが分かる。最下位ビットの1の有無は、フラグレジスタの
ZFを
見れば分かる。演算の結果、全てのビットがゼロになれば、
ZF=1となる。
データの調べたいビットは、マスクにより指定している。このように、調べたいビットを
しているデータマスクという。要するに、お面(マスク)で顔の一部を隠すように、興味の
ないビットを隠しているのである。
先の例でも分かるが、
ANDを使ったマスク処理の場合、マスクは興味の対象のビット
を1、どうでも良いビットを0にする。そうすると、興味のないビットは全てゼロとなり、
重要なビットは変更されない。先の場合、ある特定の1ビットの状態が分かれば良かった
ので、マスク処理後、直ぐにフラグレジスタ
ZFを見た。もう少し複雑な場合は、こ
れではだめである。特定のビットパターンを調べたい場合である。例えば、
のような場合である。ここで、
は0でも1でもよく、興味の対象外のビットである。
このようなビットパターンを調べる場合、2つの手順が必要であろう。
- まず興味の対象のビットを取り出す必要がある。興味の対象外のビットは、
0または1に設定する。
- 興味の対象のビットがある特定のビットパターンになっているか、否か調べる。
これを、
ANDと
ORを使って調べる。
まずは、ANDを使う方法である。調べたいデータはGR0に格納されているとする。
;これ以前は省略
AND GR0,A ;マスク
CPL GR0,B ;ビットパターンの比較
;このあたりも省略
A DC #0F0F ;マスク
B DC #0A0C ;定数の定義
同じ様なことが、ブール代数の双対の原理2により、ORを使ってもできる。そのほかにも、いろい
ろな方法が考えられる。
プログラムの構造については、先週説明した。ほとんど同じである。以下について、答え
よ。
- メインルーチンとデータ領域の行番号を答えよ。
- ラベルと命令コード、オペランド、コメント文はどれか?
このプログラムのフローチャートを図
1に示す。。
図 1:
教科書のList5-3のプログラムのフローチャート。
|
ホームページ:
Yamamoto's laboratory著者:
山本昌志
Yamamoto Masashi
平成16年12月24日