2009-11-28 3 views
0

J'écris un code MIPS pour une calculatrice simple, et je me demandais comment vous branchez à la fonction correspondante en fonction de l'entrée de l'utilisateur. Par exemple, si l'utilisateur souhaite ajouter deux nombres, comment vous assurer que la calculatrice saute à l'étiquette d'ajout, au lieu de peut-être la multiplier ou la soustraire?Branchement aux étiquettes

+0

Veuillez poster quelques informations supplémentaires. Qu'est-ce que vous avez, de quoi avez-vous besoin? Avez-vous déjà du code que vous pouvez nous montrer? – EricSchaefer

+0

J'ai le code que lorsque l'utilisateur entre une fonction à exécuter (+ - * /), il le stocke comme une valeur ASCII dans l'un des registres temporaires. Ma question est alors, comment puis-je m'assurer que pour la fonction que l'utilisateur a entré il saute à l'étiquette correcte qui exécute la fonction. Par exemple, il saute à l'addition et ne pas soustraire (comme indiqué ci-dessous), si l'utilisateur veut ajouter les nombres. addnum: add.s f12 $, f1 $, $ # f0 Additionner chiffres et mis en syscall registre de résultat j résultat subnum: sub.s f12 $, f1 $, $ f0 j résultat – Taylor

+0

Je roulais retour l'addition de '[devoirs]' - vous devez demander d'abord avant de le marquer, dans ce cas. Voir http://meta.stackexchange.com/questions/10811/homework-on-stackoverflow –

Répondre

1

Prendre l'entrée de l'utilisateur dans un registre. Puis comparez cela à la première valeur ASCII, dites '+', en utilisant une instruction beq.

.data 
plus: .asciiz "+" 
sub: .asciiz "-" 
prod: .asciiz "*" 
div .asciiz "/" 

.text 
.global calculator 
.align 2 
.ent calculator 

calculator: 
    //t0 holds user input 

    la $t1,plus 
    lb $t1,0($t1) 
    beq $t0,$t1,add 

    //now check for subtraction, division product. Same code, just change the address (add) 

    //if none matched, jump to error 
    b error 

add: 
    //addition code goes here 
division: 
    //division code goes here 
product: 
    //product code goes here 
subtraction: 
    //subtraction code goes here. 

error: 
    //error code goes here. 
+0

Pour autant que je puisse voir, cette méthode ne peut fonctionner que pour 3 types d'entrée différents, et non 4. Alors, comment puis-je m'assurer branches à une autre étiquette s'il y a une 4ème valeur à laquelle il faut comparer? Dites les entrées de l'utilisateur '+' (ascii 43) et il est comparé à l'ascii 45 (-), vous pouvez utiliser branche si moins que l'ascii pour '*' est également inférieur à 45, alors comment je m'assure il va à l'étiquette '+' plutôt que le '*'. – Taylor

+0

ne pense pas en termes de plus/moins de. Pensez-y plus comme une déclaration de commutateur. – Tom

+0

J'ai codé un exemple de ceci. L'affichera si nécessaire, mais essayez de comprendre cela. – Tom

Questions connexes