我正在尝试使用指令集写出这个表达式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
答案 0 :(得分:1)
您不需要Z
:计算Ex(C+D)
,然后计算(B×(C+D×(E×F)))
;现在您拥有最终除法所需的值,然后可以将其存储在A
中。实际上,除了避免冗余计算之外,您应该永远不需要使用STORE
直到最后。
如果你的分区不正确(你没有指定这是什么汇编语言,所以我无法分辨),那么很可能你的论点是倒退的。在这种情况下,您需要省略第一个STORE Z
和PUSH Z
。