5

これを私の2番目のZ80DAA質問にしたことをお詫びします-私はこの命令をほぼ実装しましたが、私が確信していないことが1つあります-この命令によってHフラグが設定されていますか?Z80のマニュアルには「指示を参照」と書かれていますが、DAAの実行後ではなく、DAAの前のフラグについてのみ言及されています。

私は次のようにフラグを設定しました:

結果が負の場合はSが設定されます(0x80&結果は0x80に等しい)結果がゼロの場合はZが設定されますH(したがってこの質問はわかりません)P / Vは結果のパリティに設定されます(偶数の場合は1、奇数の場合は0)N元のアキュムレータ値の上位ニブルが変更された場合、Cが設定されます。

これ以外は、私が期待するように指示が実行されているようです:-)誰かが私のためにこれを片付けてくれることを願っています、どうもありがとう。

4

2 に答える 2

3

ここで見つけたのは、ハーフキャリー/ボローフラグがDAAによって変更されていることだけです。

このフラグは、x86 CPUのDAAおよびDAS命令によってAF(補助キャリー)フラグが設定されるのとまったく同じように設定することをお勧めします。i8080 / i8085/Z80とi8086のDAA/DASの動作に違いがあるはずの理由はわかりません。

x86 DAA / DASは、アキュムレータの下位4ビットを6だけ調整すると、AFを1に設定します。調整しない場合は、AFを0にリセットします。

Intel(またはAMD)のx86CPUマニュアルのDAAおよびDASの擬似コードを参照してください。

于 2011-12-01T08:51:10.140 に答える
2

いい質問ですね。はい、Hフラグの動作は明確に文書化されていません。これは、動作が。で非標準であるためDAAです。

Aの下位ニブル(最下位4ビット)が10進数以外(A、B、C、D、E、Fなどの9より大きい)であるか、 Hフラグが設定されている場合、6がレジスタに追加されます。つまり、下のニブルが0〜9の範囲にある場合でも、Hフラグを設定することにより、Aレジスタに6を強制的に追加できます。

私の経験では、Hフラグは通常手つかずのままですが、「効果は非標準」と言われているため、状況によってHフラグが変わる場合と変わらない場合があります。このような場合、HフラグはDAA、テストで影響を受けていないことがわかっていても、実行後の命令の影響を受けると常に考える必要があります。

于 2011-12-01T08:03:40.443 に答える