.constant OBJREF 0x40 endline 0x3b .end-constant .main .var x y .end-var LDC_W OBJREF INVOKEVIRTUAL input ISTORE x LDC_W OBJREF INVOKEVIRTUAL input ISTORE y while: ILOAD x ILOAD y ISUB DUP IFEQ end_while IFLT end_while LDC_W OBJREF ILOAD y DUP INVOKEVIRTUAL mul LDC_W OBJREF SWAP BIPUSH 2 INVOKEVIRTUAL mod IFEQ then ILOAD y LDC_W OBJREF ILOAD x LDC_W OBJREF ILOAD y INVOKEVIRTUAL fun2 IADD INVOKEVIRTUAL fun1 IADD ISTORE y GOTO end_if then: IINC y 0x2 end_if: GOTO while end_while: LDC_W OBJREF ILOAD y INVOKEVIRTUAL fun1 LDC_W OBJREF ILOAD x INVOKEVIRTUAL fun2 IADD LDC_W OBJREF SWAP INVOKEVIRTUAL print HALT .end-main .method fun1(x) .var i .end-var BIPUSH 3 ISTORE i for: ILOAD x ILOAD i ISUB DUP IFEQ end_for IFLT end_for ILOAD x BIPUSH 3 ISUB DUP IFEQ else2 IFLT else2 IINC i 0x1 GOTO end_if else2: IINC i 0x2 end_if: IINC i 0x2 GOTO for end_for: ILOAD i IRETURN .end-method .method fun2(y) while: ILOAD y BIPUSH 4 ISUB DUP IFEQ end_while IFLT end_while IINC y 0x-1 GOTO while end_while: ILOAD y IRETURN .end-method .method mul(i, j) ILOAD j IFEQ zero IINC j -1 ILOAD i IFEQ zero LDC_W OBJREF ILOAD i ILOAD j INVOKEVIRTUAL mul ILOAD i IADD GOTO fine zero: BIPUSH 0x0 fine: IRETURN .end-method .method mod (a, b) ILOAD a IFEQ stop ILOAD a ILOAD b ISUB IFLT stop LDC_W OBJREF ILOAD a ILOAD b ISUB ILOAD b INVOKEVIRTUAL mod GOTO fine stop: ILOAD a fine: IRETURN .end-method .method div (a, b) ILOAD a ILOAD b ISUB IFLT stop LDC_W OBJREF ILOAD a ILOAD b ISUB ILOAD b INVOKEVIRTUAL div BIPUSH 1 IADD GOTO fine stop: BIPUSH 0x0 fine: IRETURN .end-method .method input() .var num .end-var BIPUSH 0x0 ISTORE num loop: IN DUP LDC_W ENDLINE ISUB IFEQ stop BIPUSH 0x30 ISUB LDC_W OBJREF ILOAD num BIPUSH 10 INVOKEVIRTUAL mul IADD ISTORE num GOTO loop stop: ILOAD num IRETURN .end-method .method print(x) ILOAD x IFEQ printz LDC_W OBJREF ILOAD x INVOKEVIRTUAL print_digits GOTO end printz: BIPUSH 0x30 OUT end: BIPUSH 0 IRETURN .end-method .method print_digits(x) .var char .end-var ILOAD x IFEQ end LDC_W OBJREF ILOAD x BIPUSH 10 INVOKEVIRTUAL mod BIPUSH 0x30 IADD ISTORE char LDC_W OBJREF ILOAD x BIPUSH 10 INVOKEVIRTUAL div LDC_W OBJREF SWAP INVOKEVIRTUAL print_digits ILOAD char OUT end: BIPUSH 0 IRETURN .end-method