progs/fib.j
author Christian Urban <urbanc@in.tum.de>
Sun, 05 Aug 2018 21:52:40 +0100
changeset 554 2509c670e3a2
parent 545 76a98ed71a2a
child 600 d488a3e7b0ec
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 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 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

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

    iload 0
    ldc 0
    if_icmple Loop_end_0

    iload 2
    istore 3
    iload 1
    iload 2
    iadd
    istore 2
    iload 3
    istore 1
    iload 0
    ldc 1
    isub
    istore 0

    goto Loop_start_1

Loop_end_0:

    ldc "Result"
    invokestatic fib/fib/print(Ljava/lang/String;)V
    iload 2
    invokestatic fib/fib/write(I)V

    return
.end method