ilasmでstack machine その38

# 概要
ilasmでstack machineやってみた。
練習問題やってみた。

# 練習問題
ilasmを日本語に変換するコンパイラを書け。
数9を4個つかって1から15までの数を表す式をコンパイルせよ。

# 写真

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/fb0b1559-cda9-b0ca-8ee2-aa377461c0ef.png)


# 投入したソース

```
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 を積み
  割る
  引く
  足す
  終わり。

```


# 成果物


https://embed.plnkr.co/plunk/qyNFHwbEcejFJX1s

以上