10 未満の正の数を入力し、最初の数の合計を出力するプログラムを作成しようとしています。たとえば、5 は 5+4+3+2+1 になります。コマンドは、Stop、Load、Store、Add、Sum、Multiply、Divide、Input、Output、Branch、0 の場合は Branch、0 でない場合は Branch です。私はちょっと立ち往生しています。私が書いたものは次のとおりです。
IN n
LD n
ADD sum
STO sum
LD n
SUB one
ADD sum
STO sum
BRGT haw
LD n
BR done
haw: OUT sum
done: STOP
DC n 4
DC sum 0
DC one 1
私が見た方法では、数値 n をロードし、合計 0 を追加してから、この合計を n+sum として保存します。次に、n を再度ロードして 1 を減算し、それを新しい合計として格納します。しかし、n が 0 になるまでこれを繰り返す必要があります。
わかりましたので、私がする必要があるのは、0 の場合はブランチを使用し、0 でない場合はブランチを使用することです。それで:
IN n
LD n
ADD sum
STO sum
BR CAW
CAW: LD n
SUB ONE
STO n
BRGT HAW
BZ TAW
HAW: ADD SUM
STO SUM
BR CAW
TAW: OUT SUM
DC SUM 0
DC ONE 1
DC=指定定数ですが、nが0になるまで1を引いて足し算を繰り返す必要があります。何を繰り返す必要があるかはわかっていますが、アセンブリ言語でこれを行う方法がわかりません。