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 を点灯させる、という仕組みです。