Je ne voulez le donner, jeter quelques lignes directrices afin je vais. Vous devez lire Assemblers, linkers and the Spim simulator. C'est beaucoup d'aide.
Alors voilà.
Créez deux tableaux de 15 mots.
.data
fail_vector: .word -1,-1,-1 ... #15 invalid words
passed_vector: .word -1,-1,-1 ... #15 invalid words
Charger sur certains registre la variable de contrôle de boucle.
li $t1,15
beq $t1,$zero,END
addiu $t1,$t1,-1
maintenant dans cette boucle lire les valeurs
syscall... #SYS_READ
lire cette valeur (supposons que vous avez dans le registre t4) et décider de stocker dans l'échec vecteur, ou passer vecteur.
addiu t4,t4,-50 #subtract 50 from input value.
blez t4,FAILED #If its lower than 0, then read value is lower than 50 ->FAIL
PASSED:
#STORE VALUE INTO passed_vector
FAILED:
#STORE VALUE INTO failed_vector
Lorsque vous avez terminé avec les 15 valeurs, imprimez les vecteurs. C'est un peu compliqué. Avant d'utiliser votre programme, vous devez remplir les deux vecteurs avec une valeur non valide, comme -1. Ainsi, lorsque vous imprimez un vecteur à l'écran, vous devez arrêter lorsque vous trouvez l'une de ces valeurs non valides. Et pendant que vous y êtes, gardez un compteur pour montrer combien ont réussi/échoué.
En pseudo-code
for both arrays
for (i in (0,15) and array[i] not -1)
print array[i]
add 1 to scores count //to count passed - failed test scores.
Assemblée
(remplir les espaces vides)
END:
li $t4,15
li $t1,0
beq $t1,$t4,EXIT #condition. While (i < 15) kind of thing.
addiu $t1,$t1,-1
#print out vectors and keep count on other registers
#then print them out.
syscall... #SYS_WRITE
EXIT: #exit syscall here.
Une autre question délicate est l'indexation de ces vecteurs. Puisqu'ils sont des tableaux de mots, alors vous devez multiplier par 4 (en supposant des mots de 32 bits) la variable de contrôle de boucle (variable classique i en C) pour indexer le vecteur. Si elles étaient des tableaux d'octets, alors aucune multiplication ne serait nécessaire. Et si elles étaient des tableaux courts ...(Bien, vous obtenez mon point)
Par exemple:
passed_vector[i] #(C style sintax)
et laissez variable i être enregistrée dans le registre $ t1 tournerait comme:
sll $t2,$t1,2 #i * sizeof(word)
la $a0,passed_vector #$a0 points to passed_vector
add $a0,$a0,$t2 #$a0 now points to passed_vector + i
Alors maintenant, vous pouvez charger/store to passed_vector [i]
sw $t3,0($a0) #0($a0) is passed_vector[0]
lw $t3,0($a0)
Une façon de résoudre ce genre de choses (c'est-à-dire ting in assembly) est d'écrire le programme en C (ou une autre langue que vous connaissez), puis de le traduire en assembly, instruction par instruction.
Quelle partie vous rencontrez des problèmes avec? On dirait que vous avez déjà commencé, alors c'est bien. Cette boucle répète-t-elle vraiment? Je commencerais par ça. Savez-vous comment lire les entrées du clavier? C'est une bonne prochaine étape. Savez-vous comment stocker une valeur dans un tableau? Savez-vous comment comparer une valeur avec une autre? –
Rappelez-vous également que vous ou vos parents PAYEZ pour que votre instructeur vous aide, alors vous voudrez peut-être profiter de ce privilège; Votre instructeur sait exactement à quoi la bonne réponse est censée ressembler et pourrait vous y guider plus directement que les gens ici. –