PR

 マイコンの素人である私,木村記者がプログラムを作成できるまでに成長する姿をお伝えする「マイコンなんてこわくない」(このような企画に至った経緯はこちら。別ウインドウが立ち上がります)。今回の2回目は前回に引き続き,マイコンに関する基礎的な知識を習得するために受講した,セミナー「マイコン入門」の様子をお届けする。

 8月2日,今日も快晴。昨日は初日だったのでスーツの上着を着用して望んだのだが,受講者にはラフな格好の人もいたので,今日は上着なし。さらには,初日を無事に乗り切ったこともあって,服装だけでなく何とはなしに足取りも軽い。

 今日からは,「あまり教材の順番にはとらわれずに,必要に応じてニモニックやSFRの使い方などを教えていきます」と講師の湯浅一志氏。最終目的は,明日の終了時点である程度のプログラムが作成できるようになること。そのために,重要となる知識から順番に教えてくれるという。

新しいニモニックが続々と

 最初は昨日のMOVに続くニモニックの勉強。CPUの中でデータを一時保存するレジスタの数値を増減するためのニモニックを習う。レジスタの数値を+1するニモニックは「INC」と書き,-1するニモニックは「DEC」と書く。MOVのときとは違って,
  INC C
のように,レジスタ名をその後に記述するだけ。記述方法としては,MOVよりも簡単だ。

 そして,この命令とともに学んだのは,レジスタの一つである「フラグ・レジスタ(PSW)」。フラグとは旗のこと。演算している際に特別なことがあった時には,ここに旗をたてて(旗をたてると言っても「0」を「1」にするのだが),情報を伝える。ここで言う特別なこととは,例えば「桁上がりがあった」とか「ゼロになった」などである。加算や減算などをしていくと,PSWの情報を次の演算に頻繁に使用していくようになるそうだ。

 続いて,さらに新しいニモニックが登場。今度は分岐命令。通常,CPUはメモリに収納された順番にプログラムを実行していくもの。ところが,途中で任意の位置のプログラムに飛びたい場合が出てくる。このときに利用するのが分岐命令。たとえば,プログラムの途中に
  BR !1000H
という命令が書いてあれば,01000H番地のアドレスに飛びなさい,ということになる。

 こう説明すると簡単なような気がするが,この分岐命令には“無条件分岐命令”と“条件付分岐命令”の2種類がある。上に記載したニモニック「BR」は無条件分岐命令。その命令を読めば無条件で指定したアドレスに飛ぶ。ところが条件付分岐命令になると,プログラムを飛ばすときに条件が付くようになり,またその条件も複数登場する。例えば,前述したPSWの中にあるゼロ・フラグが0なら分岐する,あるいは1なら分岐する,また汎用レジスタのAの特定のビットが0なら分岐する,あるいは1なら分岐するなど。そして,それぞれに異なるニモニックが存在する。

 さらに新しいニモニックの勉強。今度は計算をするニモニックの「ADD」と「SUB」。ADDは足し算,SUBは引き算で,たとえば
  ADD A, B
と書けば,AレジスタとBレジスタのデータを加算して,結果をAレジスタに格納しなさいとなる。

 このように,講義はいきなり一気にヒートアップしてきた。新しいニモニックはどんどん登場するし,レジスタの種類も多くなる。一つひとつに時間を掛けることができれば理解できるような気もするのだが,後で考えると十分に講義に追いつけていたのはここまで。どんどん講義に対しての理解が怪しくなってくる。

図1●いよいよ登場した実習用のCPUボード
図1●いよいよ登場した実習用のCPUボード (画像のクリックで拡大)

 ここまできたところで,パソコンにスイッチを入れる。実際にプログラムの入力をしていくわけだ。今日から利用するソフトは,実際の開発者も利用する開発ツール「PM+」になる。練習で作成するプログラムの動作を実習用のCPUボードで確認するためだ(図1)。いよいよ本格的な実習となってきたようだ。

 ここで,開発ツールの使い方の説明を教わる。と同時に筆者にとってみれば,プログラムという人が見ても分かるように表現されたものが,マイコンで実行されるようになるまでの流れを知ることになる。まず,自分が書いたプログラムに対して,ビルドという操作を行う。ビルドによって,プログラムをマイコンが分かるような機械語に翻訳し,実行ファイルを作成する。次にディバッガと呼ばれるソフトを新たに起動。ディバッガでは実際の実行ファイルを動かしてみて,プログラムの不具合を突きとめて,それを修正する。このため,ディバッガではプログラムをとめて,レジスタの内容やメモリの内容を確認できるようになっている。

 この開発ツールを利用して例題を一つ解く。例題は,メモリに収納されている16バイト分のデータを別のメモリへと転送するもの。ここでは,まだ実習用のCPUボードは利用しない。筆者が作成したプログラムは,MOVを繰り返し利用して,地道に一つずつのデータを転送していくプログラム。もちろんこれでもかまわない。ただし,講師が回答例として上げたのは,分岐処理を使ってプログラムを繰り返し実行させるものだった(図2)。

図2●分岐処理を使ったプログラム

 回答例を出されて,1行ずつのソースコードについて説明を受ければ納得はできる。しかし,これを最初から自分で作成しろと言われても,現状では無理。実際に例題を自分の力で解くために,最初に一定の時間を与えられるのだが,前述したようにMOVを使った方法でしか思いつかない。分岐命令を使用したり,レジスタにメモリ・アドレスを転送したりなどは,まだまだ時間が必要となるようだ。(次のページへ