• 宮城県立塩釜高等技術専門校  新妻 幹也

1.はじめに

3年ほど前の「技能と技術」1)に同じような実践報告をしましたが,それについては実際にそのプログラムを使っていただいた福井県の指導員の方から使用記を寄せていただきました。私も実際にそのプログラムを授業で使っていましたが,やはり実用に耐えて効果のあがるものとしていくためには,いくつかの不満点も出てきました。そこで今回,生徒からの意見なども取り入れ,まったく新しいCASLシミュレータを作りましたので紹介いたします。市販のシミュレータには不満を抱いていた方はぜひ使ってみていただきたいと思います。

2.TURBO-CASL

このソフトはアッセンブリ言語CASLをマスターするためのトータルトレーニングプログラムです。CASLは仮想のCPUのアッセンブリ言語です。ですから,実際にCASLの命令語を解釈して動いてくれるCPUは実在しないのです。しかし,勉強をするときに実際にプログラムを組んでそれを動かしてみることは,大いに学習効率を高めてくれます。それを実現してくれるのがシミュレータです。CASLのシミュレータはすでに多くのものが市販されていますし,フリーソフトなどにも多くのものがあります。今回紹介するものもその1つに加えてもらえればと思います。パソコンやワープロにも多くの種類があるようにCASLのシュミレータにもいろんなものがあってよいと思います。

3.3年前のCASLビジュアルシミュレータ

以前に発表したCASLビジュアルシミュレータでは,次の点で学習効率の悪いものとなっていました。

  1. ① ソースプログラムの入力とシミュレータの環境が別になっていたため,[入力→シミュレート→ディバッグ] の一連の作業が効率よく行えなかった。
  2. ② シミュレートの最中にトレースのスピードを変更できなかった。
  3. ③ 無限ループなどに入ったとき途中で止めることができなかった(STOPキーで強制的に止めるしかなかった)。
  4. ④ シミュレータ自体をBASIC言語で作ったためシミュレートのスピードが遅く,例えば,ひき算の繰り返しによるわり算などのプログラムをシミュレートしようとすると,シミュレートに1時間以上もかかることがあった。
  5. ⑤ マシン語のコードは生成せず,絶対番地の指定もできなかった。
  6. ⑥ ⑤の理由からアドレスにおかれるデータも完全なものではなかった(実際の命令コードなどはなかった)。
  7. ⑦ 何度も繰り返しシミュレートすることが面倒だった(その都度いちいちファイルから読まなくてはいけなかった)。
  8. ⑧ 許容されているソースプログラムの長さが60行程度だった(トレースできる行数)。
  9. ⑨ 命令語の意味を参照するような機能はなかった。

4.TURBO-CASLの特徴

さて,これらの点を解消して今回開発された「TURBO-CASL」の特徴は次の9つです。

① プログラム総合環境における学習

上の図のようにプログラム入力からアッセンブル,トレース,エラーの場合の修正などの一連の作業が,すべて1つの画面の中から行えます。これにより,学習の効率が向上します。

上の図
上の図

② レジスタ,フラグ,アドレス,スタックの状態確認

アッセンブリ言語の学習には欠かせない,レジスタ,フラグ,アドレス,スタックの状態をリアルタイムで確認できます。特に今回はその状態表示に工夫をし,初心者でもなじみやすいものにしました。

③ トレースモードとノントレースモード

トレースモードでは,実行中のプログラム部分とアドレスの両方にアクティブバーが点灯し,どの部分を実行しているのかがわかるようになっています。さらにプログラムの実行結果だけを即座に知りたいときには,ノントレースモードにすることにより瞬時(1秒以下)に結果を得ることもできます。

④ トレース速度のリアルタイム可変,一時停止,途中終了

作成したプログラムをトレースする場合に,スピードコントロールつまみによって,トレース中でも任意のスピードに調整できます。また,一時停止や途中終了もラジカセを操作するような感覚で実行できます。これによっても学習の効率が向上します。

⑤ エラーメッセージ機能

プログラム中にエラーがあった場合には,エラーがあった行の横にエラーメッセージが表示されるようになっています。これによりスピーディにエラーを確認でき,修正に入ることができます。

⑥ サウンドモード

