2017-06-30 22 views
4

Z80、8080、8085、および8086プロセッサのフラグレジスタでは、ビット1,3,5の目的は "予約済み"または "未定義"として文書化されていますか?フラグレジスタの予約/未定義ビットの目的は何ですか?

+2

Z-80のビット1は、最後の命令が加算または減算であったかどうかを示すNフラグとして定義され、DAA命令によって使用されます。 –

答えて

8

これらのビットは未使用です。つまり、命令によって明示的に値が設定されることはありません。設計者は5/6フラグで十分だと判断し、フラグレジスタの残りのビットを未使用のままにしました。

これらの命令は、命令が実行された後にどの値が残っているかを事前に知ることができないため、「未定義」と記載されています。プロセッサ設計は、明示的に0に設定するのではなく、または1

厳密に言えば、これらのフラグdoは実際には予測可能な値を得ます。結局のところ、プロセッサは常に同じ出力を生成し、同じ組み合わせで与えられた内部状態に変化します入力と前の内部状態の

フラグ3,5は次のように設定されている:最後(HL)を減算し、Hフラグが設定された場合 次いで(1とそれを減少、テイク/たとえば、this document about undocumented Z80 instructions CPIについて以下言いますアフター/ CP)。この値のビット1 は、ビット3は、しかし、ポイントフラグ3

で、フラグ5であるこの現象は意図しない側-JUST効果、およびでないことである将来の反復中に存在することが保証プロセッサの数。そういうわけで、彼らは単に「未定義」であると文書化されています。「あなたには役に立たないので、無視するだけです」。

+2

Z-80の "POP AF"は、フラグレジスタのすべてのビットを設定します。そのため、フラグレジスタの未定義ビットを副作用で設定する命令はありませんが、すべてのビットをセットする命令があります。プログラムは、 "POP AF; PUSH AF"がスタックの一番上を変えずに残すことを安全に想定できます。 –

+0

@GeorgePhillips:現在のスタックポインタよりも一時的に下にあるメモリを割り込みハンドラが非同期的にクローバすることができないように、割り込みが無効になっている場合。 –

+0

さて、はい、しかし、ポイントの横にビット。それでは、これを言いましょう。 PUSH HL、POP AF、PUSH AF、POP HLはHLの内容を変更しません。 –

関連する問題