我正在尝试将汇编语言转换为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
我最后的问题:这些翻译中的任何一个都是正确的吗?他们不会以同样的方式评估。还有更好的方法来进行这种翻译吗?
欢迎任何其他有关这些转化的提示或规则。
提前感谢您的帮助。
答案 0 :(得分:0)
是的,我看到的部分看起来对我来说是正确的。但是,将print b
放在if / else块之后会更准确,因为所有执行路径都在它之前合并。
asm是笨重的(例如,省略前两个条件分支,因此JUMPGT 12
要么跳跃要么跳过),所以是的,只有它和/或Python有很大的空间。初学者非常经常写出低效的分支,这种分支以某种方式跳跃,而不仅仅是跳跃或摔倒。