論 文
統合機械語教育システム
平川寛之 清弘智昭
(平成3年8月31日受理)
Integrated Development System for Machine Language Education
HiroyukiHIRAKAWA NoriakiKIYOHIRO Abstract This system was developed for education of machine language, which consist of four parts: screen editing a source program, simulation into practice, debugg輌ng a source program on a display screen and printing out a source program or executive list. There are the two visible components to this developing system:the pull down menu bar at the top and the command status line at the bottom. As the operation of this system is easy and visible by integrating those functions, students can learn the machine language without bothering complicated operation.
1.はじめに
機械語を理解するにはPASCAL, C等の高級言語 の様にそれぞれの処理系における文法を理解すれぽ良 いというものではなく,ハードウエアに対する理解が 不可欠である。現在までに本学科で使用されてきたシ ステムは,この点満足に足るものとは言えず,市販の システムは高機能過ぎて計算機に不慣れな学生には荷 が重い。 ここ数年の計算機の処理能力向上にともなって,以 前ほど機械語に対する依存度は高くなくなって来ては いるが,依然として広い分野で用いられており,また 計算機のアーキテクチャを語る際,機械語の知識は必 要不可欠な物となっている。この様な現状をふまえ, 本学の教育形態に合った形の機械語教育システムを開 発した。具体的な応用として本学科学部2年の計算機 工学への応用を検討している。 ’電子情報工学科,Department of Electrical Engineering& Computer Science 2.システムの設計指針 機械語教育を効果的に進めるには,座学も大切だが 実際にプログラムを組んで実行する事が大切である。 一般にこの様な要求に対してワンボード・マイコン等 のツールが販売されているが,表示装置がLEDであ る為,情報不足により命令実行時におけるCPUの動 作を総合的に捉える事は困難である。そこで対象とな るCPUの動作(メモリ/レジスタの変化等)を予め入 力されたソース・プログラムに従ってシミュレーショ ンしその結果をCRT画面上に表示するシステムがあ ると便利である。本学科ではこの要求に対してBASIC による簡単なシステムを開発し使用していたが対象 CPUが8080で古く実行できる命令の種類が少ない,常 に動作を監視できるのはレジスタのみである,全ての 処理をキーボードからのコマンド入力で行うため扱い ずらい,ソース・プログラムの入力をラインエディタ で行う為扱いずらい,処理が遅い等の問題点があった。 統合機械語教育システム(以下本システムという)は この様な問題点を解決するため以下に示す点について 特に留意しシステムを設計した。(1)ザイPグ社のZ80−CPU(及びそのセカンド ソース)の一部をのぞく全命令をサポートする。 (2)プログラムの編集,シミュレート,デバック, 印刷,保存機能を1つのシステムで実現する。 (3)標準的なZ80−CPUのアセンブラ言語と同等な プログラムが記述可能。 (4)シミュレーション時のメモリ/レジスタ等の動 作が画面上で同時に確認できる。またバス/制御 信号線の動作もモニタする事が可能である。 (5)印刷機能において,実験レポートの書式でソー ス・プログラム,シミュレーション結果の印刷が 可能とし,レポート等の管理を容易にする。 (6)プルダウン・メニューとウィンドを基本として 使いやすいユーザ・インターフェースを構築する。 (7)アルゴリズムを工夫する事で高速化を実現す る。 3.仕 様 3.1 編集機能 スクリーンエディタによりソース・プログラムの入 力/編集を行う。編集キーのアサインは以下の通り。 INS :挿入/上書きの切り替え。 DEL :カーソル以降一文字削除。 BS :カーソル直前の一文字削除。 矢印 :カーソルの移動。 RET :改行。 ESC,F10 :編集の終了。 ^R,ROLL−UP :ページスクロール(UP)。 ^C,ROLL−DOWN :ページスクロール (DOWN)。 注)AはCTRLキー TABの設定。 3.2 デバック機能 入力したプログラムのデバックを行うために以下の 機能を有する。 (1)ブレーク・ポイントの設定。 (2)任意レジスタに対する値の設定。 (3)任意アドレスのメモリに対する値の設定。 (4)任意1/Oポートに対する値の設定。 (5)任意スタックに対する値の書き込み。 3.3 シミュレート機能 入力したプログラムの実行(シミュレーション)を 行う。 (1)プログラム全体の実行。 (2)ステップ(行単位の)実行。 (3)任意行までの実行。 3.4 モニタ機能 シミュレーション実行時に各値の変化をモニタする 機能。 (1)CPUのレジスタの変化を表示。 (2)メモリの変化を表示。 ③ スタックの変化を表示。 (4)1/0ポートの変化を表示。 (5)CPUの制御信号線の表示。(RD,WR,φ, IORQ , MREQ,AB,DB,RFSH,M1)1) 3.5 ファイル管理機能 ソース・プログラムの管理機能,その他。 (1)作成ソース・プログラムの保存/呼出し。 (2)バックアップファイルの作成。 (3)DOSシエルの立ち上げ。 (4)システムの終了。 3.6 印刷機能 (1)ソース・プログラム全体の印刷 (2)シミュレーション実行のレジスタの変化及び対 応するソース・プログラム(行単位)の印刷。 (3)実験レポート表紙の印刷。 3.7 アセンブラ疑似命令 使用可能な疑似命令を以下に示す1)。 (1)DEFB データ長1・ミイトの数値の定義 (2)DEFWデータ長2・ミイトの数値の定義 (3)DEFS (4)EQU (5)ORG (6)END 文字列の定義 定数(式)の定義 プログラムの先頭番地の定義 プログラムの終わり 3.8 シミュレーション環境 (1)使用可能メモリ領域 65536Byte (2)使用可能1/0領域 256Byte (3)使用可能スタック領域 65536Byte ステップ数で2000程度のプログラミングが可能。 3.9 制限事項 システム作成上の都合により以下の機能(命令)は 本システムではサポートしていない。これらの命令は, シミュレーシ・ン実行時には無視される。
(1)割り込みに関する命令(DI,EI,RETI,
RETN)1) 一般に割り込みは周辺のハードウエアと密接に 関係しているが,本システムでは周辺装置につい ては考慮していない為,今回割り込み機能を省略 した。 (2)裏レジスタに関する命令(EXの一部,EXX)1) 裏レジスタを使用してプログラムを記述すると 分かりにくいプログラムになり易い。またこの様 な概念は他のCPUでは一般的でないという理由 で今回は省略した。 (3)1,Rレジスタに関する命令(LDの一部)1) プログラミングには直接関係ないので省略し た。 4.システムの構成 4.1 画面構成 本システムを立ち上げると図1の様に画面が表示さ れる。各部の動作と操作法を以下に説明する。 アイコン選択・バ一 ↓ メニュー・アイコン メニa、一一・ハ㌧ Edit Run O tlon 羅FileLoad rhell @Quit EDlT @ 機能選択・ハ㌧ ¥ース・プログラム編集ウィンド REGlSTER 激Wスタ設定 @ウィンド 1/0 ^0設定 @ウィンド MEUORY <c叶ン定/信号表示ウンド STACK Xタック設定 @ウィンド プルタ》ウン・メニュー 設定・編集・参照用ウィンド (3)レジスタ設定ウィンド スクリーン・エディタ形式で,CPUの各レジス タに対して値の設定を行う。シミュレーシ・ン実 行時には(2)と同様にレジスタの値をモニタする。 (4) 1/0設定ウィンド スクリーン・エディタ形式で任意アドレスの1/ 0値の設定/参照を行う。設定は16進数で行うが, 入力と同時に2進数値を設定した値の右側に表示 する。シミュレーション実行時には(2)と同様に1/ O領域のモニタを行う。 (5)スタック設定ウィンド スクリーン・エディタ形式で,任意スタック領 域の値の設定/参照を行う。シミュレーション実 行時には(2)と同様にスタック領域のモニタを行う と同時にスタックの先頭番地(スタックポインタ の指すアドレス)を表示する。 (6) メニュー・アイコン 似かよった機能を一つにまとめてプルダウン・ メニューとし,それぞれ名前を付け,その名前を メニュー・バー上に表示したもの。あるプルダウ ン・メニューを選択する場合は,アイコン選択・ バーをカーソル移動キー(←→)を使って移動し 必要なアイコンを選択する。メニュー・アイコン とプルダウン・メニューの関係を図2に示す。 メニュー・アイコン FiIe Save koad rhell puit Edit Source Register l/O Stack Me皿ory Run Optlon Run Reset Me皿ory Signal Tab 図1 画面レイアウト・及び各部の名称 (1)ソース・プログラム編集ウィンド スクリーン・エディタによるソース・プログラ ムの編集を行う。シミュレーション実行時には実 行中の行及び文法等の誤りがある行を指示する。 ブレークポイントの設定もこのウインドで行う。 (2)メモリ設定ウィンド スクリーン・エディタ形式で,任意のアドレス のメモリに対して値の設定/参照を行う。シミュ レーション実行時にはCPUによってアクセスさ れたメモリ・アドレスのデータを色を変えて表示 する。(書き込み:,赤/読み込み:緑) プルタ、ウン・メニュー 図2 メニューの構成 (7) プルダウン・メニュー メニュー・アイコンを選択する事によって表示 される機能選択用の補助メニュー。カーソル移動 キー(↑↓)で機能選択バーを移動し,必要な機 能を選択する。
4.2 内部構成
4.2.1 全体構造
図3に本システムの構造を示す。この部分は本シス テムのメインルーチンとなる。システム立ち上げ直後, 初期化を終えるとソース・プログラムの編集状態とな る。種々の機能を使用する場合はESCキーの押下によ り必要な処理を行うサブルーチンを呼び出す。 4.2.2以降それぞれのサブルーチンについて説明す る。 図3 全体の構成 4. 2. 2 File
ディスクからのソースプログラムの読み込み
(Load)/保存(Save),シエルの起動(Shell),システム の終了(Quit)の機能を持つ。図4に構造を示す。 4. 2. 4 Run シミュレーションの実行(Run),及びブレーク・ポイ ントによりシミュレーションが一次停止している場合 でシミュレーションを中断したい場合(Reset)に選択 する。(コ¥D
(a)メニx一部 (b)実行部の構成 図6 シミュレーショソ部の構成 シミュレーション実行部では,構文解析(アドレッ シング・モードの解析,及び構文チェック)を入力さ れている全ソースプログラムについて行い,誤りが無 いなら解析されたアドレッシング・モードに従って一 行ずつシミュレーションを実行する。誤りが存在する 場合は実行を中断し,メッセージを表示する。シミュ レーション実行以前に全ソース・プログラムをチェッ クして可能な限りの誤りを発見する事により,システ ムが使いやすいものとなった。 4. 2. 5 0ption メモリ・ウィンド(Memory)と信号表示・ウィンド (Signa1)の切り替え, T A B(TAB)の設定を行う。唾⊃
図4 ファイル管理部の構成 Option 4. 2. 3 Edit メモリ(Memory),レジスタ(Register),1/0,スタッ ク(Stack)に対して値の設定を行う際,どのウィンド を選択するかを決定するためのサブルーチンで,選択 されたウィンドは枠の色が水色から赤に変化する。巨⊃
図5 編集ウィンドの切り替え 選択⊆⊃
図7 オプション部の構成 4.3 データ構造 本システムの基本となるソース・プログラムのデー タ構造を図8に示す。ソース・プログラムのそれぞれ の行は,データ・セルを連結した線形リスト構造となっ ていて,リストの先頭はBasePointerを指し,リストの最後はnilを指す。間にあるデータセルについて以 下に説明する。 BasePointer befor next 〉 destination source break point eXeCUtiVe pOint text buffer inStrUCtiOn SiZe nil テ^一タ・セル befor,next : pointer destination,source : AddressingModeKind break_point,executive_point : boolean text_buffer : string instruction_size : byte 図8 ソース・プログラムのデータ構造 (1) befor, next リスト前後へのポインタで,前後にリストをた どる事が可能なので,処理が高速化できる。 (2) destination, source それぞれのオペランドのアドレッシング・モー ドを示す変数で,シミュレーション実行時の構文 解析時に設定される。 (3) break−point ブレーク・ポイントが設定されているか否かを 示す変数で,プレーク・ポイントが設定されてい る場合にtrueとなる。 (4) executive−point シミュレーション中の行であるか否かを示す。 (5) text−buffer ソース・プログラムのバッファ。 (6) instruction−size 命令の大きさ(バイト数)でシミュレーション 実行時の構文解析時に設定される。 4.4 高速化手法 構文解析,及びシミュレーション時にCPUの命令 テーブルを参照するが,Z80−CPUでは150種もの命令 を持つため数行の小さなプログラムなら問題ないが, 大きなプログラムをシミュレーションする際はテーブ ル参照回数の増加により処理が遅くなる可能性があ る。 そこでテーブル参照部の構造を図9(a)から(b)の様に 階層構造にする事で,参照回数を減らし高速化を実現 した。 (a)はテーブルを単純に並べられている順に上から下 に検索する。(b)は検索の対称となる命令ニーモニック テーブル参照回数
/
①ADCv
②ADD ∀ ③ANDV
④BlTv
⑤CALLv
⑥願裏灘 (a)単純な参照 図9 ブル参照経路 C (ADC) ①N−・< D (ADD) v ②B (BIT)③;ξ〈CALL)
⑤一 (CCF) (b)階層的な参照 テーブル参照部の構造 を先頭の一文字から順に検索し,一致したところで一 段深い階層に移動する。以後これを繰り返す事により 目的のテーブルを探索する。 5.動 作 例 簡単な動作例として,メモリ(1010h)とBレジスタ の値を加算するプログラムを示す。 (1)システム立ち上げ直後の画面(図10)。 図10 システム立ち上げ画面 (2)EDITウィンドのスクリーン・エディタでソー ス・プログラムを入力する(図11)。 図ll ソース・プログラムの入力(3)1010h番地のメモリ値を設定する(図12)。 図12 メモリの設定 (4)シミュレーションの実行(図13)。 6.おわり に 機能的には当初の目的をほぼ満足するものが出来上 がったと思われる。本システムは現在まだ試作段階で 実際の応用は行っていない。運用時に発生した問題に はその都度対応して行きたいと考えている。