022: 「SSCで2倍する」の解答¶
難易度: ☆
方針¶
入力は Read 31 で31番地に置きます。
Shift はAccumulatorだけを変えるので、先に Load 31 でAccumulatorへ読み込みます。
出力する前に Store 31 で結果をメモリへ戻します。
実装¶
def double_program():
lines = [
"Read 31",
"Load 31",
"Shift 1",
"Store 31",
"Write 31",
"Stop",
]
program = []
for line in lines:
program.append(assemble_line(line))
return program
確認¶
発展¶
Shift 2 は2ビット左シフトです。
Python整数では、これは4倍と同じ結果になります。
正の値を2倍し続けるループは、Python整数版のSSCではオーバーフローで止まりません。
そのため、Accumulatorが正なら分岐する Jump だけでは停止せず、run の max_steps で止める必要があります。