TIY 1
MA
TIY 0
M+
L1: AO
L2: JUMP L2
...
50: 3
51: 4
これの読み方の詳細はやはり
学研の「大人の科学」 No.24 ふろく4ビットマイコン
等をみてみてください(_ _)
下のほうにある 50:, 51: は、そのアドレスのメモリに 3,4 を置け、という意 味です。このためには、「5」「0」「A SET」
とボタンを押して、そのあと「3」「INCR」「4」「INCR」
と押せばよいです。その後で「RESET」「1」「RUN」
で実行できます。
TIY 1
で、Yレジスタに1という値をロード(代入)します。レジスタ(メモリ)の
内容を、そのまま1にする、ということです。
MA
で、データメモリ(このCPUでは 50にYレジスタの値を足した数の番
地 という約束です。なので、この場合は51番地)のデータをAレジス
タにロードする、という約束です。この時点で、Yは1ですから51番地の値
をもってくる、ということでAレジスタの値は4になるわけです。
このCPUにおいて、Yレジスタはデータ用メモリ領域のインデックス(メモリ上 のどのデータを処理の対象としているか)を持つもの、と覚えておけばよいで しょう。同様に、このCPUにおいて、Aレジスタはデータ処理用の作業領域の役目、と覚 えておけばよいでしょう。
TIY 0
で、Yレジスタに0という値をロードします。
M+
これは、「Aレジスタにデータメモリ(50にYレジスタの値を足した数の番
地なので、この場合は50番地)のデータを加えて、その結果をAレジスタに
置いておく(もし桁上がりすれば実行フラグが1になる)」という意味です。
ここではYは0なので、50番地の値3を、Aレジスタの値4に加えて、その
結果7をAレジスタにおきます。
L1: AOこれは、「Aレジスタの値を数字 LED に表示する」ということですので、ここ では加算された結果の7を表示します。この命令はかならず実行レジスタを1 にします。
L2: JUMP L2これは、「実行フラグが1の場合、ラベル L3 が示すアドレスに制御を移す」 ということで、前の命令で実行フラグは1になったのでこの命令を実行する、 ということは、自分自身を再度実行せよ、ということになります。つまりここ で無限ループとなり、プログラム終了です。
TIY 1
MA
TIY 0
M+
JUMP L1
JUMP L2
L1: TIY 0
CAL SETR
L2: AO
L3: JUMP L3
...
50: 3
51: 4
上のプログラムにさらに数行増えています。その差の部分を中心に説明します。
M+
までは上のプログラムと同じです。これは、「Aレジスタにデータメモリのデー
タを加えて、その結果をAレジスタに置いておく(もし桁上がりすれば実行フ
ラグが1になる)」という意味でした。ここではYは0なので、50番地の値
3を、Aレジスタの値4に加えて、その結果7をAレジスタにおきます。この
場合には、桁溢れはありませんでしたのでフラグは0です。
JUMP L1
これは、「ラベルL1が示すアドレスに、実行フラグが1の場合、指定されたア
ドレスに制御を移す(そこに飛んで、処理を続ける)」ということです。しか
し、前の命令では実行フラグは0だったのでこの命令はなにも実行レジスタを
1するだけで他の動作はせず、次の命令を読みにいきます。
JUMP L2
これは、「ラベルL2が示すアドレスに、実行フラグが1の場合、指定されたア
ドレスに制御を移す」ということで、前の命令では実行フラグは1だったので
この命令を実行し、L2番地の命令を実行しようとします。
ちなみに次の2命令 はこの場合は飛ばされたわけですが、これらは桁あふれした時にLED を点灯す るという処理になっています。
L1: TIY 0
CAL SETR
で、LED を点灯させる、という仕組みです。