みにかできた
正式名称「MinIPSアセンブラもどき以前の何か」。こういう名前つけるの好きな自分再確認。ついでにpre alpha 1とかいうバージョン情報付けといたら、いいかげんにしろって感じですね。
まあ実際その程度のことしかせんけど←こういう言い訳良くないね。
一応ディスアセンブルもできるようになったので一段落。次の実験までに作っときたかったからできて良かった。「OCamlとかもしくはC++で書きてえかも」との思いをぐっと押さえて、早くできそうな言語でやったのが良かったかな。Schemeあたりは悪くなかったかもしれんけど、実験に使うWindowsPCで動かすの面倒だし。
http://konbu.s13.xrea.com/lib/minika.exe
使い方は
minika.exe (asm|dsm) [input [output] ]
asmだとアセンブラ、dsmだとディスアセンブラっぽい動作。入力ファイルと出力ファイルは省略できます。その時はそれぞれ標準入力と標準出力に。
なんかアセンブルしてみる。
C:\hoge>cat hoge.s lui $10, 65535 ori $1, $0, 1 ori $2, $0, 2 ori $3, $0, 3 sll $4, $1, 1 srl $4, $4, 1 beq $1, $4, 32 nop srl $4, $2, 1 sll $4, $4, 1 beq $2, $4, 31 C:\hoge>minika asm hoge.s hoge.hex C:\hoge>cat hoge.hex 3C0AFFFF 34010001 34020002 34030003 00012040 00042042 10810020 00000000 00022042 00042040 1082001F
なんか妙な32ビットデータの16進表記が吐かれてますね。
ちょうどいいのでディスアセンブルしてみます。
C:\hoge>minika dsm hoge.hex lui $10, 65535 ori $1, $0, 1 ori $2, $0, 2 ori $3, $0, 3 sll $4, $1, 1 srl $4, $4, 1 beq $1, $4, 32 nop srl $4, $2, 1 sll $4, $4, 1 beq $2, $4, 31
もとに戻せました。やったー。
なんで吐くのが文字列かと言うと、16進文字列のデータを大学のMinIPSプロセッサ実験で使うからです。TAの人が「こーやってこーやって命令表からこーしてあーして、16進文字列を計算して、プログラム書けるよー」と教えてくれたのですが、俺はそんなの手計算したくないです。
以下コード。やっぱりけっこうひどいコードだと思う。あきらかに設計とか何も考えずに書いてます。ちなみに完全DMD2.007より前ではコンパイルできないコードになりました。クロージャはよいですね。クロージャさえあればご飯三杯はいける。
続きを読む