将汇编语言转换为Python代码

时间:2017-11-14 10:59:31

标签: python assembly

我正在尝试将汇编语言转换为Python。我这样做的时候,我试图尽可能地遵循汇编代码。我知道这个特殊的代码需要嵌套的条件语句。我使用a,b,c,d作为内存位置。

这是汇编语言:

    0   IN a
    1   LOAD d
    2   COMPARE a
    3   JUMPLT 6
    4   JUMPEQ 6
    5   JUMPGT 12
    6   OUT c 
    7   LOAD a
    8   ADD b
    9   STORE c
    10  DECREMENT d
    11  JUMP 20
    12  DECREMENT c
    13  LOAD a
    14  COMPARE c
    15  JUMPLT 19
    16  JUMPEQ 19
    17  INCREMENT d   
    18  CLEAR c             
    19  OUT d
    20  OUT b
    21  HALT

这是我对Python的代码的直译。

      a = input()

      if a<=d:
        print c
        c = a+b
        d = d-1
        print b  

      else:
        c = c-1
        if c<=a:
          print d
          print b

        else:
          d=d+1
          c=0
          print d
          print b

我看到print和print b都包含在if和else嵌套语句中,所以如果我没有对代码进行字面翻译,可能它应该是这样的吗?

      a = input()

      if a<=d:
        print c
        c = a+b
        d = d-1
        print b 

      else:
        c = c-1
        print d
        print b

        if c>a:
          d=d+1
          c=0

我最后的问题:这些翻译中的任何一个都是正确的吗?他们不会以同样的方式评估。还有更好的方法来进行这种翻译吗?

欢迎任何其他有关这些转化的提示或规则。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

是的,我看到的部分看起来对我来说是正确的。但是,将print b放在if / else块之后会更准确,因为所有执行路径都在它之前合并。

asm是笨重的(例如,省略前两个条件分支,因此JUMPGT 12要么跳跃要么跳过),所以是的,只有它和/或Python有很大的空间。初学者非常经常写出低效的分支,这种分支以某种方式跳跃,而不仅仅是跳跃或摔倒。