JVMで動作するプログラミング言語を作るにはどうしたらよいのだろう?(8)
add,sub,mul,div,rem,neg
今日は演算処理命令を使ってみます。negはスタックに1つの値が必要です。
それ以外は2つの値が必要です。
addが足し算、subが引き算、mulが掛け算、divが割り算、remが剰余、negがマイナスの値を取得する命令です。
まずはiaddを使ってみます。
.source a.java .class a .super java/lang/Object .method <init>()V .limit stack 1 .limit locals 1 .line 1 aload_0 invokespecial java/lang/Object/<init>()V return .end method .method n()I .limit stack 1 .limit locals 2 .line 3 iconst_1 iconst_2 iadd ireturn .end method
結果 3 になります。
iaddの部分をisubにすると1-2で-1に。
.method n()I .limit stack 1 .limit locals 2 .line 3 iconst_1 iconst_2 isub ireturn .end method
結果 -1
imulにして3*2=6
iconst_3 iconst_2 imul
結果 6
idivで4/2=2
iconst_4 iconst_2 idiv
結果 2
irem 5 % 2 = 1
iconst_5 iconst_2 irem
結果 1
ineg -(2)は-2
iconst_2 ineg
結果 -2
です。何も難しいことはないですね。
JRuby等は四則演算のメソッドを書き換えることが出来ます。
そういう場合は全部とりあえず、メソッド呼び出ししておいて、組み込み関数だけがこの命令
を呼び出すとかなってるのかなぁと思います。
実はそういうところを考えるほうがすごい難しいんだろうなぁという感じです。