条件分岐を使ったバイナリコードでLチカをより複雑にオリジナルCPUでバイナリコード入門(10)(2/3 ページ)

» 2023年11月14日 07時00分 公開
[今岡通博MONOist]

条件分岐のプログラムを実行してみる

 図1はリスト1のプログラムを実行中の様子です。LEDドットマトリクスの最上段はレジスタR0の値を表示しており、左側が下位ビットになっています。レジスタR0の値は10進法で12を示しています。0から始めて12までカウントが進んだ状態です。最下段はレジスタR7の値を表示しています。これはプログラムカウンタですので、1番地の命令を実行しているところですね。

図1 図1 リスト1のプログラムを実行中の様子[クリックで拡大]

 図2は、15まで数えてからさらにinc命令を実行したところです。レジスタR0の値は0に戻るのですが、その代わりにR0はオーバーフローを起こしますからc_flagが1にセットされます。c_flagは、Tang Nanoの評価ボード上で6つ縦に並んだオレンジ色のLEDの6番目に接続されていますのでこれが点灯しています。6つのオレンジLEDのさらに下側にあるオレンジLEDは、電源がオンであるときは常に点灯しています。プログラムカウンタは1番地を示しており、ここでjncを実行するとc_flagが立っているので0番地にはジャンプしないでプログラムカウンタは次の2番地を指し示します。なおc_flagはjnc命令が実行されるとクリアーされます。

図2 図2 15まで数えてからさらにinc命令を実行したところ[クリックで拡大]

 図3は2番地のjmp 2を実行しているところです。jmpがある同じ番地にジャンプしますから、この命令をひたすら繰り返します。外から見ればCPUは止まったように見えます。ちなみにUSBコネクターの上側にある白いタクトスイッチを押せばリセットがかかり2番地の永久ループから抜け、また0番地から実行が開始されます。

図3 図3 2番地のjmp 2を実行しているところ[クリックで拡大]

Copyright © ITmedia, Inc. All Rights Reserved.