Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Altri Linguaggi - IJVM
Forum - Altri Linguaggi - IJVM

Pagine: [ 1 2 3 ] Precedente | Prossimo
Avatar
scura (Normal User)
Newbie


Messaggi: 3
Iscritto: 30/06/2009

Segnala al moderatore
Postato alle 14:12
Martedì, 30/06/2009
Ciao ragazzi,
devo implementare tre metodi in IJVM, sono simili quindi ne scrivo solo uno:
-metodo che restituisce 1 al TOS se il carattere ascii passato è alfabetico minuscolo( da ascii 0x61 ad ascii 0x7A), 0 altrimenti.

è da poco che uso l'IJVM e nn so come fare...
grazie in anticipo

PM Quote
Avatar
antometal (Member)
Guru


Messaggi: 691
Iscritto: 12/09/2007

Segnala al moderatore
Postato alle 15:45
Martedì, 30/06/2009
innanzitutto ti serve il metodo o comunque il codice che legge il carattere da tastiere, lo hai?
una volta acquisito il carattere (sullo stack hai l' ascii del carattere) ti conviene salvaro in una variabile, dichiarata nel metodo (puoi anche non farlo e usare solo lo stack, ma se sei alle prima armi è meglio di si)

a questo punto devi controllolare se l' ascii del carattere è compreso tra 0x61 e 0x7A
per far ciò, puoi usare solo l' istruzione IFLT offset, la quale esegue le istruzioni dopo la label offset, solose il valoro in cima allo stack è negativo

es.
Codice sorgente - presumibilmente Delphi

  1. iload x     /porta il valore della var x in cima allo stack
  2. dup         /duplica il valore in cima allo stack, perchè la iflt decrementa lo stack pointer
  3. iflt neg    /se il valore in cima allo stack è <0, va a neg
  4. bipush 20   /altrimenti esegue il codice dopo la iflt
  5. iadd
  6. goto fine   /va alla label fine
  7. neg:
  8. bipush 30
  9. isub
  10. fine:
  11. halt



se la x<0 il codice fa x+20 ed esce
se la x>=0 il codice fa x-30 ed esce

per il tuo codice devi fare 2 controlli, e siccome puoi usare solo la iflt, devi usare anche la isub

x:ascii del carattere

x deve essere >=0x61 riducibile in x>0x60 perchè lavori solo con numeri interi, lo devi ancora trasformare come (...)<0 in questo caso: 0x60-x<0

in codice:
Codice sorgente - presumibilmente Plain Text

  1. bipush 0x60
  2. iload x
  3. isub             //isub,fa la differenza l' elemento al top dello stack (che verrà eliminato)e quello appana sotto (che sarà modificato come risultato)
  4. iflt maggiore_60
  5. ireturn 0
  6. maggiore_60



alla label maggiore_60 (sei sicuro che x sia >=0x61), devi fare una cosa analoga al codice sopra, ma con 0x7A

fammi sapere se hai ancora bisogno

PM Quote
Avatar
scura (Normal User)
Newbie


Messaggi: 3
Iscritto: 30/06/2009

Segnala al moderatore
Postato alle 16:12
Martedì, 30/06/2009
visto che ci sei....mi puoi scrive anche il codice per l'input?
grazie

PM Quote
Avatar
antometal (Member)
Guru


Messaggi: 691
Iscritto: 12/09/2007

Segnala al moderatore
Postato alle 16:40
Martedì, 30/06/2009
questo è il metodo che input + semplice, lo devi inserire nell' altro che stai facendo

Codice sorgente - presumibilmente Delphi

  1. .method input()
  2. getch:
  3.         IN              // Legge un carattere
  4.         DUP             // Duplica il top dello stack
  5.         IFEQ reread     // Se è = 0 (nessun tasto)
  6.         GOTO done       // Tasto premuto, procedi
  7.        
  8. reread:
  9.         POP             // Cancella il duplicato
  10.         GOTO getch      // Torna in attesa
  11.        
  12. done:
  13.         ireturn         // Ritorna il top dello stack
  14. .end-method


PM Quote
Avatar
MiDDiO (Normal User)
Newbie


Messaggi: 9
Iscritto: 15/07/2009

Segnala al moderatore
Postato alle 17:07
Mercoledì, 15/07/2009
Io ho un progetto molto simile... sempre con tre funzioni ti riconoscere l'esadcimale è numerico albafetico o alfanumerico ( alfabetico sono intese minuscoli e maiscole)..
ho provato a fare intanto il pezzo dei numerici premetto che non sono bravo.. pero mi da un errore e non riesco a capire perchè... se potete darmi una mano ne sarei contento...

Codice sorgente - presumibilmente Altri Linguaggi

  1. .constant
  2. esadecimale      0x33   // numero 2 in esadecimale
  3. masknumerico1    0x-10 // maschera posta in complemento a due per controllare i 4 bit più significativi
  4. masknumerico2    0x30  // maschera per controllare se è nei numerici
  5. masknumerico3    0xF   // maschera per tirar fuori gli ultimi 4 bit
  6. masknumerico4    0xA   // maschera per confrontare se è nel limite superiore dei numerici
  7. .end-constant
  8.  
  9. .main
  10. bipush 0
  11. ldc_w esadecimale
  12. invokevirtual isnum
  13. halt
  14. .end-main
  15.  
  16. .method isnum(v)
  17. ldc_w masknumerico1
  18. iload v
  19. iand
  20. ldc_w masknumerico2
  21. if_icmpeq controllo2   // se è vero non sara numerico, altrimenti bisogna fare il controllo per vedere se è minore di 0x3A
  22. bipush 0
  23. ireturn
  24.  
  25. controllo2:
  26. ldc_w masknumerico3
  27. iload v
  28. iand
  29. ldc_w masknumerico4
  30. isub
  31. iflt Numerico   // confronto se è minore di 0x3A se falso 0 nel TOS altrimenti 1
  32. bipush 0
  33. ireturn


PM Quote
Avatar
MiDDiO (Normal User)
Newbie


Messaggi: 9
Iscritto: 15/07/2009

Segnala al moderatore
Postato alle 21:32
Lunedì, 20/07/2009
Nessuno sa darmi una mano ?

PM Quote
Avatar
antometal (Member)
Guru


Messaggi: 691
Iscritto: 12/09/2007

Segnala al moderatore
Postato alle 0:21
Martedì, 21/07/2009
che errore da?
lo compila il file?

PM Quote
Avatar
MiDDiO (Normal User)
Newbie


Messaggi: 9
Iscritto: 15/07/2009

Segnala al moderatore
Postato alle 15:34
Martedì, 21/07/2009
No non me lo compila... quando uso il ijvm assembler mi da errore ora te lo allego quello che mi scrive nel Dos...


MiDDiO ha allegato un file: Immagine.jpg (86690 bytes)
Clicca qui per guardare l'immagine
PM Quote
Avatar
antometal (Member)
Guru


Messaggi: 691
Iscritto: 12/09/2007

Segnala al moderatore
Postato alle 20:27
Martedì, 21/07/2009
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

PM Quote
Pagine: [ 1 2 3 ] Precedente | Prossimo