ループを利用した足し算
今度はループを利用した足し算を試す。テキストのプログラム例(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; }