ASM Pareri su codice mips

Stato
Discussione chiusa ad ulteriori risposte.

Laempo

Utente Electrum
1 Agosto 2014
287
16
100
147
Ultima modifica:
Salve a tutti,
ho un esercizio da svolgere la cui consegna è la seguente (spoiler):
Senza utilizzare le istruzioni di salto condizionato:
  • Realizzare un contatore in assembly che incrementi il valore di un registro fino ad un valore predefinito e, una volta raggiunto quel valore, lo azzeri prima di ritornare ad incrementarlo.
  • Aggiungere al punto precedente un secondo contatore che conti quante volte il primo sia stato azzerato
Si consiglia di utilizzare le istruzioni “SEQ” e "REM", oltre al JUMP incondizionato.

Il codice che ho scritto è il seguente
Codice:
        .data
        .text
        .globl main
main:   addi $t7, 4         # max = 4
        addi $t8, 4          # costante 4
initialize:  
         la $t5, doNothing        # carico indizizo base in t5
       
continue:   
        addi $t0, 1              # incremento
        seq $t2, $t0, $t7     # t0 == t7 ? t2 = 1 : t2 = 0
        # calcolo l indirizzo di salto    
        mul $t2, $t2, $t8              
        add $t4, $t2, $t5
       
        jr $t4           # in base all'indirizzo calcolato esegue un salto all indirizzo corretto

doNothing:   
          jal continue # se sono arrivato qui allora devo continuare a incrementare
else:    
        addi $t9, 1 # incremento contatore degli azzeramenti
        mul $t0, $t0, $zero # azzero il contatore e continuo ad iterare
        j initialize
Vorrei chiedere qualche suggerimento in merito a questo codice per sapere cosa posso migliorare in chiarezza o in efficienza o in qualsiasi altro modo potete suggerire.
Un grazie a chi risponderà
 
L'istruzione addi se non ricordo male vuole 3 operandi mentre tu glie ne passi 2. Dovrebbe mancare il registro in cui salvi il risultato dell'operazione
 
Sì ciò che dici è corretto, difatti ammetto che ho dimenticato di operatore. Tuttavia qtspim, non so se è il solo che opera in questo modo, mi perdona eseguendo correttamente l'istruzione addi $rs, $rt, imm
 
Quindi nell'istruzione addi $t7, 4 mette in $t7 il valore 4 correttamente? Se così fosse avranno implementato una funzione che mette r0 di default quando ometti l'operando. Devo provare questo simulatore
 
Stato
Discussione chiusa ad ulteriori risposte.