一份带前后值的 trace
运行下面这段程序,填写它打印出来的结果。
PROG = [0b00001001, 0b01000111, 0b10000011, 0b11000000]
def decode(w):
return (w >> 6) & 3, (w >> 5) & 1, w & 31
def run(prog):
R = [0, 0]
seen = []
for w in prog:
op, rd, imm = decode(w)
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
seen.append(R[0])
return seen
R = [0, 0]
rows = []
for w in PROG:
op, rd, imm = decode(w)
if op == 3:
break
before = R[0]
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(before) + ">" + str(R[0]))
print("|".join(rows))
全部评论