progs/fib.j
author Christian Urban <urbanc@in.tum.de>
Thu, 26 Sep 2019 10:59:52 +0100
changeset 632 b7b91158eded
parent 624 8d0af38389bc
child 675 d665e7dd66d7
permissions -rw-r--r--
updated


.class public fib.fib
.super java/lang/Object

.method public <init>()V
   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 
.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 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

; COMPILED CODE STARTS

   ldc 10
   istore 0
   ldc 0
   istore 1
   ldc 1
   istore 2
   ldc 0
   istore 3
Loop_begin_0:
   ldc 0
   iload 0
   if_icmpge Loop_end_1
   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_0
Loop_end_1:
   iload 1
   invokestatic fib/fib/write(I)V

; COMPILED CODE ENDS
   return

.end method