--- 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