標準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
前へ
次へ
ホームページトップへ戻る