- ベストアンサー
大学の卒業研究で以下のようなプログラムを作成することになったのですが、情報が少なく困っています。
大学の卒業研究で以下のようなプログラムを作成することになったのですが、情報が少なく困っています。 「仮想マシンのアーキテクチャを定義、C言語でアセンブリ言語のプログラム をマシンコードに変換するプログラムを作成」 C言語については勉強済み。 アセンブラについては検索するとたくさん情報は得られるのですが、C言語でアセンブラを作るとなると話は別で。 どんな検索ワードで検索すればいいのか?などさっぱりです。 卒業研究なので、自分で考えるべきなのでしょうが・・・ どなたか、これに関連したサイト、実際にC言語で書かれたプログラム等をご存じでしたら、教えて頂けないでしょうか
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
卒業研究なのですから、自力で,あとは指導教員の助けでやりなさい. 「情報が少ない」とはどういうコトでしょうか. C言語をもうわかっているのなら,こんな課題もうあとはちょいちょいとプログラムを書くだけでしょう. まず,インターネット検索をやめて,図書館に行きなさい. ヘネシー.パターソンのアーキテクチャ本とか,まずはCPUの命令体系を決めるための勉強をする. 次に,命令体系を決め,命令のニーモニックも決める.当然このとき,アセンブラが作りやすい体系を採用した方が得です.が余りにも貧弱なアーキテクチャだと恥ずかしい.指導教員と協議して適切な難易度レベルを選んでください. 次に,アセンブラの仕様を決める.おそらくは,リンケージエディタもなにもない,絶対番地アセンブラでいいと指導要員は思っているでしょう.マクロ機能も無くても許してもらえるでしょうね. で,アセンブラの文法を決め(これは、既存の適当なCPUのアセンブラの文法を借りてきてOK), アセンブラのソフトウェア構造を設計して, プログラミングすると. そこまで行くと,「前方ジャンプのアドレス解決は?」とかいろいろ疑問が出てくると思いますよ. まずは,適当なCPUで短いアセンブリ言語ソースを手動で機械語に直す(ハンドアセンブル)修行をするのがよいでしょう.それで,アセンブラというものはだいたいどういう処理をしているのかが理解できるでしょう. 最後に言っておきたいのは,これは卒論としてはかなり優しい課題だということ.難しすぎるのなんのと愚痴るのは「私はアホです」と言ってるのと等しいですよ. だいたい,30年前の技術レベルなら,立派な卒論といってもらえたテーマです.
その他の回答 (5)
- sgcarrot
- ベストアンサー率68% (17/25)
CASLアセンブラとCOMETエミュレータでよければCで書かれたソースが 日本電子専門学校のページからダウンロードできます。 一応参考にはなるでしょう。 CASLとCOMETに関しては、ご存じなければ検索すればいくらでも出てきます。 でも、この課題は、アセンブラを作ることよりも、独自のアーキテクチャを 定義するというほうが、センスを問われる難しい内容だと思いますよ。 簡単なようで、奥が深い・・・ がんばってください。
- snowize
- ベストアンサー率27% (68/245)
というか、作業内容が「アセンブリを機械語に変換する」だけなら、ほとんど文字列処理なんじゃないですか? 相当前のことなので記憶が曖昧ですが、高専時代の4年に課題で出された記憶があります。言語指定されていないのをいいことにRubyで提出日前日に一夜漬けで作った記憶がありますのでw、C言語の場合は「文字列処理をどうするか」に着目すればいいんじゃないでしょうか。 ラベルの登録とか余計な要素も若干加わりますが、大した規模のプログラムではないはずですよ。18のガキに作れたんですから、落ち着いて考えればよろしいかと。
- jacta
- ベストアンサー率26% (845/3158)
仮想マシンそのものは作る必要がないのでしょうか? 作る必要があるなら、アセンブラより先に仮想マシンから作ることをお勧めします。 なお、アセンブラを作る程度であれば、パーサジェネレータを使わなくてもスクラッチで十分かと思います。
- lv4u
- ベストアンサー率27% (1862/6715)
アセンブラにこだわっていらっしゃるようですが、要は、なんらかの想定された言語ソースを入れて、想定ターゲットマシンのマシンコードに変換するソフト開発の研究ですね。 「コンパイラコンパイラ」をキーワードにして検索すると、なにかヒントがあるかも?
- MASA_H
- ベストアンサー率42% (64/151)
手っ取り早くいくならflex+bisonか?
お礼
適切なご意見ありがとうございます。やはり、卒業研究なのでこの場で教えて貰おうとする考え方が間違っていました。これからは回答者様のアドバイス通り研究を行って行きたいと思います。