Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 如何在没有操作数的程序集中编写表达式?_Assembly - Fatal编程技术网

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

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

我试图使用一个指令集编写这个表达式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

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


如果您的划分不正确(您没有指定这是什么汇编语言,所以我不知道),那么很可能您的参数是反向的。在这种情况下,你想省去第一个
存储Z
推Z

我已经更新了我的答案,这就是你的确切意思吗?问题是我无法测试我的代码,作业是关于如何使用“反向波兰符号(RPN)”,那么你为什么说“划分似乎不正确”?我使用STORE Z弹出堆栈,然后我再次按Z进行分割,我完全不确定存储Z是否意味着从堆栈弹出既然您避免存储Z,这就不是问题了!更新的版本正确吗?