我不太清楚如何解释,但这是我目前得到的结果:
0x0 PUSH1 80 ['80']
0x2 PUSH1 40 ['40']
0x4 MSTORE []
0x8 PUSH2 0010 ['0010']
每次出现一个PUSH项时,我都会将最后一个项水平插入列表中,这样就可以得到堆栈的表示形式:
0x0 PUSH1 80 ['80']
0x2 PUSH1 40 ['40', '80']
0x4 MSTORE
0x8 PUSH2 0010 ['0010', '40', '80']
这是我当前的代码:
for (addr, op, params), y in zip(self.instructions, self.stack[::-1]):
codes = []
for x in range(0, 33):
if op == 'PUSH' + str(x):
codes.append(params)
print addr + "\t" + op + "\t\t" + params + "\t" + str(codes)
很抱歉,如果这是不清楚的,被困在这几个小时,谢谢你的帮助!你知道吗
我认为在FOR循环中初始化“代码”是问题的根源。此外,列表上的append函数将在最后添加元素,如果要在第一个位置添加元素,则可能需要使用insert with position参数。你可以试试下面的方法。你知道吗
在我看来,这段代码有两个问题。你知道吗
1。 ^第2行中的{}将一个空的
list
赋值给codes
,这就是为什么总是在codes
中得到一个值的原因。你知道吗2。 要在列表前面插入
params
,请使用、codes = params + codes
或codes.insert(0,params)
或codes[:0] = [params]
您的问题在您发布的代码的第二行。您正在执行
codes = []
循环的每一次迭代,这将擦除代码列表的内容。试着把它移到for
循环上面,这样它就不会一直被擦除。你知道吗此外,您的实现似乎非常低效,因为您不需要实际循环33次来检查代码,只需使用比较即可。首先,通过执行
number = int(op[-1])
获得操作末尾的数字,然后您可以只检查if (op[0:-1] == 'PUSH') and (0 <= number < 33): ...
相关问题 更多 >
编程相关推荐