// product.jas
.constant
OBJREF 0x40			// needed for method invokation - see S.C.O. chapter 4
.end-constant

.main				// start of program
	LDC_W OBJREF		// do not forget to push OBJREF on stack!
	BIPUSH 0x15		// paramater n (i.e., n = 21)
	BIPUSH 0x9		// paramater m (i.e., m = 9)
	INVOKEVIRTUAL product
	HALT			// stops program execution
.end-main

.method product(n,m)		// takes two arguments ("n" and "m")
.var
temp				// change variable names as needed
.end-var

	// just some code example:
	BIPUSH 0x00
	ISTORE temp
loop:
  ILOAD m
  IFEQ end
  ILOAD temp
	ILOAD n
	ILOAD m
	IFLT subsum
  IADD
	GOTO donesum
subsum:
	ISUB
donesum:
  ISTORE temp
  ILOAD m
	BIPUSH 1
	ILOAD m
	IFLT add
	ISUB
  GOTO update
add:
  IADD
update:
  ISTORE m
  GOTO loop
end:
	// this is obviously very useful
	ILOAD temp
	IRETURN
.end-method
