pp.256ff.
これまでROM (プログラムメモリー)は、15ビット×16本だけをLEで実装していたが、今度は15ビット×256本のROMをメモリーブロック上に作る。手順はROM: 1-PORTの使いかた -に示した。初期化データである.mifファイルを生成するためのアセンブラのようなものは、ここで作った。
下のようにfetch.vhdをROM: 1-PORTに置き換える。これで256ステップまでプログラムが組めるようになった。
コンパイルした結果、ちょうど15ビット×256本=3840ビットだけメモリーが消費された。
1~300の総和 = 45150 (0b 1011 0000 0101 1110)を計算してみる。
_[0] = ldh(REG0, 0) #レジスタ0 (総和の初期値)をクリアする。 _[1] = ldl(REG0, 0) _[2] = ldh(REG1, 0) # レジスタ1に1 (増分)をセットする。 _[3] = ldl(REG1, 1) _[4] = ldh(REG2, 0) # レジスタ2 (足す数の初期値)をクリアする。 _[5] = ldl(REG2, 0) _[6] = ldh(REG3, 300 >> 8) # レジスタ3に300 (ループ回数)をセットする。 _[7] = ldl(REG3, 300 & 0x00FF) _[8] = add(REG2, REG1) # 足す数をインクリメントして、 _[9] = add(REG0, REG2) # それをここまでの総和に加算して、 _[10] = st(REG0, 64) # ここまでの総和をOUTポートに出力して、 _[11] = cmp(REG2, REG3) # 足す数==ループ回数であるなら、 _[12] = je(14) # ループを抜けるが、 _[13] = jmp(8) # そうでなければ加算を繰り返す。 _[14] = hlt()