このシュミレータには一見無意味とも思われる機能があります。それがサウンドモードです。これは,あらかじめCASLの命令語に対して音程とリズム(音長)を設定しておき,トレース中に画面上の[ラッパ]のマークをクリックすると,それぞれの命令に対応した音が出るというものです。これを使うと,例えばループ中などには同じようなフレーズが聞かれ,耳によってループしていることがすぐにわかります。なお,どの命令語に何の音程,音長を与えるかは総合メニュー画面の中から簡単に設定変更することができます。

⑦ CASL言語命令学習機能

CASLに使われる命令語の概要については,いつでもヘルプ機能によって学習することができます。

⑧ 時計機能

画面右上には常時アナログ時計が表示されています。これは,プログラムのやり過ぎによる健康への害を少しでも減らそうという配慮により設けました。プログラムをやりだすと,つい夢中になりすぎてしまうがんばりやさんのためのものです。

⑨ 許容されるプログラムの行数

約1000行程度まではOKです。

5.TURBO-CASLに必要なファイルと起動方法

このプログラムを動かすためには以下に示すファイルが必要です。

  • CASL.EXE  CASLシミュレータメインプログラム
  • CM.EXE  メニュー画面プログラム
  • CASL.PIC  表示画像データ
  • MACHI.PIC  起動待ち画像データ
  • CASL.ENV  ソースプログラムのドライブやディレクトリを記憶したファイル
  • CASLBEEP.DAT  音を設定しているファイル
  • MOUSE.SYS  MS-DOSに付属のものでマウスを使うためのドライバ
  • PRINT.SYS  MS-DOSに付属のものでプリンタを使うためのドライバ
  • CONFIG.SYS  以下に書いてある内容を含むCONFIG.SYSファイルが起動時に必要です。
  • DEVICE=MOUSE.SYS
  • DEVICE=PRINT.SYS

その他[TEX]ディレクトリに納めてある命令語の説明文書ファイル。起動はCM[RETURN]キーです。

このプログラムは大きく次の4つの機能から選択して実行します。

  • (1) CASLシミュレータ
  • (2) CASL命令語の学習
  • (3) 環境ファイルの更新
  • (4) イメージ音の設定

(1) CASLシミュレータ

これは,CASLの仕様に基づいて書かれたCASLプログラムを実際に動かしてみる機能です。作成したプログラムを動かすことで,エラーを発見したり,より効率のよいプログラムを記述するための試行ができます。

この中では,プログラム記述から,アッセンブル,トレース,プログラムの保存,プリントアウト(印刷),さらにはCASL命令語の学習までもがすべて行えます。

(2) CASL命令語の学習

これは,CASL命令語のおおまかな内容を学習するためのものです。ちょっと命令を忘れたときなどに便利です。ここ以外にもシミュレータの環境でも[HELP]キーを押すことで同じ機能が使えます。

(3) 環境ファイルの更新

これは,CASLソースプログラムを読むドライブディレクトリを指定するものです。

(4) イメージ音の設定

これは,シミュレータでCASLプログラムをトレースした際,命令語に対応した音を出すときの音程,音長を設定するものです。

5.1 シミュレータの使い方

シミュレータを起動すると次のような画面になります。

次のような画面
次のような画面

■一般的な使い方

シミュレータではまず,シミュレートするためのプログラムがなくてはいけません。これを入力する方法は2通りあります。

  1. 1-このシミュレータの環境で記述する。
  2. 2-市販のエディタを使って記述する。

このシミュレータの環境で入力する場合は,マウスのカーソルを画面左側のプログラムエリアにもっていき左クリックします。そうすると文字入力用のカーソルが出ますので,あとは普通に入力してください。エディタそのものの機能は市販の専用エディタと比較すればとうてい及びませんが,比較的短いCASLプログラムを入力するには不自由はないと思います。

このエディタの主な機能を次に示します。

  • [TAB] CASLのオペランドの長さに対応した位置に設定されていますので,これを使うとスピーディに入力ができます。
  • [SHIFT]+[TAB] バックタブ機能です。
  • [INS] インサートモードとオーバストライクモードの切り替えです。インサートモード中に,[RETURN]キーを押すと,行が挿入されます。
  • [DEL] カーソル上の文字を消去します。インサートモードでは右の文字が左に寄ります。
  • [SHIFT]+[DEL] カーソル上の行を削除します。
  • [BS] カーソル左の文字を消去します。インサートモードでは右の文字が左に寄ります。
  • [ROLL UP] 10行単位で行が送られます。
  • [ROLL DOWN]10行単位で行が戻ります。
  • [CTRL]+[HOME CLR] エディット画面の内容をすべて消去します。
  • [ESC] 2回押すとエディットを終了します。

