我想帮助将此表达式转换为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 ......)吗?
谢谢!
答案 0 :(得分:1)
addz, R1, R2
你不打算写:add z, R1, R2
?
除此之外,4种方法看起来还不错。
我可以使用负数(-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