概要
ilasmでstack machineやってみた。
練習問題やってみた。
練習問題
ilasmを日本語に変換するコンパイラを書け。
数9を4個つかって1から15までの数を表す式をコンパイルせよ。
写真
投入したソース
d1:
ldc.i4 9
ldc.i4 9
sub
ldc.i4 9
ldc.i4 9
div
add
call void [mscorlib] System.Console::WriteLine(int32)
d2:
ldc.i4 9
ldc.i4 9
div
ldc.i4 9
ldc.i4 9
div
add
call void [mscorlib] System.Console::WriteLine(int32)
d3:
ldc.i4 9
ldc.i4 9
add
ldc.i4 9
add
ldc.i4 9
div
call void [mscorlib] System.Console::WriteLine(int32)
d4:
ldc.i4 9
ldc.i4 9
add
ldc.i4 9
div
ldc.i4 9
pop
dup
add
call void [mscorlib] System.Console::WriteLine(int32)
d5:
ldc.i4 9
ldc.i4 9
ldc.i4 9
add
ldc.i4 9
div
dup
add
sub
call void [mscorlib] System.Console::WriteLine(int32)
d6:
ldc.i4 9
dup
ldc.i4 9
add
ldc.i4 9
add
ldc.i4 9
div
sub
call void [mscorlib] System.Console::WriteLine(int32)
d7:
ldc.i4 9
ldc.i4 9
ldc.i4 9
add
ldc.i4 9
div
sub
call void [mscorlib] System.Console::WriteLine(int32)
d8:
ldc.i4 9
ldc.i4 9
ldc.i4 9
div
sub
ldc.i4 9
pop
call void [mscorlib] System.Console::WriteLine(int32)
d9:
ldc.i4 9
ldc.i4 9
sub
ldc.i4 9
mul
ldc.i4 9
add
call void [mscorlib] System.Console::WriteLine(int32)
d10:
ldc.i4 9
ldc.i4 9
div
ldc.i4 9
add
ldc.i4 9
pop
call void [mscorlib] System.Console::WriteLine(int32)
d11:
ldc.i4 9
ldc.i4 9
ldc.i4 9
add
ldc.i4 9
div
add
call void [mscorlib] System.Console::WriteLine(int32)
d12:
ldc.i4 9
dup
ldc.i4 9
ldc.i4 9
add
add
ldc.i4 9
div
add
call void [mscorlib] System.Console::WriteLine(int32)
d13:
ldc.i4 9
ldc.i4 9
ldc.i4 9
add
ldc.i4 9
div
dup
add
add
call void [mscorlib] System.Console::WriteLine(int32)
d14:
ldc.i4 9
dup
ldc.i4 9
ldc.i4 9
add
ldc.i4 9
div
dup
add
sub
add
call void [mscorlib] System.Console::WriteLine(int32)
d15:
ldc.i4 9
dup
dup
ldc.i4 9
add
ldc.i4 9
add
ldc.i4 9
div
sub
add
call void [mscorlib] System.Console::WriteLine(int32)
ret
実行結果
d1:
数値 9 を積み
数値 9 を積み
引く
数値 9 を積み
数値 9 を積み
割る
足す
d2:
数値 9 を積み
数値 9 を積み
割る
数値 9 を積み
数値 9 を積み
割る
足す
d3:
数値 9 を積み
数値 9 を積み
足す
数値 9 を積み
足す
数値 9 を積み
割る
d4:
数値 9 を積み
数値 9 を積み
足す
数値 9 を積み
割る
数値 9 を積み
捨てる
コピペし
足す
d5:
数値 9 を積み
数値 9 を積み
数値 9 を積み
足す
数値 9 を積み
割る
コピペし
足す
引く
d6:
数値 9 を積み
コピペし
数値 9 を積み
足す
数値 9 を積み
足す
数値 9 を積み
割る
引く
d7:
数値 9 を積み
数値 9 を積み
数値 9 を積み
足す
数値 9 を積み
割る
引く
d8:
数値 9 を積み
数値 9 を積み
数値 9 を積み
割る
引く
数値 9 を積み
捨てる
d9:
数値 9 を積み
数値 9 を積み
引く
数値 9 を積み
掛ける
数値 9 を積み
足す
d10:
数値 9 を積み
数値 9 を積み
割る
数値 9 を積み
足す
数値 9 を積み
捨てる
d11:
数値 9 を積み
数値 9 を積み
数値 9 を積み
足す
数値 9 を積み
割る
足す
d12:
数値 9 を積み
コピペし
数値 9 を積み
数値 9 を積み
足す
足す
数値 9 を積み
割る
足す
d13:
数値 9 を積み
数値 9 を積み
数値 9 を積み
足す
数値 9 を積み
割る
コピペし
足す
足す
d14:
数値 9 を積み
コピペし
数値 9 を積み
数値 9 を積み
足す
数値 9 を積み
割る
コピペし
足す
引く
足す
d15:
数値 9 を積み
コピペし
コピペし
数値 9 を積み
足す
数値 9 を積み
足す
数値 9 を積み
割る
引く
足す
終わり。
成果物
以上