Assembly 如何在没有操作数的程序集中编写表达式?
我试图使用一个指令集编写这个表达式A=(B×(C+D×(E×F))÷(E×(C+D)),其中每条指令都没有操作数(两条指令必须各有一个操作数除外) 这是我所遵循的书中的一个例子:表达式是z=x*y+w*u 守则:Assembly 如何在没有操作数的程序集中编写表达式?,assembly,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
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
您不需要
Z
:计算Ex(C+D)
,然后计算(B×(C+D×(E×F))
;现在,您有了最终除法所需的值,这些值可以存储在A
中。事实上,除了避免冗余计算之外,您永远不需要使用STORE
,直到最后
如果您的划分不正确(您没有指定这是什么汇编语言,所以我不知道),那么很可能您的参数是反向的。在这种情况下,你想省去第一个
存储Z
和推Z
我已经更新了我的答案,这就是你的确切意思吗?问题是我无法测试我的代码,作业是关于如何使用“反向波兰符号(RPN)”,那么你为什么说“划分似乎不正确”?我使用STORE Z弹出堆栈,然后我再次按Z进行分割,我完全不确定存储Z是否意味着从堆栈弹出既然您避免存储Z,这就不是问题了!更新的版本正确吗?