Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    [assember mips] stringhe

    Ho un piccolo problema con un programma che dovrebbe acquisire una stringa da tastiera che rappresenta un'istruzione mips e convertirla con rispettivo codice binario. Io pensavo di acquisire la stringa e guardare il primo carattere per cominciare a vedere che tipo di istruzione è. Nel senso: se immetto lw $t1, 0($t2) vado a vedere la l e comincio già a capire che è una load. Il mio problema è però che nn riesco a capire come fare per prendere uno o + caratteri dalla stringa. Qualcuno mi può aiutare?? ve ne sarei molto grato!

  2. #2
    Utente di HTML.it L'avatar di floyd
    Registrato dal
    Apr 2001
    Messaggi
    3,837
    usa load byte che è simile a load word lb %t1 0($t2)

  3. #3
    grazie quello sono riuscito a farlo, però una volta che ho capito che è una load ad esempio, devo riuscire a capire qual'è il codice del registro. come faccio senza usare una marea di stringhe e confronti? in pratica quello che voglio fare io è: se il registro è a0 deve restituirmi il codice 4, per a1 il codice 5 e così via...

  4. #4
    Utente di HTML.it L'avatar di floyd
    Registrato dal
    Apr 2001
    Messaggi
    3,837
    alla fine sono pochi i registri, $t $s $a $v
    una buona ottimizzazione sarebbe guardare il carattere e il numero in modo separato, ad esempio i $a e $v ricordo che sono consecutivi, dunque se sai che $a parte da 4 dopo aggiungi il numero, in pratica $a0 = 4+0, $a1 = 4+1

  5. #5
    si infatti era quello che volevo fare, però il problema è uno... se io leggo la prima lettera del registo, supponiamo sia a, so che dovrò sommare a qualcosa il numero 4. Poi vado a leggere il secondo carattere, però questo me lo restituisce come stringa e nn come intero. quindi se leggo 0 nn leggo il numero ma la stringa. come faccio a fargli capire che deve interpretarlo come intero?

  6. #6
    Utente di HTML.it L'avatar di floyd
    Registrato dal
    Apr 2001
    Messaggi
    3,837
    facile questo
    $t1 = '1'
    addi $t1 $t1 -48

  7. #7
    grazie mille! nn so come avrei fatto senza di te! ora provo, al massimo torno a rompere le scatole...

  8. #8
    altro piccolo problemino...
    perchè se scrivo questa cosa
    codice:
      addi $t4, $t3, 4
    	li $v0, 1
    	move $a0, $t4
    	syscall
    avendo t3=0 mi stampa 467?? nn riesco a capire! anche guardando i registri in t4 ottengo 4, però poi mi cambia il contenuto di a0 e nn capisco perchè..
    edit: come nn detto, c'era una parte di codice che nn serviva a niente e mi stampava cose strane!

  9. #9
    scusa se disturbo ancora ma questa volta ho un problema serio. ti riporto una parte di codice per farti capire cosa dovrei fare
    codice:
    	beq $t2, $s2, sa
    	beq $t2, $s5, sv
    	beq $t2, $s6, st
    	beq $t3, $s7, sp	
    	beq $t2, $s4, ss
    	proc:
    	.
            .
            .
            proc1
    	beq $t2, $s2, sa
    	beq $t2, $s5, sv
    	beq $t2, $s6, st
    	beq $t3, $s7, sp	
    	beq $t2, $s4, ss
    	
    	j rit
    in pratica dovrebbe eseguire la prima parte, tornare a proc, andare avanti, eseguire il secondo pezzo di beq e ritornare a proc1. Come faccio però usando sempre le stesse procedure (sa, sv, st, sp, ss) a tornare una volta da una parte e una volta dall'altra? pensavo di memorizzare lo sp in $ra però nn riesco e nn so come fare...

    edit: già che ci sono chiedo anche un altra cosa. una volta che ho tutto, codice operativo, e codice dei vari registri, come faccio a metterli assieme per creare un numero esadecimale o binario che mi rappresenta tutto?
    inoltre vorrei chiederti una cosa. se io dovessi riconoscere una addiu i primi due operandi sono registri ma il terzo è un numero. se è di un solo byte riesco a convertirlo, ma se è di + byte come faccio a prenderlo tutto intero e nn a pezzi?
    scusa se ti rompo così tanto ma è una cosa molto importante. grazie infinite!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.