みにかできた

正式名称「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より前ではコンパイルできないコードになりました。クロージャはよいですね。クロージャさえあればご飯三杯はいける。

続きを読む

test