• 検索結果がありません。

教育用アセンブリ言語シミュレータの開発 利用統計を見る

N/A
N/A
Protected

Academic year: 2021

シェア "教育用アセンブリ言語シミュレータの開発 利用統計を見る"

Copied!
5
0
0

読み込み中.... (全文を見る)

全文

(1)

論 文

教育用アセンブリ言語シミュレータの開発

平川寛之 清弘智昭

(平成5年8月31日受理)

Development of The Assembly Language Simulator

for Machine Language Education

HiroyukiHIRAKAWA NoriakiKIYOHIRO        Abstract   This paper describes implementation of a Z80 assembly language level simulator for education of machine language programing on the SUN engineering work stations. This system has some features as follows;(1)Assembly code level simulator,(2)Provide interactive simulation environment by GUI,(3)Provide basic assembler directives and all instruction of a Z80 except interrupt handling. We developed a simple instruction description language to shorten the time needed for the implementing of this system and decrease bugs of simulation executing. The time required to implernent this system was reduced fairy by using this method. 1.はじめに  現在まで,本学科のアセンブリ言語の教育は,パソ コン(以下,PCと呼ぶ)をベースとしたアセンブリ言 語シミュレータv(以下,PCシステムと呼ぶ)を使っ て実施されてきたが,昨年,本学科の教育用計算機シ ステムがDEC VAX 11/785から, SUN EWSによる分 散処理システムに変更された事で,UND(をベースとす る他の授業との整合性を考慮し,従来のPC上のシステ ムをSUN EWSに移植する事になった.今回の移植作業 では,種々の理由により作業時間が少なかった為に短 時間に移植作業を進める必要があった.この為,比較

的短時間で効率的にプログラミングとデバック

(clebug)をする為の工夫を行なっている.本論文で は,この時に用いた各種の手法として,高速化に関す る手法と,システムの構造を簡単化するための簡易言 語について説明する. 2.システム構成 2.1基本構成  基本的には,PC用のシステムと同等の機能をEWS上 で実現する.具体的には, (1)GUIによる,インタラクティブなシミュレーション環  境を実現する. (2)基本的なZ80アセンブラ・の疑似命令をサポートす  る. (3)割り込み以外のZ80−CPU・、の命令を全てサポートす  る. (4)アセンブリ・コードレベルのシンボリック・シミュ  レーション環境を実現する. *電子情報工学科,Department of Electrical Engineering&Computer Science (1)実行環境がMS−DOSからUNDζ+X−Window・・と2.2PCシステムとの相違点

(2)

 なった関係で,プログラミング言語をPASCALからCに  変更. (2)X−ToolKit・’8)・)(Xtと呼ぶ事もある)によるオブ  ジェクト指向プログラミングを採用. (3)簡易言語(後述)の導入によるプログラミングの  効率化. ・(1),(2),(3)は,ユーザによって意識される事はな  く,あくまでアルゴリズム,プログラミング手法の  変化で,機能そのものはPCシステムと大きな差異は  ない. (5)PCシステムでは, Z80−CPUの出力する信号波形(  データ・バス・),アドレス・バス2),制御信号線2)な  ど)の変化をモニタする機能があったが,実際の授  業ではほとんど使用されていなかった為今回は削  除した. (4)PCシステムには,シミュレーションの対象となる  ソース・プログラムと,実行時に実行の対象となる  ソース・プログラムとレジスタの変化を逐次に印刷  する機能があったが,今回は削除した. 2.3内部構成  PCシステムと本システムでは,機能的には大きな差 異は無いが,内部構造は大きく異なっている.これ は,短時間でバグの少ないプログラムを作成する事を 要求されており,PCシステムと同様の構造では作業に 時間が掛かると予想された為である.そこで,プログ ラミング/デバック作業の効率化を計るために,各機 械語命令の動作を記述する簡易言語を採り入れてい る.図1に本システムの構成を示す.  シミュレーションの対象となるアセンブリ・コード (ソース・プログラム)の字句解析を行なう. 字句解析とは,図2の様にソース・プログラムをトー クン・)・)に分割する事をいう.

