将表达式转换为通用寄存器操作模型

convert expression into general register operation Models

我想得到一些帮助,将这个表达式转换成 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...) 吗?

谢谢!

addz, R1, R2

你不是想写 : add z, R1, R2 吗?

除此之外,这 4 种方法看起来都不错。


can I use negative numbers (-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

by accumulator 版本看起来像这样,仅使用 sub 和正数:

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