Domanda

Sto lavorando su un codice MIPS per la mia classe Organizzazioni Computer, e ben io proprio non riesco a ottenere il MIPS per funzionare correttamente e non c'è che molti MIPS risorse on-line. Sono in esecuzione il codice a PCSPIM. Il codice dovrebbe aggiungere 10 al contenuto del matrice2 e memorizzarli in array1 e poi serie di stampa 1. Rielaborato il codice funziona correttamente ora.

.text
main:
    la $t0, array1
    la $t1, array2
    la $s0, valuec
    li $s2, 6
    add $t6, $zero, 1 #i = 1

Loop:
    addi $t6, $t6, 1 #i++

    lw  $t2, ($t0)
    lw  $t5, ($t1)
    lw  $s1, ($s0)
    addu $t2, $t5, $s1
    sw  $t2, ($t0)
    add $t0, $t0, 4
    add $t1, $t1, 4
    li $v0, 1
    move $a0, $t2
    syscall
    blt $t6, $s2, Loop

    li $v0, 10
    syscall
.data
    array1: .space 20
    array2: .word 1,2,3,5,9
    valuec: .word 10

stampe PCSPIM 0 5 volte e torna Eccezione 7 [Bad dati Indirizzo] si è verificato e ignorato

È stato utile?

Soluzione

Si tratta di compiti a casa, quindi sono solo andando a darvi indizi per ora e aggiungere ad esso, come si va. Un paio di cose:

1 / Hai bisogno di dirci che cosa è dovrebbe da fare. Questa è la cosa più importante.

2 / È memorizzare l'indirizzo array1 in t0 poi riutilizzare t0 entro il primo ciclo.

3 / Si sembrano essere confusi su indirizzi e il contenuto di tali indirizzi ("la $s0, valuec" e "addu $t0, $t1, $s0").

UPDATE:

In realtà devo firmare per un po ', quindi vi posto la mia soluzione in modo da non lasciare in asso.

La confusione ho fatto riferimento prima è stato il fatto che si sta caricando due indirizzi in $ t1 e $ s0, quindi l'aggiunta di loro insieme per ottenere un altro indirizzo - questo è probabile che sia ben oltre la vostra zona di dati (si dovrebbe davvero essere l'aggiunta di un indirizzo e un offset).

Questo è fondamentalmente il problema che hai con il tuo codice (sia gli zeri in fase di stampa e l'incidente). La cosa migliore sarebbe quella di risolvere questo e fare riferimento al mio codice di seguito solo come ultima risorsa per vedere come avrei fatto. codice di copiatura non vi aiuterà a lungo termine e si sarebbe saggio per assumere il vostro educatore è anche controllando tutti i siti web per plagio.

Questo è il codice che è venuta in mente (in fretta, quindi avrai bisogno di provarlo - si può avere bug). Vi consiglio di leggere i commenti in grande dettaglio per comprendere quello che sta facendo.

Torno in poche ore per vedere come si sta facendo. Cin cin.

.text
main:

# Initialization of array pointers and loop

    la      $t0, array1       # address of array 1
    la      $t1, array2       # address of array 2
    li      $t2, 1            # element number
    li      $t3, 6            # upper limit of elements

# Process each word in array 2, adding 10 and placing
# into array 1.

Loop:
    lw      $t3, 0($t1)       # get word from array 2
    addi    $t3, $t3, 10      # add 10 to word
    sw      $t3, 0($t0)       # store word into array 1
    addi    $t0, $t0, 4       # move to next entry in array 1 and 2
    addi    $t1, $t1, 4
    addi    $t2, $t2, 1       # increment element number
    blt     $t2, $t3, Loop    # loop until all elements done

# Initialize printing loop by going back to start of array 1

    la      $t0, array1       # address of array 1
    li      $t2, 1            # element number

# Loop through array 1, printing each element.

pLoop:  
    lw      $t2, 0($t0)       # get word from array 1
    li      $v0, 1            # 'print' command code
    move    $a0, $t2          # needs value in $a0
    syscall                   # print it
    addi    $t0, $t0, 4       # move to next entry in array 1
    addi    $t2, $t2, 1       # increment element number
    blt     $t2, $t3, Loop    # loop until all elements done

    li      $v0, 10           # 'terminate' command code
    syscall                   # exit

# Data arrays for array 1 and 2

.data
array1: .word 0,0,0,0,0
array2: .word 1,2,3,4,5

Altri suggerimenti

C'è un certo numero di possibili problemi, ma la più ovvia / probabile è che non si sta ritornando dalla principale prima dell'inizio della vostra sezione di dati.

jr ra
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top