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
Tutto e di + - MIPS Assembly
Forum - Tutto e di + - MIPS Assembly

Avatar
elisaaime (Normal User)
Newbie


Messaggi: 5
Iscritto: 24/03/2018

Segnala al moderatore
Postato alle 15:18
Sabato, 24/03/2018
Ciao a tutti, non sapevo dove scrivere la mia domanda perci lo sto facendo qui..

ho scritto questo programma che, inserita un stringa, dovrebbe contare quante '' ci sono. Il problema che non so come contare i caratteri accentati. Ho visto che nella tabella Ascii estesa '' corrisponde a 160 e il tutto funziona se la stringa la scrivo in memoria se invece la scrivo da tastiera non la legge. Ho visto che in quest'ultimo caso nei registri la '' corrisponde a 10 ma non penso sia molto corretto scrivere come nel modo che ho commentato mettendo di trovare appunto 10....

Quindi sono andato a guardare la tabella di Unicode dove per ogni carattere corrisponde a 2 byte quindi ho dovuto utilizzare la direttiva .halfword..ma sbaglio qualcosa e non funziona. qualcuno pu aiutarmi a risolvere questo problema?

Inoltre, se la stringa che inserisco dovesse contente "Buongiorno a tutti" come faccio a trovare la parola pi lunga nella stringa?

Codice sorgente - presumibilmente VB.NET

  1. .text
  2. .globl main
  3. main:
  4.  
  5. la $a0, richiesta
  6. li $v0, 4
  7. syscall
  8.  
  9. la $a0, STRINGA
  10. li $v0,8
  11. syscall
  12.  
  13. li $s0,0
  14. la $t0, STRINGA# punta al buffer che contiene la stringa acquisita
  15. lhu $t3,char
  16. #lbu $t3,char
  17.  
  18. loop:
  19. lbu $a0, ($t0)#carico un byte alla volta
  20. beqz $a0, fine#se 0 il terminatore della stringa
  21. beq  $a0,$t3,trovata
  22.  
  23. addi $t0,$t0,1# punta al carattere ( byte) successivo della stringa
  24. j loop
  25.  
  26. trovata:
  27. add $s0,$s0,1# aggiorna contatore vocali
  28. addi $t0,$t0,1# punta al carattere ( byte) successivo della stringa
  29. j loop
  30.  
  31. fine:   la $a0, risultato
  32. li $v0, 4
  33. syscall
  34.  
  35. li $v0,1
  36. move $a0,$s0# passa il numero di vocali totali alla syscall
  37. syscall
  38.  
  39. la $a0, spazio
  40. li $v0, 4
  41. syscall
  42.  
  43. li $v0,10
  44. syscall
  45.  
  46. .data
  47. STRINGA:                .space 255
  48. char:                 .half 133
  49. #char:                 .byte 10
  50. richiesta:              .asciiz "Immetti una stringa: "
  51. spazio:                 .asciiz "\n"
  52. risultato:              .asciiz "\nNumero vocali stringa: "


PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1620
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 15:30
Sabato, 24/03/2018
La parola pi lunga si trova contando il numero di caratteri prima dello spazio successivo e tenendo il puntatore al carattere iniziale della parola.

Dove stai fisicamente eseguendo il programma? Un emulatore o un pc linux con CPU MIPS?

PM Quote
Avatar
elisaaime (Normal User)
Newbie


Messaggi: 5
Iscritto: 24/03/2018

Segnala al moderatore
Postato alle 15:44
Sabato, 24/03/2018
Utilizzo qtspim su mac

PM Quote
Avatar
elisaaime (Normal User)
Newbie


Messaggi: 5
Iscritto: 24/03/2018

Segnala al moderatore
Postato alle 15:51
Sabato, 24/03/2018
Testo quotato

Postato originariamente da TheDarkJuster:

La parola pi lunga si trova contando il numero di caratteri prima dello spazio successivo e tenendo il puntatore al carattere iniziale della parola.

Dove stai fisicamente eseguendo il programma? Un emulatore o un pc linux con CPU MIPS?





Per quanto riguarda trovare la parola pi luna nella stringa ho risolto in questo modo
Codice sorgente - presumibilmente Tutto e di +

  1. .text
  2. .globl main
  3. main:
  4.  
  5. la $t2, stringa#carico in t2 l'indirizzo della stringa
  6. la $s3, massimo
  7.  
  8. li $t3, 0#massimo
  9. li $t1, 0#contatore caratteri
  10.  
  11.  
  12.  
  13.  
  14. ciclo:
  15. lbu $t0, ($t2)
  16. beq $t0, 32, salta
  17. beq $t0,$zero,fine_stringa
  18. addu $t1,$t1,1
  19. addu $t2, $t2,1
  20. j ciclo
  21.  
  22.  
  23.  
  24.  
  25.  
  26.  
  27. salta:
  28.  
  29. sltu $t5, $t1, $t3 #se il numero minore del massimo allora $t5 uguale ad 1
  30.  
  31. beqz $t5, nuovo
  32. #se maggiore del massimo t1 diventa il nuovo massimo cio t3
  33. li $t1, 0
  34. addu $t2, $t2,1
  35. j ciclo
  36.  
  37.  
  38.  
  39. nuovo:
  40. move $t3, $t1
  41. li $t1, 0
  42. addu $t2, $t2,1
  43. j ciclo
  44.  
  45.  
  46. fine_stringa:
  47. sltu $t5, $t1, $t3
  48.  
  49. beqz $t5, nuovo_fine
  50. j fine
  51.  
  52. nuovo_fine:
  53. move $t3, $t1
  54. j fine
  55.  
  56. fine:
  57. sb $t3, ($s3)
  58.  
  59.  
  60. li $v0, 10
  61. syscall
  62.  
  63.  
  64.  
  65. .data
  66.  
  67. stringa:                .asciiz "ciao a tutti"
  68. massimo:




dovrebbe essere giusto?


Il mio problema proprio con i caratteri accentati, se uso Ascii esteso non me li stampa e unicode non so come usarlo,.... inoltre usando ascii esteso me li conta come due caratteri e non come uno solo (per esempio guardando i registri vedo che la corrisponde a byte 95 e poi byte 160 invece che solo byte 160)

PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1620
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 19:07
Sabato, 24/03/2018
Non esiste una direttiva sull'emulatore per forzare l'uso di un set di caratteri specifico?

PM Quote
Avatar
elisaaime (Normal User)
Newbie


Messaggi: 5
Iscritto: 24/03/2018

Segnala al moderatore
Postato alle 11:47
Domenica, 25/03/2018
Testo quotato

Postato originariamente da TheDarkJuster:

Non esiste una direttiva sull'emulatore per forzare l'uso di un set di caratteri specifico?



che io sappia no....

PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1620
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 13:58
Domenica, 25/03/2018
E hai cercato nel manuale e nel programma?

PM Quote
Avatar
elisaaime (Normal User)
Newbie


Messaggi: 5
Iscritto: 24/03/2018

Segnala al moderatore
Postato alle 15:43
Domenica, 25/03/2018
Testo quotato

Postato originariamente da TheDarkJuster:

E hai cercato nel manuale e nel programma?



si ma non trovo niente.

PM Quote