条件分岐を使ったバイナリコードでLチカをより複雑に:オリジナルCPUでバイナリコード入門(10)(2/3 ページ)
オリジナル4ビットCPUを用いてバイナリコードを学ぶ本連載。第10回では、条件分岐を使ったバイナリコードに挑戦する。
条件分岐のプログラムを実行してみる
図1はリスト1のプログラムを実行中の様子です。LEDドットマトリクスの最上段はレジスタR0の値を表示しており、左側が下位ビットになっています。レジスタR0の値は10進法で12を示しています。0から始めて12までカウントが進んだ状態です。最下段はレジスタR7の値を表示しています。これはプログラムカウンタですので、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命令が実行されるとクリアーされます。
図3は2番地のjmp 2を実行しているところです。jmpがある同じ番地にジャンプしますから、この命令をひたすら繰り返します。外から見ればCPUは止まったように見えます。ちなみにUSBコネクターの上側にある白いタクトスイッチを押せばリセットがかかり2番地の永久ループから抜け、また0番地から実行が開始されます。
Copyright © ITmedia, Inc. All Rights Reserved.