最近アセンブリ言語に触れているのですが、
ふと手っ取り早く機械語を学ぶにはアセンブリ言語のエミュレータを作ったほうがいいのではと思いアセンブリ言語のエミュレータを作ることにしました。
つまるところ学習用アセンブリ言語を動かす仮想マシンを作ってます。
仕様など
ニーモニックはMIPSアーキテクチャをベースとしています。
実際に01の機械語に翻訳して実行しているのではなく動作のみをエミュレートしています。
動作の途中でレジスタ/メモリの中身を確認することができます。
インタプリタとして処理の途中を確認できます。
実装中のもの
- add/addi/sub/j/beqなどの基本的な命令を実装しました。
- #LABEL擬似命令によりラベル処理も可能です。
- プログラムのメモリ領域とデータのメモリ領域は別々に管理しています。
- REPLとして実行することができます。
- など
使い方
sampleディレクトリ下にあるサンプルプログラムを動作させてみます。
./emul -f sample/fibonacci.asm
でプログラムが実行されます。
処理を終えるとすぐに終了するため一瞬しか結果が表示されません。(ダメじゃん)
sample/fibonacci最後に入力待機する擬似命令の “#INPUT”を追加してみます。
すると最後に何かキーが押されるまで待機するので結果をゆっくり見ることができます。(やった!)
アセンブリ言語についてはMIPSアーキテクチャをベースとしているので単純です。
(時間があればあとで追記しておきます)
ダウンロード
こちらからダウンロードできます。
URI : https://git.anzumare.net/git/takayun/emul.git
実行環境
Cygwin on Windows, Mac, Ubuntuでの動作確認を行いました。
ncursesはデフォルトではインストールされていない可能性がありますので適宜インストールを行っていください。
- Cygwin on Windows
- Cygwin + make + gcc + ncurses
- Mac
- Homebrew + ncurses
- Ubuntu
- 未検証