ループを利用した足し算

今度はループを利用した足し算を試す。テキストのプログラム例(2)(pp.126-127)である。OUTレジスタの出力をCPUで参照する手段としてOUTレジスタの出力をINポートにジャンパしておく。このとき、INポートに接続してあるスイッチはオープンにしておかなければならない

// テキストのプログラム例(2)
// 5+4+3+2+1=15を計算する。
// 0101(5)、1001(9)、1100(12)、1110(14)、1111(15)の順に出力される。
_[0] = LD_A(0);  // 総数の初期値と
_[1] = LD_B(5);  // ループ回数、兼、足される数と
_[2] = ADD_AB;   // を足して、
_[3] = OUT_A;    // それを出力して、
_[4] = LD_AB;    // ループ回数、兼、足される数をAレジスタに退避して
_[5] = SUB_A(1); // それをデクリメントして、
_[6] = JNZ(8);   // それが0でなければ、
_[7] = HALT;
_[8] = LD_BA;    // それをBレジスタに戻して、
_[9] = IN_A;     // 総数(今OUTレジスタにある)をAレジスタに読み込んで、
_[10] = JUMP(2); // また加算を繰り返す。
_[11];
_[12];
_[13];
_[14];
_[15];

↓これと同じ。

#include <iostream>
using namespace std;

int main(void){
    int A = 0;
    int B = 5;
    int OUT;
    
    while(true){
        A += B;
        OUT = A; printf("%d, ", OUT);
        A = B;
        A--;
        if(A==0) break;
        B = A;
        A = OUT;
    }
    
    return 0;
}

f:id:ti-nspire:20201121101153p:plain