[亘コ[コ[コ[三コ

ソース・プログラム(文字の並び) からトークンを抽出し,トークンの 並びを生成する. 図2字句解析 アセンブリ コードの字句

 解析

゜Pコード解析

アドレッシング  モード解析

イ竺甥タ釦

1.簡易言曙をライ  ブラリから読み込む 2.アドレッシング・  モードの決定 (2)OPコード解析2〕  字句解析の結果から,各命令のOPコードに対応する 簡易言語の記述(OPコードの動作を記述した)をライ ブラリからロードし,データ・テーブルに登録する.  また,テL−一ブル参照の高速化を実現する為,図3のよ うな検索アルゴリズムを用いた. 寸

DECを検索する場合

A一炉D ・.t.’ C B・一佑・ † C’〃・ ψ          り ; ヤ

i D

多 N ・・7.’ D

OPコード

ADC

ADD

AND

探索経路  ・−ett・ 探索されない 経路 ・参照回数を減らす事 で高速化を計る

D一レE一レC

DEC

図1システム構成 (1)アセンブリ・コードの字句解析・)・)6) ψ 図3高速化手法  この方法では,検索の対象となるOPコード(文字 列)について,先頭の文字から一文字ずつテーブルと 比較し,異なっていた場合はその文字列に続く参照を スキップする事で参照回数を減らし,高速化するもの である.同様な手法はPCシステムでも用いている.本 手法はハッシュ関数などを用いる他の手法と比較して 簡単に実現でき,十分な効果がある. (3)アドレッシング・モード・)解析  字句解析の結果から得られるオペランドのアドレッ

(3)

シング・モードの特定(図4)を行ない,結果をデー タ・テーブルに登録する.また特定されたアドレッシ ング・モードがOPコード解析で得られたOPコードで使 用可能かどうかを判定する.

・DA

シ脇ζシグ’

 ;

 多

 診

”(ttの ある候補    ”DE,,の 候補が1つになった 時点で確定 1.全命令の全てのアッシング・モードから”(”の  あるアドレッシング・モードを,全て抽出する. 2.残った候補の中で,レジスタ”DE”を指定して  いるモードを抽出する. 3.同様の動作を”DEt,についても行ない,候補が  1っになった時点で確定とする. 図4アドレッシング・モードの判定 ぶ)各オブジェクトは伝えられた情報を基に,表示を 行なう.

2.5簡易言語の必要性

 Z80 CPUは158種の命令を持つが,従来のPCシステ ムのシミュレーション実行部では各命令毎に関数を定 義していた.しかしこの様な方法では図6(b)の様に, 同じような動作をする関数を複数持つ事になり,これ らの関数の上位,または下位の関数のインターフェー スに関連する部分などに変更が加わった場合,各関数 の整合性を保つ事は手間が掛かり,また間違いも生じ 易い.実際,PCシステムでのプログラム中の誤りの多 くは,この部分で生じていたと思われる.

R,P

(a}簡易言語での構造 ↓        tW、       早   (b}PCシステムでの構造

栖数の呼び出し口関数

(4)簡易言語インタプリタ・)(命令実行)  OPコード解析,アドレッシング・モード解析で得ら れたデータ・テーブルを基にして,簡易言語のインタ プリタにより,ライブラリからロードされた簡易言語 によるプログラムを実行する.これによってシミュレ ーションが実行される. (5)シミュレーション結果表示  本シミュレータの立ち上げ後の画面を図5に示す.  命令実行のプロセスで得られた結果(レジスタ・),メ モリの変化など)を各ウィンド(オブジェクト)に伝 える. (Xtではオブジェクトの事をウィジェット3)と呼

