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

时间:2016-03-21 18:00:41

标签: cpu-registers x86-16 cpu-architecture processor

我想帮助将此表达式转换为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 个答案:

答案 0 :(得分: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