我必须在堆栈机器的后缀和汇编中编写
(a+b*c)/(a+d*c-e)
5+(3*7)-8
所以对于我写的第一部分(a+b*c)/(a+d*c-e)
:
PUSH B
PUSH C
MUL
PUSH A
ADD
PUSH D
PUSH C
MUL
PUSH A
ADD
PUSH E
SUB
DIV
POP
所以,A是$s1
,B是$s2
,C是$s3
,D是$s4
,E是$s5
Mul $t0,$s1,$s2
Add $s1,$s2,$s3
Mul $t2,$s3,$s4
现在如何继续这个?
第二部分5+(3*7)-8
:
PUSH 3
PUSH 7
MUL
PUSH 5
ADD
PUSH 8
SUB
POP
这个装配怎么样?我的意思是,由于这些是数字,我无法使用$s1
,我必须使用#
吗?
答案 0 :(得分:0)
(A + B * C)/(A + d * C-e)中
如果您需要不重新排列任何内容的“愚蠢”解决方案,请改为:
push a
push b
push c
mul
add
push a
push d
push c
mul
add
push e
sub
div
其余的情况并不清楚。那么什么是b c d? 这些变量是否存储在内存中? 你打算使用浮点协处理器还是要进行整数运算?
答案 1 :(得分:0)
那么你在postfix和汇编中的意思是什么?
除非使用堆栈处理器,否则不可能同时执行这两种操作。
这对浮点协处理器来说是可能的。
相反,如果必须使用处理器,则必须编写优化代码 然后你应该做一些重新安排,以便重新排序和优化。
我认为这个问题与数学协处理器有关,因为你编写的指令序列在使用x86指令时没有计算意义。 请澄清。
答案 2 :(得分:0)
在postfix中写入意味着将中缀表示法转换为后缀。
这意味着转换:
(a + b * c)/(a + d * c-e)==> a b c * + a d c * e - /
这对处理器没有任何作用。
现在,如果你需要在汇编中编写它,你应该说明你使用的处理器。 是x86吗?