如何在没有操作数的程序集中编写表达式?

时间:2014-12-08 12:07:24

标签: assembly

我正在尝试使用指令集写出这个表达式A =(B×(C + D×(E×F)))÷(E×(C + D)),其中每个指令都没有操作数(除了两个必须各有一个)。

这是我所遵循的书中的一个例子:表达式为z = x * y + w * u

代码:

PUSH x
PUSH y
MULT
PUSH w
PUSH u
MULT
ADD
STORE z

我做了什么:

PUSH E
PUSH F
MULT
PUSH D
MULT 
PUSH C
ADD
PUSH B
MULT
STORE Z (store the result)
PUSH C
PUSH D
ADD
PUSH E
MULT
PUSH Z
DIVIDE
STORE A

我不确定我存储结果的方式,并且除法似乎不正确。有没有更好的方法来编写表达式?

更新:

PUSH C
PUSH D
ADD
PUSH E
MULT
PUSH E
PUSH F
MULT
PUSH D
MULT
PUSH C
ADD
PUSH B
MULT
DIVIDE
STORE A

1 个答案:

答案 0 :(得分:1)

您不需要Z:计算Ex(C+D)然后计算(B×(C+D×(E×F)));现在您拥有最终除法所需的值,然后可以将其存储在A中。实际上,除了避免冗余计算之外,您应该永远不需要使用STORE直到最后。

如果你的分区不正确(你没有指定这是什么汇编语言,所以我无法分辨),那么很可能你的论点是倒退的。在这种情况下,您需要省略第一个STORE ZPUSH Z