1 [例題3]マスク処理と条件分岐

教科書のList5-3のプログラムを例にして、マスク処理と条件分岐について説明する。

1.1 マスク処理

1.1.1 教科書の例

データの特定のビットパターンを選び出すことをマスキングという。このビットパターン を選び出すために、演算を行うわけであるが、その演算のためのデータをマスクと言う。 例えば、教科書のList5-3の場合、2行目のAND GR0,MASKがマスキング(マスク処理) であって、ラベルAのデータがマスクである。このマスクを用いたマスキングにより、 GR0特定のビットパターンを選び出している。

ここでは、次のようにしている。 $ (1452)_{10}=(0000010110101100)_2$なので

\begin{displaymath}\begin{array}{ll} & \texttt{0000010110101100} \ \texttt{AND}...
...000000000001} \ \hline & \texttt{0000000000000000} \end{array}\end{displaymath}    

としている。仮に、ラベルAの値が$ (1453)_3$としたら、

\begin{displaymath}\begin{array}{ll} & \texttt{0000010110101101} \ \texttt{AND}...
...000000000001} \ \hline & \texttt{0000000000000001} \end{array}\end{displaymath}    

となる。この例から分かるように、論理積(AND)の結果は、ラベルAの最下位ビッ トに依存していることが分かる。最下位ビットの1の有無は、フラグレジスタのZFを 見れば分かる。演算の結果、全てのビットがゼロになれば、ZF=1となる。

データの調べたいビットは、マスクにより指定している。このように、調べたいビットを しているデータマスクという。要するに、お面(マスク)で顔の一部を隠すように、興味の ないビットを隠しているのである。

1.1.2 特定のビットパターンのマスクの方法

先の例でも分かるが、ANDを使ったマスク処理の場合、マスクは興味の対象のビット を1、どうでも良いビットを0にする。そうすると、興味のないビットは全てゼロとなり、 重要なビットは変更されない。先の場合、ある特定の1ビットの状態が分かれば良かった ので、マスク処理後、直ぐにフラグレジスタZFを見た。もう少し複雑な場合は、こ れではだめである。特定のビットパターンを調べたい場合である。例えば、

$\displaystyle \texttt{$\ast\ast\ast\ast$1010$\ast\ast\ast\ast$1100}$    

のような場合である。ここで、$ \ast$は0でも1でもよく、興味の対象外のビットである。

このようなビットパターンを調べる場合、2つの手順が必要であろう。

  1. まず興味の対象のビットを取り出す必要がある。興味の対象外のビットは、 0または1に設定する。
  2. 興味の対象のビットがある特定のビットパターンになっているか、否か調べる。
これを、ANDORを使って調べる。

まずは、ANDを使う方法である。調べたいデータはGR0に格納されているとする。

	                 ;これ以前は省略
	   AND  GR0,A    ;マスク
	   CPL  GR0,B    ;ビットパターンの比較
	                 ;このあたりも省略
	A  DC   #0F0F    ;マスク
	B  DC   #0A0C    ;定数の定義

同じ様なことが、ブール代数の双対の原理2により、ORを使ってもできる。そのほかにも、いろい ろな方法が考えられる。

1.2 プログラムの構造

プログラムの構造については、先週説明した。ほとんど同じである。以下について、答え よ。

1.3 フローチャート

このプログラムのフローチャートを図1に示す。。
図 1: 教科書のList5-3のプログラムのフローチャート。
\includegraphics[keepaspectratio, scale=1.0]{flow_chart/REI5-3.eps}

ホームページ: Yamamoto's laboratory
著者: 山本昌志
Yamamoto Masashi
平成16年12月24日


no counter