標準TTLだけ(!)でCPUをつくろう!(組立てキットです!)
(ホントは74HC、CMOSなんだけど…)
[第225回]
●DAA命令の回路の動作テストです
いつものように、プログラムを作って回路が正しく動作するかどうかテストをしてみます。
DAA命令はその前に行われたADD命令(またはADC命令)の結果によって、補正のために加算する数値が異なるなどの違いがでてきます。
そこで、それぞれの場合に適するような値のADD命令を行って、テストをしてみることにしました。
前回の説明で、DAA命令の補正の計算は、大きくわけると2通りになることがわかりました。
しかし、せっかく一所懸命に考えて1)〜5)に整理したのですから、それにしたがってテストをしてみたいと思います。
●まずは、先に実行するADDの値を決めましょう
前回説明した1)〜5)の補正のルールに合う計算例を選びました。
1)下位桁がA〜Fの場合は、下位桁に6を加算する
先に行うADD命令は、05+07です。
下の例のように、ADD命令の実行の結果は、0Cになります。
この値に対して、DAA命令を実行することで、05+07をBCD数として加算したと考えた場合の答えである12になれば、正しく補正できたことになります。
16進数 10進数(BCD)
05 05
07(+ 07(+
0C 12
DAA補正(16進数)
0C
06(+
12
2)下位桁が0〜3で、かつHフラグが立っているときも、下位桁に6を加算する
先に行うADD命令は、19+38です。
16進数 10進数
19 19
38(+ 38(+
51 57
↑Hフラグセット
DAA補正(16進数)
51
06(+
57
3)上位桁がA〜Fの場合は、上位桁に6を加算する
先に行うADD命令は、65+82です。
16進数 10進数
65 65
82(+ 82(+
E7 147
DAA補正(16進数)
E7
60(+
1 47
↑Cフラグ
4)上位桁が0〜3で、かつCフラグが立っているときは、上位桁に6を加算後、Cフラグをセットする
先に行うADD命令は、96+72です。
16進数 10進数
96 96
72(+ 72(+
1 08 168
↑Cフラグ
DAA補正(16進数)
08
60(+
1 68
↑Cフラグ
5)上位桁が9で下位桁がA〜Fの場合には、66を加算する
先に行うADD命令は、87+15です。
16進数 10進数
87 87
15(+ 15(+
9C 102
DAA補正(16進数)
9C
66(+
1 02
↑Cフラグ
以上で5通りのテストデータが揃いましたが、もうすこし追加をしたいと思います。
補正の結果が00になった場合にZ(ゼロ)フラグがセットされるかどうかを確認するために、87+13の計算をします。
16進数 10進数
87 87
13(+ 13(+
9A 100
DAA補正(16進数)
9A
66(+
1 00
↑Cフラグ
もうひとつ、以上のテスト例は、結果の数値を符号付の数として見た場合に、正の数ばかりであることに気がつきました。そこで補正の結果が負数(80〜FF)になるものを考えます。S(サイン)フラグがセットされることを確認するためです。
上のZ(ゼロ)フラグはともかくとして、BCD数の計算に対してS(サイン)フラグに何の意味があるか、という気がしますけれど、まあ、ことのついでですから、あまり意味はないですけれど、一応テストしておくことにいたします。
16進数 10進数
97 97
85(+ 85(+
1 1C 182
↑Cフラグ
DAA補正(16進数)
1C
66(+
1 82
↑Cフラグ
●DAA命令のテストプログラムです
短いプログラムですけれど、いかにもプログラムだなあ、という感じがしませんでしょうか?
というところで、本日は、時間がなくなってしまいましたので、プログラムの説明は、次回にすることにいたします。
2009.5.14upload
前へ
次へ
ホームページトップへ戻る