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