Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. 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: 1600
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: 1600
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: 1600
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