Oppure

Loading
21/07/09 18:27
antometal
intanto il codice che hai postato è incompleto (così com' è non lo compilerà;), manca la costante objref e ldc_w objref prima dei parametri dell' invokevirtual

posta il codice completo, così lo provo anche io
aaa
22/07/09 8:36
MiDDiO
questo è tutto il codice spero di aver mezzo giusto objref che mi avevi detto... cmq grazie mille per il tuo aiuto ;)

.constant
esadecimale      0x33   // numero 2 in esadecimale
masknumerico1    0x-10 // maschera posta in complemento a due per controllare i 4 bit più significativi 
masknumerico2    0x30  // maschera per controllare se è nei numerici 
masknumerico3    0xF   // maschera per tirar fuori gli ultimi 4 bit 
masknumerico4    0xA   // maschera per confrontare se è nel limite superiore dei numerici
Objref           0x00
.end-constant 

.main
ldc_w Objref
ldc_w esadecimale
invokevirtual isnum
halt 
.end-main

.method isnum(v)
ldc_w masknumerico1
iload v 
iand
ldc_w masknumerico2
if_icmpeq controllo2   // se è vero non sara numerico, altrimenti bisogna fare il controllo per vedere se è minore di 0x3A
bipush 0 
ireturn

controllo2: 
ldc_w masknumerico3
iload v 
iand
ldc_w masknumerico4
isub
iflt Numerico   // confronto se è minore di 0x3A se falso 0 nel TOS altrimenti 1
bipush 0 
ireturn

Numerico:
bipush 1
ireturn
.end-method



cmq dopo l'aggiunta di objref invece che bipush 0
l'errore ora è un altro ma penso che conti le righe perche sono sempre quelle cmq te lo inserisco qui sotto
aaa
22/07/09 11:34
antometal
penso che l' errore sia nella dichiarazione della costante:
masknumerico1 0x-10
devi invece assegnarle: -0x10 oppure il conplemento a 2 0xF0, ma è molto meglio -0x10
aaa
22/07/09 13:23
MiDDiO
ho provato a cambiare con -0x10 ma da un altro errore io non so piu dove sbattere la testa... cmq ti posto l'errore nuovo che crea
aaa
22/07/09 14:19
antometal
io ho modificato il tuo codice così e mi funziona

.constant
esadecimale      0x33   // numero 2 in esadecimale
masknumerico1    -0x10 // maschera posta in complemento a due per controllare i 4 bit più significativi
masknumerico2    0x30  // maschera per controllare se è nei numerici
masknumerico3    0xF   // maschera per tirar fuori gli ultimi 4 bit
masknumerico4    0xA   // maschera per confrontare se è nel limite superiore dei numerici
objref           0xEE
.end-constant

.main
	ldc_w objref
	ldc_w esadecimale
	invokevirtual isnum
	halt
.end-main

.method isnum(v)
	ldc_w masknumerico1
	iload v
	iand
	ldc_w masknumerico2
	if_icmpeq controllo2   // se è vero non sara numerico, altrimenti bisogna fare il controllo per vedere se è minore di 0x3A
	bipush 0
	ireturn

controllo2:
	ldc_w masknumerico3
	iload v
	iand
	ldc_w masknumerico4
	isub
	iflt Numerico   // confronto se è minore di 0x3A se falso 0 nel TOS altrimenti 1
	bipush 0
	ireturn

Numerico:
	bipush 1
	ireturn
.end-method


se non dovesse andare ancora sostituisci -0x10 con 0xf0

fammmi sapere
aaa
23/07/09 13:52
MiDDiO
allora ora funziona ma usando 0xF0 non so perche non mi fa usa il complemento... cmq grazie mille ancora... se avro altri problemi e mi vorrai aiutare so a chi chiedere grazie di cuore..
aaa
23/07/09 14:56
antometal
figurati, chiedi pure quando vuoi
se non rispondo magari è xk non ho visto il post, mandami pure un messaggio
aaa
27/07/09 10:10
MiDDiO
Piccola notifica oggi ho provato a mettere 0x-10 e adesso funzina non so dirti perchè o per come ma ora funziona :-|. L'unica cosa che non capivo è l'obj perchè è messo a 0xEE e non 0x00 cioè svuotato.
aaa