質問

バイナリがわからない場合、BCDはより直感的なデータ型のようなものです。しかし、なぜこのエンコードを使用するのかはわかりません。4ビットでの廃棄物の表現(表現が9より大きい場合)であまり意味がありません。

また、X86はAddとSubsのみを直接サポートしていると思います(FPUを介してそれらを変換できます)。

これは古い機械やその他のアーキテクチャから来る可能性がありますか?

ありがとう!

役に立ちましたか?

解決

BCDは多くのこと、つまり上記の理由に役立つと思います。見落とされていると思われる一種の明らかなことの1つは、バイナリからBCDへの指示を提供することです。これは、ASCII数を算術のためにバイナリに変換するのに非常に役立ちます。

ポスターの1つは、ASCIIに頻繁に保存される数字について間違っていましたが、実際には、より効率的であるため、多くのバイナリ数ストレージが行われます。また、ASCIIをバイナリに変換することは少し複雑です。 BCDは、ASCIIとバイナリの間で一種の進行です。BSDTointとINTTOBCDの命令がある場合、コンバージョンは非常に簡単になります。すべてのASCII値は、算術のためにバイナリに変換する必要があります。したがって、BCDは実際にそのASCIIからバイナリ変換に役立ちます。

他のヒント

BCD算術は、多くの場合、財務アプリケーション、会計などの要件である正確な小数計算に役立ちます。また、10のパワーで除算/分割するなどのものになります。最近では、より良い選択肢があります。

良いことがあります ウィキペディアの記事 プロと短所について説明します。

BCDは、レジスタ内の値が一部の出力デバイスによって表示される場合、電子機器スペクトルの非常にローエンドで役立ちます。たとえば、数字を示す多くの7セグメントディスプレイを備えた計算機があるとします。各ディスプレイが個別のビットで制御されている場合は便利です。

これらの種類のディスプレイを備えたデバイスで最新のX86プロセッサが使用されることは信じがたいと思われるかもしれませんが、X86は戻ってきます 長いです 方法、そしてISAは非常に多くの後方互換性を維持しています。

BCDは宇宙だけ無駄です、それは本当ですが、それは 「固定ピッチ」形式, 、特定の数字でn桁を簡単に見つけることができます。

別の利点は、それが許すことです 任意のサイズ数に関する正確な算術計算. 。また、言及された「固定ピッチ」特性を使用して、このような算術操作は複数のスレッドに簡単に充電できます(並列処理).

現在、数字をバイナリ形式で保存し、ディスプレイの目的で小数形式に変換することが一般的ですが、変換には時間がかかります。数の主な目的が表示されるか、表示される数値に追加される場合、バイナリで計算を実行して小数に変換するよりも、小数形式で計算を実行する方が実用的かもしれません。数値読み取り値を備えた多くのデバイス、および多くのビデオゲームは、バイトあたり2桁を保存するパックされたBCD形式に番号を保存しました。これが、多くのスコアカウンターが、2つの力の価値ではなく1,000,000ポイントでオーバーフローする理由です。ハードウェアが梱包されたBCD算術を促進しなかった場合、代替手段はバイナリを使用するのではなく、未払いの小数を使用することです。パックされたBCDを、表示されている瞬間に梱包された小数を開梱することに変換することは、一度に簡単に数字を実行できます。対照的に、バイナリを小数に変換することははるかに遅く、全体の量で動作する必要があります。

ちなみに、8086命令セットは、「分割のASCII調整」と「乗算のASCII調整」の指示で見た唯一のものです。不思議なことに、値「0A」はマシンの命令の一部であり、異なる数字を置き換えると、それらの命令が他の数量を掛けたり除算したりしますが、命令は汎用的なマルチプライド/分割命令として文書化されていません。 。なぜその機能が文書化されなかったのだろうか、それが役に立つかもしれないので、なぜだろうか?

また、パックされたBCDの追加または減算に使用されるさまざまなアプローチプロセッサに注意することも興味深いことです。多くはバイナリの追加を実行しますが、フラグを使用して、追加中にキャリーがビット3からビット4に発生したかどうかを追跡します。その後、コードが結果をクリーンアップ(PIC)をクリーンアップするか、オペコードを供給して追加の追加をクリーンアップしますが、減算ではなく、1つのオプコードを供給して追加をクリーンアップし、別のオペレーション(x86など)を使用するか、フラグを使用して最後のものを追跡するかどうかを確認することができます。操作は追加または減算であり、同じオプコードを使用して両方をクリーンアップしました(例:Z80)。 BCD算術(例えば68000)に個別のオペコードを使用するものもあれば、Flagを使用してAdd/減算操作がバイナリまたはBCD(例えば6502デリバティブ)を使用するかどうかを示すものもあります。興味深いことに、元の6502はバイナリ数学と同じ速度でBCD数学を実行しますが、それのCMOS誘導体はBCD操作に追加のサイクルを必要とします。

以前にリンクされているWikiの記事はより詳細になると確信していますが、IBMメインフレームプログラミング(PL/I)でBCDを使用しました。 BCDは、個々の数字を見つけるためにバイトの特定の領域を調べることができることを保証するだけでなく、これは時々有用です - ハードウェアが簡単なルールを適用して、2つの数値を一緒に追加または乗算するために必要な精度とスケールを計算することもできます。

私が思い出すように、メインフレームでは、BCDのサポートがハードウェアに実装され、その時点でフローティングポイント数を表現するための唯一のオプションであると言われました。 (私たちはここに行く18年を話しています!)

私が30年以上前に大学にいたとき、私はBCD(COBOLのCOMP-3)が良い形式である理由を言われました。

これらの理由はどれも、最新のハードウェアに関連するものではありません。高速のバイナリ固定点算術があります。各BCDデジットにオフセットを追加することにより、BCDを表示可能な形式に変換できる必要がなくなりました。数字を1桁あたり8ビットとして保存することはめったにないため、BCDが1桁あたり4ビットしかかからないという事実はあまり興味深いものではありません。

BCDは遺物であり、それが属する過去に残されるべきです。

ヘキサで表現されるサイズの量は非常に少ないため、中間結果を小数点以下に表示するか、少なくとも小数で表示することが役立ちます。特に金融または会計の世界で。

最新のコンピューティングは、あちこちでいくつかのCPUサイクルを最適化するのではなく、設計ロジックをキャプチャするコーディングを強調しています。保存された時間および/またはメモリの価値は、多くの場合、特別なビットレベルのルーチンを書く価値がありません。

そうは言っても、BCDはまだ時々有用です。

私が考えることができる一例は、CSVのようなASCII形式の巨大なデータベースフラットファイルまたはその他のビッグデータがある場合です。 BCDは、いくつかの制限の間の価値を探していることだけである場合、BCDは素晴らしいです。すべての値をスキャンするときにすべての値を変換するには、すべてのデータが処理時間を大幅に増加させることを示します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top