[≡コ[三亘コ[亜コ[函

《  ソース・プログラム表示ウィンド Memor メモリ設定ウィンド 8Bit Re iste「 レジスタ設定ウィンド 16Bit Re ister レジスタ設定ウィンド Fla Re ister レジスタ設定ウィンド 1!O     Stack 1/ 設定 ウィノド スタソク

 定

ウ ンド 図5実行時の画面 図6プログラムの複雑度  デバック作業に於いて,潜在的な誤りを洗い出すに は,当該関数に多角的な入力を与えて,その出力の矛 盾を探すという方法が一般的である.従ってデバック の対象となる関数が複数存在し,条件によって動作す る関数が異なる場合などは,入力数が膨大となり,作 業が困難となる事が予想される.特に稀にしか実行さ れない関数の誤りは,フィールドによるテストでも発 見される事は少ない.  この様な問題を解決する方法の一つとして,各関数 で同様の処理を行なう部分を可能な限り共通にし,プ ログラムの複雑度を減らす事が考えられるが,実際に は困難な場合も多い.  各機械語の動作を特定の動作の集合と考え分類して みると,図7に示す様に数種の集合の要素の動作の組合 せで殆んどの機械語の動作が実現できる事は明かであ る.従って,これらの要素の組合せを簡単な記述言語 を用いて実現する方法を考えた.便宜上,この言語を 簡易言語と呼ぶ事にする.  この方法によって関数の種類を減らす事が可能とな り,結果として図6(a)の様にプログラム複雑度を低減 し中の誤りを減らす事が可能となった.  簡易言語のもう一つの効能として,誤りを即座に訂 正できる事が挙げられる.本システムでは,簡易言語

(4)

の読み込み/実行はシミュレーション実行時に行われ る為,システムを立ち上げたままでも簡易言語の修正 それぞれの命令を比較す ると共通部分が多い事が 分かる.この共通部分 を,簡易言語の一命令と して定義する. 図7各命令の共通部分 が可能である.C言語等によって機械語の動作を記述し た場合は,ソースコードの修正後,コンパイルを行う 必要があり,一連の作業を授業中などに行う事は容易 ではない.本来,プログラム中の誤りは事前に取り除 かれているべきだが,事前に誤りが予想されている場 合は,それに対する対応策も用意されているほうが望 ましい.  この方法の欠点は,PCシステムの方法と比べて,簡 易言語の読み込み/構文解析/実行などの余分なプロ セスがある分,処理が重くなる事である.PCシステム の開発時においても,システムに拡張性を持たせる観 点から,簡易言語の導入を検討したが,PCの処理能力 の限界から採用を見送った.  EWSでは, PCより格段に処理能力があるので,多少 のオーバ・ヘッドはさほど問題とならず,PCシステム とほぼ同等のシミュレーション実行速度を得る事が出 来た.

2.6複雑度の計量

 プログラムの実行可能なパスを数える事で,プログ ラムの複雑度を計量する事ができる.この方法は, McCabeの閉路複雑度計量1・)として知られており,現 在,最も広く使われている計量法である.図8にPCシ ステムと本システムの複雑度を示す. 結果として,複雑度を従来の半分程度に低減すること ができた.なお,計量の対象としたのはシミュレー ションの実行に関係する部分のみとした. 本システム

PCシステムと比較し,約50%の低減

3.1予約語

(1)OPO, OP1 図8複雑度の評価

3.簡易言語の仕様

 アセンブリ・コードのオペランドの値を示す.OPO は第1オペランド,OP1は第2オペランド.

(2)TRO∼TR15

 作業用のテンポラリ・レジスタ. (3)A,B, C, D, E, H, L, AF, BC, DE, HL, PC,

SP

 Z80−℃PUのレジスタ. (4)MWL  データの書き込み長.byte単位でアクセスの対象と なるメモリに書き込まれるデータの長さを設定する. (5)$  動作記述される命令のOPコードを与える.

3.2演算子

(1)&,1,!  bit毎の論理演算子. AND, OR, bit反転を行なう. (2)十,一,*,/  四則演算子.加算,減算,乗算,除算を行なう. (3)一〉  代入演算子.左の要素を右の要素に代入する. (4) ==, !=  比較演算子.左右の要素が等しいか,等しくないか で1を返す.それ以外の場合は0を返す. (5) <<, >>, r<, r>  シフト,ローテート演算子.それぞれ,左シフト, 右シフト,左ローテート,右ローテートを行なう. (6)[##:##] bitマスク演算子.##:##でマスクをかけるbitの位置 を最下位bitをObitとして指定する.マスクされた部分 がアクセスの対象となる. (7)@  パリティ・チェック.偶数パリティの時1,奇数パリ ティの時0を返す.

(5)

3.3条件分岐

 書式を以下に示す.        ?(TRO−0) LBL1:         条件式  ラベルまたは式  括弧内の条件式の評価が1の時,その後に続く式が 評価される.ラベルのみが書かれている場合は,その ラベルに分岐する.0の場合は無視される.

3.4定数

定数は数値(16進数)の前に#を付加する. 3.5メモリ・アドレスの指定  定数,あるいはレジスタを括弧で括ったもので表現 する.これに対するアクセスは,その定数/レジスタ の値で示されるメモリ・アドレスに対するアクセスと なる.

3.6ラベル

 条件分岐命令に於ける分岐先を定義する.任意の英 数字列の後に「’:Tfを付加する事で表現する.

3.7具体例

LD命令の動作の簡易言語での記述例を図9に示す.     LDA,8の動作を簡易言語で配述すると $LD       OPコードの名前, #1 ・〉 MWL        メモリアクセスを1Byte単位にする, ?(%OPI==va)m2 ・〉 MWL オペランドの長さが2Byteの場合,メ       モリアクセスを2Byte単位にする. OPI・〉 TRO        第2オペランドの値をTROに書き込む. mo・>OPO        TROの値を第一オペランドに書き込む.

OS

図9簡易言語による記述例

4.動作環境

:SunOS 4.1.1以上 X−Window:version 11 release 5(release 4でも       動作は可能だがシェアード・ライブラリ       は使えない) 5.おわりに  簡易言語を用いる事で,プログラムの簡略化によっ て信頼性の向上による短納期化を実現する事が出来 た. (PCシステムの2/3程度の工数で完了する事がで きた)  通常,この様な簡易言語は,機能を拡張する為に使 われる事が一般的であるが,本シミュレータではプロ グラムの複雑度を低減する為に用いた点が特徴と言え る.拡張性を考慮したもので無い以上,簡易言語を用 いる事によるシステムの拡張性は考えられていない.  しかし将来的には拡張性を含んだシステムとして行 く予定である.  現在本シミュレータは本学科の学部2年生の授業で 応用されており,一応の好評を得ている.  今後の課題として,本シミュレータにはレポートの 作成機能や採点機能,学生が間違え易い部分の統計処 理機能などが盛り込まれていない.今後はこのような 機能も実装して行く事が必要と思われる.

6.参考文献

1)平川,清弘:”統合機械語教育システム”,山梨  大学工学部研究報告,No.41, (1990) 2)シャープ1”Z80ファミリテクニカルマニュア  ル”,エレクトロニクスダイジェスト書店部, (19  82) 3)Adrian Nye, Tim O’Reilly:”Xツールキット・  イントリンシクス・プログラミング・マニュアル”  , (1992),ソフトバンク 4)松本:”YaccとLexによるプログラム開発(1)”,  INFORMATION, (1989−12),インフォメーショ  ンサイエンス 5)松本:”YaccとLexによるプログラム開発(2)”,.  INFORMATION, (1990−1),インフォメーショ  ンサイエンス 6)近藤:”YaccによるCコンパイラプログラミング  ”,ソフトバンク, (1992) 7)Niklaus Wirth:”アルゴリズム+データ構造=  PASCALプログラム”,日本コンピュータ協会,  (1979) 8)Chris D. Peterson:”Athena Widget Set 一 C  Lai gguage lnterface”,MIT X Consortium,

 (1991)

