2016-03-21 3 views
2

Je voudrais obtenir un peu d'aide pour convertir cette expression en commandes de 4 méthodes:convertir l'expression en fonctionnement registre général Modèles

z=3*(x+2)-2*y 

ici sont les méthodes avec mes essais:

par pile:

push 2 
push -1 
mult 
push y 
mult 
push x 
push 2 
add 
push 3 
mult 
add 
pop z 

par accumulateur:

load y 
mult -2 
store temp 
load x 
add 2 
mult 3 
add temp 
store z 

registre mémoire:

add R1, x, 2 
mult R1, R1, 3 
mult R2, y, -2 
add z, R1, R2 

registre-registre:

load R1, x 
add R1, R1, 2 
mult R1, R1, 3 
load R2, y 
mult R2, R2, -2 
add R1, R1, R2 
store z, R1 

est-il correct? puis-je utiliser des nombres négatifs (-2 ...)?

merci!

Répondre

1
addz, R1, R2 

pas Avez-vous voulu écrire: add z, R1, R2?

À part cela, les 4 méthodes semblent correctes.


puis-je utiliser des nombres négatifs (-2 ...)?

Cela dépendra en grande partie de la disponibilité des commandes comme neg ou sub.
Observer la différence si sub était possible:

push 2 \ 
push y | = 2*y 
mult /
push x \ 
push 2 | 
add | = 3*(x+2) 
push 3 | 
mult /
sub  <-- Does depend on the order of the previous pushes! 
pop z 

Le par accumulateur la version ressemblerait à ceci en utilisant sub et nombres positifs seulement:

load y 
mult 2 
store temp 
load x 
add 2 
mult 3 
sub temp 
store z 
+0

Merci, vous aviez raison que je voulais dire écrire: "ajouter z, R1, R2". Une autre question: savez-vous quel est l'ordre de commande "sub"? par exemple: push x push y sub quelle serait l'opération? x-y? ou y-x? Y a-t-il une différence dans cette interprétation entre les 4 méthodes de ma question? Merci encore! – user9

+0

Je ne peux pas savoir quel est l'ordre d'une telle opération 'sub' puisque, contrairement à vous, je n'ai pas de manuel qui indique ce que toutes ces opérations font. Dans la version _by accumulator_, la commande en cours serait correcte car elle laisse son résultat dans l'accu! (J'ai ajouté ceci à la réponse) – Fifoernik