Mon programme MIPS-elle correcte?
Écrire un programme MIPS qui génère et s'additionne tous les nombres de 1 à 100.
- il doit avoir au moins une boucle
- il doit stocker la somme dans le registre R12
Et c'est ce que j'ai écrit:
main:
li $t0, 0 # clear register $t0 to zero
li $t4, 0 # clear register $t4 to zero
loop:
add $t0, $t0, 2 # generating even numbers in register $t0
add $t4, $t4, $t0 # compute the sume
bne $t0, 100, loop # if t0 reached 100 then go to loop.
b endloop # branch to endloop
endloop:
li $v0, 10 # terminate program run and
syscall # Exit
Est-ce correct?
Pouvez-vous courir? Avez-vous un MIPS conseil d'administration ou un émulateur ou quelque chose?
J'utilise gxemul pour émuler une architecture mips exécution de NETBSD en.wikipedia.org/wiki/GXemul
Un autre émulateur qemu, qui émule un tas d'architectures et de systèmes, y compris les MIPS.
merci...mais pourriez-vous me faire une faveur, j'ai couru avec spim, mais tout semble bon, pourrait m'aider à le faire fonctionner avec n'importe quel émulateur pour voir si je l'ai eu à corriger...merci
je pense que le registre R12 est registre nombre de douze, qui se trouve être $t4
J'utilise gxemul pour émuler une architecture mips exécution de NETBSD en.wikipedia.org/wiki/GXemul
Un autre émulateur qemu, qui émule un tas d'architectures et de systèmes, y compris les MIPS.
merci...mais pourriez-vous me faire une faveur, j'ai couru avec spim, mais tout semble bon, pourrait m'aider à le faire fonctionner avec n'importe quel émulateur pour voir si je l'ai eu à corriger...merci
je pense que le registre R12 est registre nombre de douze, qui se trouve être $t4
OriginalL'auteur | 2009-04-18
Vous devez vous connecter pour publier un commentaire.
Je viens de terminer ma MIPs assemblée classe et j'ai une suggestion pour vous: Ne pas utiliser le PC Spim!
J'ai utilisé des PC Spim, Mars, et Qemu et le meilleur pour le cours général de ce travail est de l' Mars (Mips Assembler et d'Exécution du Simulateur). L'éditeur est agréable, il se bloque beaucoup moins et il vous permet de déboguer et de définir des points d'arrêt. Il est gratuit, open source et créé par le Missouri State University.
Il vient comme un .fichier jar, de sorte que vous pouvez l'exécuter sur Windows et Linux.
[Mars Mips Émulateur]
Dans le cas général, un moyen facile de savoir si un nombre est pair ou impair ET (bit à bit) 1 avec le nombre et, si le résultat est 0, alors le nombre est pair.
Cependant, puisque nous voulons tous le même nombre dans une série, on peut juste la boucle et l'incrément de notre nombre par 2, comme vous l'avez fait dans votre posté code.
Lors de l'ajout d'une valeur immédiate vous devez utiliser "addi" ou "addu" instructions de ne pas "ajouter". Vous avez également dit que vous vouliez mettre le résultat dans le registre $r12, mais ce n'est pas valide MIPs registre. Découvrez MIPs lien wikipédia pour voir une liste de tous les registres: MIPS - Registre d'Utilisation.
J'ai modifié votre programme fonctionne correctement. Il stocke le résultat final dans $t1, puis imprime le résultat final.
Après l'exécution de cette dans Mars je reçois le texte suivant:
Oui, il est.
Merci...très bien, il a fait un travail.
Je ne pense pas qu'ils signifient $r12 par R12, mais le registre 12, qui est $t4.
OriginalL'auteur mmcdole
Essayer cette émulateur. Quand j'ai pris Organisation de l'Ordinateur, j'ai utilisé SPIM et il a été assez facile à utiliser. Vous pouvez aussi trouver des tutoriels sur le MIPS en ligne. Rappelez-vous, Google est votre ami.
mais est-il supposer pour ajouter des numéros de 1 à 100?
OriginalL'auteur
Vous devriez être en mesure d'utiliser SPIM vous-même. Aussi la ligne "b endloop" est inutile, parce que si vous ne branche pas de retour au sommet de la boucle, le programme va "tomber dans le" endloop.
Télécharger le SPIM, cliquez ici:
http://pages.cs.wisc.edu/~larus/spim.html
OriginalL'auteur Corey Sunwold
Code a l'air correct. Comme cunwold dit, le "b endloop" est unnecesary, depuis la direction de la cible est la première branche (bne...) fallthrough.
Il y a une erreur.
Vous utilisez la même instruction (ajouter) de deux façons différentes.
L'instruction
devrait être
Depuis l'ajout d'un immédiats, pas deux registres.
Donc, ici, il va. J'ai remplacé le syscall partie, avec un retour à une fonction (valeur retourne dans $v0 registre).
Espère que cela aide.
Fichier principal.c
Fichier addEven.S (assemblée)
J'ai compilé et lié ces fichiers. Ici il va.
Je l'utilise assez souvent, mais seulement pour des fins éducatives. Je vais essayer d'obtenir quelques conseils pour prendre une étape au-delà.
OriginalL'auteur Tom