diff -r 748207ad3ef0 -r 76a98ed71a2a progs/fib.j --- a/progs/fib.j Thu Dec 07 12:26:41 2017 +0000 +++ b/progs/fib.j Mon Jan 01 15:02:03 2018 +0000 @@ -3,92 +3,104 @@ .super java/lang/Object .method public ()V - aload_0 - invokenonvirtual java/lang/Object/()V - return + aload_0 + invokenonvirtual java/lang/Object/()V + return .end method -.method public static write(I)V - .limit locals 1 - .limit stack 2 - getstatic java/lang/System/out Ljava/io/PrintStream; - iload 0 - invokevirtual java/io/PrintStream/println(I)V - return +.method public static print(Ljava/lang/String;)V + .limit locals 5 + .limit stack 5 + aload 0 + getstatic java/lang/System/out Ljava/io/PrintStream; + swap + invokevirtual java/io/PrintStream/print(Ljava/lang/String;)V + return .end method -.method public static read()I - .limit locals 10 +.method public static write(I)V + .limit locals 1 + .limit stack 2 + getstatic java/lang/System/out Ljava/io/PrintStream; + iload 0 + invokevirtual java/io/PrintStream/println(I)V + return +.end method + +.method public static read()I + .limit locals 10 .limit stack 10 - ldc 0 - istore 1 ; this will hold our final integer -Label1: - getstatic java/lang/System/in Ljava/io/InputStream; - invokevirtual java/io/InputStream/read()I - istore 2 - iload 2 - ldc 10 ; the newline delimiter - isub - ifeq Label2 - iload 2 - ldc 32 ; the space delimiter - isub + ldc 0 + istore 1 ; this will hold our final integer +Label1: + getstatic java/lang/System/in Ljava/io/InputStream; + invokevirtual java/io/InputStream/read()I + istore 2 + iload 2 + ldc 10 ; the newline delimiter + isub + ifeq Label2 + iload 2 + ldc 32 ; the space delimiter + isub ifeq Label2 - iload 2 - ldc 48 ; we have our digit in ASCII, have to subtract it from 48 - isub - ldc 10 - iload 1 - imul - iadd - istore 1 - goto Label1 -Label2: - ;when we come here we have our integer computed in local variable 1 - iload 1 - ireturn + iload 2 + ldc 48 ; we have our digit in ASCII, have to subtract it from 48 + isub + ldc 10 + iload 1 + imul + iadd + istore 1 + goto Label1 +Label2: + ;when we come here we have our integer computed in local variable 1 + iload 1 + ireturn .end method .method public static main([Ljava/lang/String;)V - .limit locals 200 - .limit stack 200 + .limit locals 200 + .limit stack 200 -invokestatic fib/fib/read()I -istore 0 -ldc 0 -istore 1 -ldc 1 -istore 2 -ldc 0 -istore 3 + ldc "Fib" + invokestatic fib/fib/print(Ljava/lang/String;)V + invokestatic fib/fib/read()I + istore 0 + ldc 0 + istore 1 + ldc 1 + istore 2 -Loop_begin_2: +Loop_start_1: + + iload 0 + ldc 0 + if_icmple Loop_end_0 -ldc 0 -iload 0 -if_icmpge Loop_end_3 -iload 2 -istore 3 -iload 1 -iload 2 -iadd -istore 2 -iload 3 -istore 1 -iload 0 -ldc 1 -isub -istore 0 -goto Loop_begin_2 + iload 2 + istore 3 + iload 1 + iload 2 + iadd + istore 2 + iload 3 + istore 1 + iload 0 + ldc 1 + isub + istore 0 -Loop_end_3: + goto Loop_start_1 -iload 1 -invokestatic fib/fib/write(I)V +Loop_end_0: + ldc "Result" + invokestatic fib/fib/print(Ljava/lang/String;)V + iload 2 + invokestatic fib/fib/write(I)V - return - + return .end method