コンピュータの歴史について書いた本や図鑑で,大きな真空管式のコンピュータの前で,配線を変更している女性が写った写真を見かけたことはないだろうか? 当時はあの配線がプログラムだったのだ。違う結果を出したいときは配線を変更していた。現在では椅子(いす)に座ってマウスとキーボードだけで,プログラムを簡単に変更できるが,太いコードをつないで,プログラムを変更するのはかなりキツイ仕事だったのではないかと思う。おまけに真空管はすぐにダメになる。

 こんな面倒なことをしていられないので,メモリーにプログラムをロードして,実行できるストアド・プログラム方式が生まれた。これ以降,プログラムはどんどん複雑になっていったわけだが,原理的には現在のコンピュータも大変わりはしない。ちなみに,データベース・サーバーのストアド・プロシージャとストアド・プログラムとは関係がないので,誤解のないように。

 ストアド・プログラム方式の最初のプログラムはマシン語だった。結局,コンピュータを動かすのはオン,オフの2値の電気信号なのだが,それを2進数で,延々と0,1の羅列で入力するのは大変なので,束にして16進数で,例えば「A0F1E4・・・」のように打ち込むのがマシン語のイメージだ。

 この16進数の命令はコンピュータがそのまま実行できるので,コンピュータにとっては効率のよい言語であった。しかし,人間にとっては意味不明な文字列の連続に過ぎないわけで,言語とは呼べない。当時,マイコンにマシン語でプログラムを打ち込んでいた人を今風に言うと,完全なるオタクである。

 マシン語を人間に認識しやすい英語や記号に置き換えたニーモニックでプログラムを作成し,それをマシン語に変換するアセンブラが開発され,プログラミングは少しわかりやくなった。しかし,ニーモニック一個にマシン語が一個対応している状況では,プログラミングの効率アップは図れない。一つの命令で,複数のマシン語が生成されると便利である。そこで,アセンブラがマクロアセンブラにバージョンアップした。

 この後,FortranやC,COBOLなどのコンパイラやBasicインタープリタが普及し,プログミングやコンピュータが一部のエンジニアだけのものではなくなっていった。

 さて,MindStorms NXTのプログラムを作成する統合環境Bricx Command Center(BricxCC)を使うとNBC(Next Byte Code)で,アセンブラ・ライクなコーディングができる。そう思って前回,NBC_tutorial.pdfという英文のマニュアルの最初のサンプル・プログラムを打ち込んでみたのだが,以前,RCXのプログラムを作成していたNQCにそっくりなコードになってしまった。今回はアセンブラの香りを味わいたい。

 まず,変数を定義しているのだが,dseg segmentでデータ・セグメントを始めるところから,もうアセンブラの雰囲気がする。a,b,cの三つの変数をbyte型で定義している。thread mainからプログラムが開始される。aに10を代入し,a X 5をbに入れる。

 divでbの値を2で割り,bに入れる。addで1を加えた結果をmovでcに入れる。cの値は26になるはずだ。mul,div,add,movというコマンドの名前がアセンブラと同じだ。NumOutでLCDに計算結果を表示する。1番目の引数がX軸の位置,2番目の引数がY軸の位置を示す。

転送して実行すると,小さな字で26と表示された。

 次のプログラムは条件分岐だ。If elseなんて便利なものがないところがアセンブラ風である。aの値は10,bの値は5,Randomは乱数を発生する便利な命令だ。もちろん,アセンブラにはない。Random(c,2)とすると0か1がcに入る。次のbrcmpが条件分岐だ。cが0より大きい(GT)ならば,OutA:に飛ぶ。そうでなければ,bの値を表示して,無条件ジャンプ(jmp)でWaitOutに飛ぶ。

Randomが作った乱数によって,aもしくはbの値が表示される。

brcmpをbrtstに変更すると,最後の0を省略することができる。こんな風に省略できるところにも,アセンブラ風味を感じる。

つづく