diff -r 24bbe4e4b37b -r f7de0915fff2 progs/fib.j --- 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