2016-03-21 7 views
2

私は4つの方法のコマンドにこの表現を変換するためにいくつかの助けを取得したいと思い:ここ変換式

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

は私の試みとメソッドです:スタックによって

:アキュムレータによって

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

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

レジスタ・メモリ:

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

はレジスタ間:

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 

それは大丈夫でしょうか?負の数(-2 ...)を使用できますか?

ありがとうございました! add z, R1, R2

答えて

1
addz, R1, R2 

は、次のように記述するものではありませんでしたか?

これ以外の4つの方法はOKです。


私は負の数(-2 ...)を使用することができますか?

これは、negまたはsubのようなコマンドの可用性に大きく左右されます。
subが可能であった場合の違いを守ってください。

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 

アキュムレータによってバージョンがsubと正の数のみを使用して次のようになります。

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

おかげで、私は意味正しかったです"add z、R1、R2"と書く。もう一つの質問: "サブ"コマンドの順序は何ですか?例えば:push x push y sub何が操作ですか? x-y?またはy-x?私の質問から4つの方法の間にこの解釈に違いがありますか?再度、感謝します! – user9

+0

私は、あなたとは対照的に、これらの操作が何をするのかを指示するマニュアルを持っていないので、そのような 'sub'操作の順序は何であるか分かりません。 _by accumulator_バージョンでは、現在の順序は正確であり、その結果はaccu! (これを答えに加えました) – Fifoernik