2016-03-21 69 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 ...)嗎?

謝謝!

回答

1
addz, R1, R2 

沒你的意思寫:add z, R1, R2

除此之外,4種方法看起來不錯。


我可以使用負數(-2)?

這很大程度上取決於命令的可用性,如negsub
觀察區別,如果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

謝謝你,你是對的,我的意思寫:「添加z,R1,R2」。另一個問題:你知道「sub」命令的順序是什麼嗎?例如:push x push y sub會是什麼操作? X-Y?或者y-x?在我的問題中,這四種方法之間的解釋存在差異嗎?再次感謝! – user9

+0

我不可能知道這樣一個「子」操作的順序是什麼,因爲我與你相反,沒有一個手冊來說明所有這些操作是做什麼的。在_by accumulator_版本中,當前的訂單將是正確的,因爲它將其結果留在訂單中! (我已經添加了這個答案) – Fifoernik