Questo topic e' stato chiuso dal moderatore.
21/06/11 14:22
matteomircoli
Ciao ragazzi devo risolvere un problema in ijvm si tratta di contare in una word a 32 bit se il numero di bit settati a 1 è pari o dispari e bisogna restituire il risultato al tos
io ho fatto nel seguente modo:
il mio unico problema è che il risultato non sta nel tos
grazie in anticipo
matteo
risolto
io ho fatto nel seguente modo:
.constant valx 0x79 objref 0x0 .end-constant .main .var z .end-var LDC_W objref LDC_W valx INVOKEVIRTUAL contabit // DUP OUT HALT .end-main .method contabit(p) .var a x //Maschera count //Contatore .end-var BIPUSH 1 ISTORE a BIPUSH 1 //Inizializzo la maschera a 0000...0001 (32bit) ISTORE x BIPUSH 0 //Inizializzo il contatore a 0 ISTORE count e1: ILOAD x //Se la maschera è 0 significa che ho //controllato tutti e 32bit //(è a 0 perchè è andata in overflow) IFEQ fine //Quindi salto a fine ILOAD x //Carico la maschera ILOAD p //Carico il numero IAND //Ne faccio l'and logico IFEQ e2 //Se è 0 significa che il bit che sto //controllando è 0 IINC count 1 //Se invece non è 0, significa che è presente //un 1 e quindi incremento il contatore e2: ILOAD x //Faccio uno shift a sinistra di 1 bit della //maschera DUP IADD ISTORE x GOTO e1 //Ripeto il controllo fine: ILOAD count //Metto sullo stack il contatore BIPUSH 1 IAND IFEQ pari // BIPUSH 0x1 // torna 1 se è dispari BIPUSH 1 ILOAD a IRETURN pari: BIPUSH 0x0 //torna zero se è pari IRETURN .end-method
il mio unico problema è che il risultato non sta nel tos
grazie in anticipo
matteo
risolto
Ultima modifica effettuata da matteomircoli 14/07/11 19:04
aaa