市販のエディタでプログラムを入力する場合は,そのエディタのマニュアルに従ってください。その際入力で注意する点は次の2点です。

① [TAB]キーを使う
[TAB]キーを使って入力したプログラムもシミュレータ上で正しく解釈はします。ただし,そのプログラムをシミュレータ環境上のエディタでは正しくエディットできません。もし,他のエディタで編集したプログラムをシミュレータ環境上でもエディットするのであれば,他のエディタでは[TAB]キーを使わないで入力することをお勧めします。もし,[TAB]を使っているのであれば,それは,リプレース機能などで,スペースに変換しなおしたほうがよいでしょう。
② 1行内文字数の制限
このシミュレータ環境上のエディタは最大31文字しか入力できませんので,他のエディタでそれを超える文字数のプログラムを読み込むときは,あらかじめそれ以内の文字数になおしてから使ってください。

また,このシミュレータでは,記述できる(解釈できる)プログラムの行数を1000行程度に制限していますが,このことが問題になることはまずないと思います。同様にアドレスは0000番地から2000(10進)番地程度までしか確保していませんので,絶対番地を指定するときは注意が必要です。

スタックは別エリアに256程度確保しています。CASLを学習するうえではこれらのことも特に問題にはならないと思います。

■プログラムのアッセンブル

CASLソースプログラムは,実行前にアッセンブルしなくてはいけません。

画面右下にある[Assemble]をマウスで左クリックしてください。この作業によって,ソースプログラムは機械語(マシン語)コードに変換されます。

このシミュレータでも実際にこの変換を行い,独自に設定したコードを生成します(コード仕様は特に決められていない)。もし,プログラムにエラーがあれば,それを即座に示してくれます。エラーがない場合は,画面中央にレジスタやメモリ(アドレス)の内容を表示するグラフィックスが示されます。

この状態はとりあえず文法上のミスはなく,トレース(プログラムの実行)が行えることを示しています。

エラーがある場合はそれを表示します。1画面に収まりきらないプログラムで,現在表示されているプログラム以外の行にエラーがある場合には,[ROLL UP]でプログラムをスクロールすることによって確認できます。

この際エラーを検知した行には赤いバーが出ますが,この位置は必ずしも正確でない場合もありますから,その前後を確認してください。

そのあと修正に移る場合には[ESC]キーを押し,さらにマウスでプログラムエリアをクリックします。

■プログラムのシミュレート(実行)

アッセンブルでエラーがないときは,即プログラムを実行することができます。

画面右下にある[Shimulate]をマウスで左クリックしてください。そうすると,プログラムやメモリ(アドレス)にオレンジ色のアクティブバーが点灯し,その行を実行中であることを示してくれます。この際のシミュレートスピードは,実行中でも画面右下のスピードボリュームをマウスで動かすことでリアルタイムに変更できます。

また,シミュレート前に[Trace ON]をマウス左クリックすると[Trace OFF]となり,シミュレートを実行してもアクティブバーは点灯しなくなり,1秒以下で実行は終了し結果が出ます。これは,とにかく結果を早く知りたいときに使うと便利です。トレースをOFFにしても,プログラムはきちんと実行して結果を出しています。

次にその他,シミュレートの状態を変更するいくつかの機能の説明をします。

