(a)

Quella descritta e' una delle tante possibilita' con cui
realizzare la conversione da binario in decimale.
Per semplicita' supponiamo che b3,b2,b1,b0 rappresentino
numeri naturali, che cioe' non siano la rappresentazione in
complemento a due di numeri interi.
 
 
.method conv (b3,b2,b1,b0)
.var
count
partial
.end-var
 
             ILOAD b0
             ILOAD b1
             ILOAD b2
             ILOAD b3          //pongo i 4 bit sullo stack, dal meno al piu' significativo
             BIPUSH 4
             ISTORE count      //inizializzazione contatore bit
             BIPUSH 0
             ISTORE partial    //inizializzazione risultato parziale
loop:        ILOAD partial
             DUP
             ADD
             ISTORE partial    // moltiplica per 2 il risultato parziale
             IFEQ updatecount  // salta se il bit b(count-1) e' 0
             IINC partial 1    // se l'i-esimo bit e' 1 incrementa risultato parziale
updatecount: IINC count -1     // decrementa contatore
             ILOAD count
             IFEQ end          // termina se contatore = 0
             GOTO loop
end:         ILOAD partial         
 
.end-method
 
LDC_W OBJREF
BIPUSH 1
BIPUSH 1
BIPUSH 0
BIPUSH 1
INVOKEVIRTUAL conv
 
Questo codice ha quattro argomenti
e due variabili locali. Questo significa che i 4 byte che precedono
questo codice quando inserito nella Method Area sono (in esadecimale)
  0x00 0x05 0x00 0x02
                            

Ovviamente per dare una soluzione dell'esercizio,
non ci sarebbe neanche bisognio di applicare l'algoritmo
di conversione da binario a decimale, visto che in IJVM i numeri sono 
rappresentati poi in binario.
E' sufficiente quindi prendere gli argomenti e porli in sequenza.
Si puo' quindi procedere nel modo seguente:


ILOAD 1  // metto b3 sullo stack
DUP      // lo sommo a se stesso per shiftarlo a sinistra di una posizione
IADD
ILOAD 2  //pongo il bit rappresentato da b2 a sinistra di quello rappresentato da b3 
IADD 
DUP      // faccio lo stesso per gli altri tre bit 
IADD
ILOAD 3
IADD
DUP 
IADD
ILOAD 4
IADD
IRETURN


(b)
L'argomento di IINC non puo' essere 7, visto che il metodo ha solo 2
variabili locali e un argomento.
  