9)Joe1 McCormack, Paul Asent, Ralph R.  SWick,”X Toolkit Intrinsics 一 C LaIiguage  Interface”,MnT X Consortium, (1991) 10)Carnla McClure:”ソフトウエアの開発と保守  の戦略”,共立出版(1993) 11)W.フレークス,C.J.フォックス, B.A.ネジメ:  ”UND(/Cソフトウエアエンジニアリング”,凸版,  〈1991)

参照

関連したドキュメント

るにもかかわらず、行政立法のレベルで同一の行為をその適用対象とする

5.2.2 SIFT への組込み CUDA で実装した Bilateral Filter を SIFT に組込み、提案手法の高速化を行った。高速 化前後での処理時間の比較結果を表 6,

問題例 問題 1 この行為は不正行為である。 問題 2 この行為を見つかったら、マスコミに告発すべき。 問題 3 この行為は不正行為である。 問題

かであろう。まさに UMIZ の活動がそれを担ってい るのである(幼児保育教育の “UMIZ for KIDS” による 3

LLVM から Haskell への変換は、各 LLVM 命令をそれと 同等な処理を行う Haskell のプログラムに変換することに より、実現される。

(a) 主催者は、以下を行う、または試みるすべての個人を失格とし、その参加を禁じる権利を留保しま す。(i)

「系統情報の公開」に関する留意事項