jasminアセンブラの ; で始まる行はコメントなので, 実は,以下程度の記述があれば,アセンブル(バイトコードに直すこと)が可能. コメントがないほうが,かえって読みやすい??
以下では一部のオプション命令の外してある. (コメントがあるとこんな感じ)
参考: 教科書 p.8-9
.class  Calc
.super  java/lang/Object

.method add(II)I
    .limit stack 2
    .limit locals 3
    iload_1
    iload_2
    iadd
    ireturn
.end method

.method sub(II)I
    .limit stack 2
    .limit locals 4
    iload_1
    iload_2
    isub
    istore_3
    iload_3
    ireturn
.end method

.method lpower(II)I
    .limit stack 2
    .limit locals 4
    iconst_1
    istore_3
    goto Label2
Label1:
    iload_3
    iload_1
    imul
    istore_3
    iinc 2 -1
Label2:
    iload_2
    ifgt Label1
    iload_3
    ireturn
.end method

.method rpower(II)I
    .limit stack 5
    .limit locals 3
    iload_2
    ifle Label1
    iload_1
    aload_0
    iload_1
    iload_2
    iconst_1
    isub
    invokevirtual Calc/rpower(II)I
    imul
    ireturn
Label1:
    iconst_1
    ireturn
.end method

.method rpower2(II)I
    .limit stack 5
    .limit locals 3
    iload_2
    ifle Label1
    iload_1
    aload_0
    iload_1
    iload_2
    iconst_1
    isub
    invokevirtual Calc/rpower(II)I
    imul
    ireturn
Label1:
    iconst_1
    ireturn
.end method

.method public static main([Ljava/lang/String;)V
    .limit stack 5
    .limit locals 5
    new Calc
    dup
    invokespecial Calc/<init>()V
    astore_1
    aload_1
    iconst_2
    iconst_4
    invokevirtual Calc/rpower(II)I
    istore_2
    aload_1
    iconst_2
    bipush 6
    invokevirtual Calc/lpower(II)I
    istore_3
    aload_1
    iload_2
    aload_1
    bipush 100
    iload_3
    invokevirtual Calc/sub(II)I
    invokevirtual Calc/add(II)I
    istore 4
    getstatic java/lang/System/out Ljava/io/PrintStream;
    iload 4
    invokevirtual java/io/PrintStream/println(I)V
    return
.end method

.method <init>()V
    .limit stack 1
    .limit locals 1
    aload_0
    invokespecial java/lang/Object/<init>()V
    return
.end method

$Id: list2.html,v 1.3 2000-05-19 13:31:58+09 kaiya Exp kaiya $