Soluzione proposta da DJGecchi

Abbiamo il metodo generico

.method div( N , M )
.var
    COUNT
 .end_var
	 	
//inizializzo count
	BIPUSH 0
	ISTORE COUNT


//ciclo while: il ciclo deve continuare finché (n >= m) ovvero
//deve terminare quando (n < m), che equivale a (n ? m < 0)
loop:	ILOAD N
	ILOAD M
	ISUB
	DUP //duplico il risultato di n-m: servirà all?interno del while
	IFLT end

//corpo del while:
	ISTORE N //memorizzo il risultato di n-m, che avevo eseguito poco fa, in n
	IINC COUNT 1 //count++
	GOTO loop

end:	ILOAD COUNT //viene restituito il contatore
	IRETURN
.end_method



poiché questo metodo non funziona se uno dei due numeri è negativo, dobbiamo effettuare dei controlli 

.method div( N , M )
.var
    COUNT
.end_var
 	
//controllo se N è negativo:
	ILOAD N
	IFLT ltn
//controllo se M è negativo:
	ILOAD M
	IFLT ltm
//se il metodo è arrivato fin qui, nessuno dei parametri è negativo
//inizializzo count
	BIPUSH 0
	ISTORE COUNT

//ciclo while: il ciclo deve continuare finché (n >= m) ovvero
//deve terminare quando (n < m), che equivale a (n ? m < 0)
loop:	ILOAD N
	ILOAD M
	ISUB
	DUP //duplico il risultato di n-m: servirà all?interno del while
	IFLT end

//corpo del while:
	ISTORE N //memorizzo il risultato di n-m, che avevo eseguito poco fa, in n
	IINC COUNT 1 //count++
	GOTO loop

end:	ILOAD COUNT //viene restituito il contatore
	IRETURN

ltn:	BIPUSH 0 //metto uno zero sullo stack
        LDCW objref	 //chiamo lo stesso metodo con i parametri ?n e m
        BIPUSH 0
  	ILOAD N
	ISUB //calcolo -n
	ILOAD M
	INVOKEVIRTUAL div
	ISUB //sottraggo il risultato di div a 0, in modo da ottenere -div
	IRETURN //return -div(-n,m)

ltm:	BIPUSH 0 //metto uno zero sullo stack
        LDCW objref	 //chiamo lo stesso metodo con i parametri n e -m
 	ILOAD N
	BIPUSH 0
	ILOAD M
        ISUB //calcolo -m
 	INVOKEVIRTUAL div
	ISUB //sottraggo il risultato di div a 0, in modo da ottenere -div
	IRETURN //return -div(n,-m)

.end_method

