后缀和汇编语言有问题吗?这是正确的吗?

时间:2014-01-19 09:40:48

标签: assembly

我必须在堆栈机器的后缀和汇编中编写

  1. (a+b*c)/(a+d*c-e)

  2. 5+(3*7)-8

  3. 所以对于我写的第一部分(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,我必须使用#吗?

3 个答案:

答案 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吗?