一行完整的 trace
运行下面这段程序,填写它打印出来的结果。
PROG = [0b00001001, 0b01000111, 0b10000011, 0b11000000]
def decode(w):
return (w >> 6) & 3, (w >> 5) & 1, w & 31
def run(prog):
R = [0, 0]
pc = 0
seen = []
while pc < len(prog):
op, rd, imm = decode(prog[pc])
if op == 3:
break
if op == 0:
R[rd] = imm
elif op == 1:
R[rd] = (R[rd] + imm) & 255
else:
R[rd] = (R[rd] - imm) & 255
pc = pc + 1
seen.append(R[0])
return seen
R = [0, 0]
rows = []
pc = 0
for w in PROG:
op, rd, imm = decode(w)
if op == 3:
rows.append(str(pc) + "-停-" + str(R[0]))
break
if op == 0:
R[rd] = imm
elif op == 1:
R[rd] = (R[rd] + imm) & 255
else:
R[rd] = (R[rd] - imm) & 255
rows.append(str(pc) + "-" + str(op) + "-" + str(R[0]))
pc = pc + 1
print("|".join(rows))
全部评论