Ceci est un devoir, donc je vais seulement vous donner des indices pour le moment et y ajouter au fur et à mesure. Un couple de choses:
1/Vous devez nous dire ce que c'est supposé à faire. C'est la chose la plus importante. 2/Vous stockez l'adresse array1 dans t0, puis réutilisez t0 dans la première boucle.
3/Vous semblez être confus au sujet des adresses et du contenu de ces adresses ("la $s0, valuec"
et "addu $t0, $t1, $s0"
).
MISE À JOUR:
En fait, je dois signer pendant un certain temps, donc je posterai ma solution afin de ne pas vous laisser dans l'embardée. La confusion que j'ai mentionnée précédemment était le fait que vous chargiez deux adresses dans $ t1 et $ s0, puis les additionnait pour obtenir une autre adresse - ceci est probablement bien au-delà de votre zone de données (vous devriez vraiment ajouter une adresse et un offset).
C'est essentiellement le problème que vous avez avec votre code (à la fois les zéros en cours d'impression et le crash). Votre meilleur pari serait de résoudre ce problème et de se référer à mon code ci-dessous seulement en dernier recours pour voir comment je l'aurais fait. Copier le code ne vous aidera pas à long terme et il serait sage de supposer que votre éducateur vérifie également tous les sites Web pour le plagiat.
Ceci est le code que j'ai trouvé (rapidement, vous aurez donc besoin de le tester - il peut y avoir des bogues). Je vous suggère de lire les commentaires dans grand détail pour comprendre ce qu'il fait.
Je reviens dans quelques heures pour voir comment vous allez. À votre santé.
.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
Je pense que cela est géré par le dernier appel système avec le code de commande $ v0 défini sur 10. – paxdiablo