私は Z80 エミュレーターを書いていますが、特定のオペランドに対して 10 進調整命令が何をするかを理解しようとしています。実際の Z80 でのこれらのオペコードの結果 (レジスタ A と F) はどうなりますか?
LD A,1h
ADD A,99h
DAA
私のコードは現在、A レジスタの 0xA0 で終了し、ハーフ キャリー ビットとオーバーフロー ビットが設定されています。しかし、それは 0 を返すべきでしょうか?
BCD 2 桁のバイト結果を A レジスタに残す ADD 命令の後でのみ、DAA を実行します。
ADD オペラントは、パックされた 2 つの BCD 数字で構成されている必要があります。DAA 命令は、正しい 2 桁のパック 10 進数の結果を格納するように A レジスタを調整し、オーバーフロー、キャリー、およびゼロ フラグも影響を受けます。結果 (DAA 実行後) が 99 より大きい場合、キャリー フラグは DAA 後に設定されます。
x86 CPU は、Z80 DAA 命令に非常に近い DAA 命令もサポートしているため、x86 プラットフォームで作業している場合はエミュレーションで使用できます。