Subsections

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

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

5.1 マスク処理

5.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となる.

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

5.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    ;定数の定義

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

5.2 プログラムの構造

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

5.3 フローチャート

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

ホームページ: Yamamoto's laboratory
著者: 山本昌志
Yamamoto Masashi
2006-02-08


no counter