progs/fib.j
changeset 617 f7de0915fff2
parent 612 7a12053567d4
child 624 8d0af38389bc
--- a/progs/fib.j	Tue Dec 04 00:33:26 2018 +0000
+++ b/progs/fib.j	Sat Dec 29 10:30:27 2018 +0000
@@ -13,11 +13,55 @@
     .limit stack 2 
     getstatic java/lang/System/out Ljava/io/PrintStream; 
     iload 0
-    i2c
-    invokevirtual java/io/PrintStream/print(C)V 
+    invokevirtual java/io/PrintStream/println(I)V 
     return 
 .end method
 
+.method public static writes(Ljava/lang/String;)V
+    .limit stack 2
+    .limit locals 1
+    getstatic java/lang/System/out Ljava/io/PrintStream;
+    aload 0
+    invokevirtual java/io/PrintStream/println(Ljava/lang/String;)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 
+    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 Label2
+    goto Label1 
+
+Label2: 
+    iload 1 ; when we come here we have our integer computed in local variable 1 
+    ireturn 
+.end method
+
 .method public static main([Ljava/lang/String;)V
    .limit locals 200
    .limit stack 200