progs/fib.j
changeset 545 76a98ed71a2a
parent 471 9476086849ad
child 600 d488a3e7b0ec
--- 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 <init>()V
-   aload_0
-   invokenonvirtual java/lang/Object/<init>()V
-   return
+    aload_0
+    invokenonvirtual java/lang/Object/<init>()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