2009-08-15 6 views
14

Donc j'apprends MIPS en utilisant le simulateur SPIM et je suis bloqué sur ce problème.Ajout de deux nombres de 64 bits dans l'assemblage

Je souhaite ajouter deux numéros de 64 bits qui sont stockés dans quatre registres 32 bits. Donc, j'ajoute les octets LO, puis le carry et les octets HI. Mais il n'y a pas de commande adc/addc, c'est-à-dire ajouter avec carry. Donc, je devrais ajouter le bit de retenue dans le registre d'état. Mais, comment exactement je lis ce registre?

Si $ t0 est le registre temporaire 1, alors quel est l'équivalent du registre d'état qui contient le drapeau de report?

J'ai beaucoup googlé Je ne trouve toujours pas d'exemples qui utilisent même le registre d'état.

+0

Il n'y a pas de registre d'état ou de drapeau dans MIPS –

Répondre

21

Ajouter t2 $ $ + t3 $ t5 $ t4, donnent lieu à t0 $ $ t1

addu $t1, $t3, $t5 # add least significant word 
sltu $t0, $t1, $t5 # set carry-in bit 
addu $t0, $t0, $t2 # add in first most significant word 
addu $t0, $t0, $t4 # add in second most significant word 

Pour la deuxième partie de votre question, il n'y a pas de registre d'état. Pas du tout. Nada.

+0

Merci. Il est logique pourquoi je ne pouvais pas trouver le registre d'état :) Votre réponse fonctionne parfaitement. Yat-il un endroit avec des conseils sur le meilleur codage MIPS? –

+0

Il y en a peu. Pour moi, la méditation sur la source d'autres peuples ou la recherche d'un objdump -S fonctionne. Vous pouvez apprendre des occasions rares, où un compilateur fait quelque chose de bien, mais vous pouvez apprendre encore plus des endroits, où ils produisent la merde complète, comme d'habitude ;-) http://www.cs.unibo.it/~ solmi/teaching/arch_2002-2003/AssemblyLanguageProgDoc.pdf donne également quelques conseils utiles. – hirschhornsalz

+0

Excellente solution. Je l'aime quand les solutions aux problèmes apparemment diificult (IMHO) sont-elles si élégantes. – Derek

Questions connexes