① [HEX],[DEC] 切り替え
画面右下にある[HEX]をマウスで左クリックすると,16進表示と10進表示を切り替えられます。これは,シミュレート実行中でも可能です。
② [□] シミュレートストップボタン
これはシミュレートを途中で終わらせたいときに押します。
③ [∥] シミュレートポーズボタン
これはシミュレートを一時的に中断したいときに押します。もう一度押すと再び再開します。
④ [ラッパ] イメージ音の出力
これは,総合メニュー画面であらかじめ設定しておいたそれぞれの命令語に対応する音を鳴らすボタンです。シミュレート途中でもon,offできます。
⑤ アドレス表示位置変更
シミュレート中に,画面に表示されていない部分のソーステキストは自動的にスクロールしてアクティブバーが点灯しますが,アドレスの表示は自動スクロールしません。これは,アドレスに書き込まれる値を監視するときには,かえって固定しておいたほうが都合がよいからです。ですから,アドレスの表示位置は任意に変えることができます。
アドレスの上下にある▼▲をマウス左クリックしてください。これはシミュレート実行中でも行えます。
⑥ レジスタの初期化,メモリの初期化
シミュレートの前にレジスタ,メモリを初期化するかどうかを選択することができます。これをするには,画面上のレジスタの表示ボックスをマウスで左クリックします。そうすると下に選択ウインドーが出ますので,マウス左クリックでon,offしてください(押すごとにon,offを繰り返す)。
⑦ 実行ステップ数確認機能
シミュレート終了後にマウスでレジスタボックスのPCの部分をクリックすると,黄色でそのプログラムのスタートから終了までに行ったステップ数を表示します。これにより,より効率のよいプログラムかどうかの1つの指針にすることができます(同様の処理をするプログラムで必ずしもステップ数の少ないものがよいとも限らない)。

■その他の機能

① 命令語学習機能
[HELP]キーを押すとCASLの命令語を学習することができます。知りたい命令語をマウスでクリックしてください。この画面から抜けるときは,マウスを右クリックするか,[ESC]キーを押してください。
② 時計機能
画面右上には常に時計が表示されています。ここをクリックすると4種類ある時計から好きなものを選択することができます。
③ プログラムのLOAD,CONECT,SAVE
これは,プログラムを読み込んだり,保存したりする機能です。CONECTは現在画面上にあるプログラムの終わりに付加してロードします。
LOADの際は画面に保存してあるプログラムが表示されますので,マウスで選択してください。
LOAD後は即アッセンブル作業が行われますので,改めて,アッセンブルする必要はありません。キャンセルしたい場含は,マウスを右クリックします。
④ シミュレータの終了
シミュレータを終了したいときは,[SHIFT]+[ESC]キーを押してください。総合メニュー画面に戻ります。

5.2 CASL命令語の学習

これは,シミュレータの環境から呼び出せるものと同じです。操作も同じです。

5.3 環境ファイルの更新

操作は,画面に出ている指示に従って行ってください。

5.4 イメージ音の設定

ここでは,それぞれの命令語に対して音程,音長を設定します。操作の仕方は,「←→↑↓」キーによって命令語を選択し,音程は,テンキーの[8][2]で上げ下げします。また,音長はテンキーの[4][6」で設定します。

すべての設定が終了したら,[ESC]キーを押します。ファイルに書き込むかどうかを聞いてきますので,指示に従って入力してください。

5.5 サンプルプログラムの説明

フロッピィディスクには次のサンプルプログラムが収められています。

  • POLISH.AS 逆ポーランド記法変換(例:A+B*C→ABC*+,(A+B*C-D)/(F-G)→ABC*+D-FG-/)
  • ゼロサプレス.AS 入力した8桁の数の先頭の0を_で置き替えて出力する(例:00258014→__258014)
  • KAKEZAN.AS シフト命令を使ったかけ算プログラム
  • WARIZAN.AS シフト命令を使ったわり算プログラム
  • PASCAL.AS パスカルの三角形を求める
  • SOSU.AS 素数を求める
  • SORT.AS 昇順に数を並べ替える
  • ITOA.AS 数値を文字に変換する
  • BIT誤り.AS エラーのあるプログラム(エラー状態の確認サンプル)

6.おわりに

実際の授業でこのシミュレータを使った感想は,3年前に発表したものよりも生徒からの評判はよくなっています。以前のものは,前述したように実際の授業における使い勝手の点でかなりマイナス部分があったからです。今回のものでは,一連の作業を1つの画面の中ですべてできるようにした点で,以前のものと比べて学習効率が飛躍的に向上しました。

多くの情報処理訓練現場で試用していただければ幸いです(なお,このソフトはマニュアルと一緒に無料で配布しています)。

〈参考文献〉

  1. 1)「技能と技術」誌,Vol.26/6/1991.
ページのトップに戻る