標準TTLだけ(!)でCPUをつくろう!(組立てキットです!)
(ホントは74HC、CMOSなんだけど…)
[第159回]

●INX命令のテストプログラム

今回はINX命令、DCX命令のテストプログラムです。
INX命令、DCX命令は16ビットレジスタBC、DE、HL、SPを+1(increment、インクリメント)、−1(decrement、デクリメント)するための命令です。

8ビットのレジスタ、B、C、D、E、H、LはBとC、DとE、HとLを接続して16ビットレジスタとして使うこともできます。
16ビットのレジスタとしての使い道の主なものに、メモリアドレスの指定があります。
HLレジスタはそのものズバリ、「M」のアドレス指定に使われます。
BCレジスタやDEレジスタも、HLレジスタよりは限定されますが、やはりメモリアドレッシングに使われます。

メモリアドレスを示すという用途としては、INX、DCXは欠くことのできない命令です。
たとえばあるメモリアドレスから別のメモリアドレスへのデータブロックのコピーなどの動作には、INX命令、DCX命令が不可欠になります。
INX命令、DCX命令のくわしい説明は[第95回]にあります。

前回のテストプログラムでは0.5secサブルーチンを使って、0.5秒ごとにレジスタの値が変化するようにしてみました。
エージングのためには、0.5secサブルーチンを使うのではなくて、テストしたい命令そのものを繰り返し実行することで、一定時間ごとにLED表示が変わるようにしたほうが良いのですが、命令によってはそういうことが、なかなかやりにくいものなどがあって、結局タイマールーチンのお世話になってしまう場合もあります。

今回のINX命令、DCX命令のテストプログラムも、0.5secサブルーチンを使ってしまいました(便利なのです)。

0000 310000   LXI SP,0000
0003 210000   LXI H,0000
0006 110000   LXI D,0000
0009 010000   LXI B,0000
000C CD3000   CALL 0030
000F 23       INX H
0010 13       INX D
0011 03       INX B
0012 C30C00   JMP 000C

実に簡単なプログラムです。
0.5秒ごとに、HL、DE、BCレジスタの値を+1し、それを繰り返します。
このテストプログラムでテストしているのはINX命令だけですが、このプログラムのテストが済んでから、INX命令をDCX命令に書き換えてのテストも行いました(DCX命令でのテストについては省略します)。

●テストプログラムを実行中の写真です



上の列のLEDは、左から、D、E、B、C、Aレジスタで、下の列のLEDは、左から、H、L、SPH、SPLレジスタです。

DEレジスタ、BCレジスタ、HLレジスタの値はいずれも同じ、0FF0を表示しています。
ストップウォッチは34’00”です。

HL、DE、BCは0.5secごとに+1加算されます。
0FF0は十進数では4080になります。0.5secごとに+1された結果、4080になったのですから、
4080×0.5=2040秒になります。

ストップウォッチの値34’00”は、秒に直すと、
34×60=2040秒です。
おお。ぴったりです。
2009.2.10upload

前へ
次へ
ホームページトップへ戻る