diff -r 33c4b580092b -r d488a3e7b0ec progs/fib.j --- a/progs/fib.j Mon Nov 12 11:33:51 2018 +0000 +++ b/progs/fib.j Tue Nov 13 08:16:48 2018 +0000 @@ -3,104 +3,92 @@ .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 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 +.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 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 +.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 - 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 +invokestatic fib/fib/read()I +istore 0 +ldc 0 +istore 1 +ldc 1 +istore 2 +ldc 0 +istore 3 -Loop_start_1: - - iload 0 - ldc 0 - if_icmple Loop_end_0 +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 +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 - goto Loop_start_1 +Loop_end_3: -Loop_end_0: +iload 1 +invokestatic fib/fib/write(I)V - ldc "Result" - invokestatic fib/fib/print(Ljava/lang/String;)V - iload 2 - invokestatic fib/fib/write(I)V - return + return + .end method