Frage

Ich weiß, dass BCD ein intuitiverer Datentyp ist, wenn Sie Binär nicht kennen.Aber ich weiß nicht, warum ich diese Codierung verwenden soll. Es ist so, als wäre es nicht viel Sinn, da seine Abfalldarstellung in 4bits (wenn die Darstellung größer als 9 ist).

Außerdem denke ich, dass x86 Adds und Subs nur direkt unterstützt (Sie können sie über FPU konvertieren).

Ist es möglich, dass dies von alten Maschinen oder anderen Architekturen stammt?

Danke!

War es hilfreich?

Lösung

Ich denke, BCD ist für viele Dinge nützlich, die oben angegebenen Gründe. Eine Sache, die offensichtlich ist, die übersehen worden zu sein scheint, ist eine Anweisung, von Binär zu BCD und dem Gegenteil zu wechseln. Dies könnte sehr nützlich sein, um eine ASCII -Zahl für arithmatisch in Binärzumachen umzuwandeln.

Eines der Plakate war falsch, wenn Zahlen häufig in ASCII gespeichert wurden. Tatsächlich ist eine Menge Binärzahlspeicher erfolgen, da es effizienter ist. Und die Umwandlung von ASCII in Binärer ist etwas kompliziert. BCD ist eine Art zwischen ASCII und Binärer. Wenn es eine BSDtoint- und InttOBCD -Anweisungen gäbe, würde es Conversions als solche wirklich einfach machen. Alle ASCII -Werte müssen für arithmatisch in binär konvertiert werden. BCD ist also in diesem ASCII für binäre Umwandlung nützlich.

Andere Tipps

Die BCD -Arithmetik ist nützlich für genaue Dezimalberechnungen, was häufig für Finanzanwendungen, Buchhaltung usw. erforderlich ist. Außerdem erleichtert sich die Multiplikation/Dividierung durch Befugnisse von 10. Heutzutage gibt es bessere Alternativen.

Es gibt eine gute Wikipedia -Artikel was die Pro und Nachteile erörtert.

BCD ist am sehr niedrigen Ende des Elektronikspektrums nützlich, wenn der Wert in einem Register von einem Ausgangsgerät angezeigt wird. Angenommen, Sie haben einen Taschenrechner mit einer Reihe von sieben Segmentanzeigen, die eine Zahl anzeigen. Es ist bequem, wenn jedes Display durch separate Bits gesteuert wird.

Es mag unplausibel erscheinen, dass ein moderner X86 -Prozessor in einem Gerät mit solchen Displays verwendet wird, aber X86 geht zurück a lang Way, und der ISA hat eine große Rückwärtskompatibilität.

BCD ist räumlich verschwenderisch, das stimmt, aber es hat den Vorteil, a zu sein Format "feste Tonhöhe", um die n -te Ziffer in einer bestimmten Zahl leicht zu finden.

Ein weiterer Vorteil ist, dass dies zulässt exakte arithmetische Berechnungen zu beliebigen Größenzahlen. Verwenden der genannten Merkmale "fester Tonhöhen" können solche arithmetischen Operationen leicht in mehrere Threads abgeschnitten werden (Parallelverarbeitung).

BCD existiert in modernen x86-CPUs seit dem ursprünglichen 8086-Prozessor, und alle x86-CPUs sind 8086-kompatibel.BCD-Operationen in x86 wurden damals zur Unterstützung von Geschäftsanwendungen eingesetzt.Die BCD-Unterstützung im Prozessor selbst wird nicht mehr wirklich genutzt.

Beachten Sie, dass BCD eine exakte Darstellung von Dezimalzahlen ist, was bei Gleitkommazahlen nicht der Fall ist, und dass die Implementierung von BCD in Hardware weitaus einfacher ist als die Implementierung von Gleitkommazahlen.Solche Dinge spielten eine größere Rolle, als Prozessoren weniger als eine Million Transistoren hatten, die mit einigen Megahertz liefen.

Heutzutage ist es üblich, Zahlen im Binärformat zu speichern und sie für Anzeigezwecke in Dezimalformat umzuwandeln, aber die Umwandlung dauert einige Zeit. Wenn der Hauptzweck einer Zahl angezeigt werden soll oder zu einer Zahl hinzugefügt werden soll, die angezeigt wird, kann es praktischer sein, Berechnungen in einem Dezimalformat durchzuführen, als Berechnungen in Binärer durchzuführen und in eine Dezimalheit umzuwandeln. Viele Geräte mit numerischen Anzeigen und vielen Videospielen speichern Zahlen im vollgepackten BCD -Format, das zwei Ziffern pro Byte speichert. Aus diesem Grund überlaufen viele Punkte der Punktzahl bei 1.000.000 Punkten und nicht mit einem zweifachen Wert. Wenn Hardware die gepackte BCD-Arithmetik nicht erleichtert hätte, wäre die Alternative nicht die Verwendung von Binärdateien, sondern die auspackte Dezimalzahl. Das Umwandeln gepackter BCD in die derzeit angezeigte Dezimalzahlung kann problemlos gleichzeitig durchgeführt werden. Die Umwandlung von Binär in Dezimalheit ist dagegen viel langsamer und erfordert den Betrieb mit der gesamten Menge.

Im Übrigen ist der 8086 -Befehlssatz der einzige, den ich mit Anweisungen für "ASCII -Anpassung für die Teilung" und "ASCII Anpassung für die Multiplikation" gesehen habe, von denen eines ein Byte mit zehn und anderen multipliziert, von denen sich um zehn trennen. Seltsamerweise ist der Wert "0a" Teil der Maschinenanweisungen, und das Ersetzen einer anderen Zahl führt dazu . Ich frage mich, warum diese Funktion nicht dokumentiert wurde, da sie nützlich sein könnte?

Es ist auch interessant, die Vielfalt der Ansätze zu beachten, die zum Hinzufügen oder Subtrahieren gepackter BCD verwendet werden. Viele führen eine binäre Ergänzung durch, verwenden jedoch eine Flagge, um zu verfolgen, ob ein Trage von Bit 3 bis Bit 4 während einer Addition aufgetreten ist. Sie können dann erwarten, dass Code das Ergebnis (z. B. PIC) bereinigt wird, eine Opcode für die Reinigung von Aufräumarbeiten, jedoch nicht die Subtraktion, einen Opcode zur Verfügung stellt, um die Ergänzung zu beseitigen, und einen anderen für die Subtraktion (z. B. x86) oder verwenden Sie ein Flag, um zu verfolgen, ob das letzte Der Betrieb war Zugabe oder Subtraktion und verwendet denselben Opcode, um beide zu reinigen (z. B. Z80). Einige verwenden separate Opcodes für BCD -Arithmetik (z. B. 68000), und einige verwenden ein Flag, um anzuzeigen, ob add/subtrahierende Vorgänge binäre oder BCD (z. B. 6502 Derivate) verwenden sollten. Interessanterweise führt der ursprüngliche 6502 BCD -Mathematik mit der gleichen Geschwindigkeit wie binärer Mathematik durch, aber CMOS -Derivate von IT erfordern einen zusätzlichen Zyklus für BCD -Operationen.

Ich bin sicher, der Wiki -Artikel, der mit früheren Details verlinkt ist, geht detaillierter aus, aber ich habe BCD für IBM Mainframe -Programmierung (in PL/I) verwendet. BCD garantiert nicht nur, dass Sie bestimmte Bereiche eines Byte untersuchen können, um eine individuelle Ziffer zu finden - die manchmal nützlich ist -, sondern auch die Hardware ermöglichte, einfache Regeln anzuwenden, um die erforderliche Genauigkeit und Skalierung für das Hinzufügen oder Multiplizieren von zwei Zahlen für z. B. miteinander zu berechnen.

Wie ich mich erinnere, wurde mir mitgeteilt, dass bei Mainframes die Unterstützung für BCD in Hardware implementiert wurde und zu diesem Zeitpunkt unsere einzige Option für die Darstellung von schwimmenden Punktnummern war. (Wir reden von 18 Jahren hier!)

Als ich vor über 30 Jahren auf dem College war, wurde mir die Gründe mitgeteilt, warum BCD (COMP-3 in COBOL) ein gutes Format war.

Keiner dieser Gründe ist mit modernen Hardware immer noch relevant. Wir haben eine schnelle, binäre Fixpunktarithmetik. Wir müssen nicht mehr in der Lage sein, BCD in ein angezeigbares Format umzuwandeln, indem wir jeder BCD -Ziffer einen Offset hinzufügen. Wir speichern selten Zahlen als acht Bit pro Ziffer. Die Tatsache, dass BCD nur vier Bits pro Ziffer benötigt, ist nicht sehr interessant.

BCD ist ein Relikt und sollte in der Vergangenheit gelassen werden, wo es hingehört.

Nur sehr wenige Menschen können in Hexa ausgedrückt werden. Es ist daher nützlich, das Intermediary -Ergebnis zu zeigen oder zumindest in Dezimalzonen anzuzeigen. Speziell in der Finanz- oder Buchhaltungswelt.

Modernes Computer hat die Codierung hervorgehoben, die die Designlogik erfasst, anstatt hier oder da einige CPU -Zyklen zu optimieren. Der Wert der Zeit und/oder des Speichers, das oft gespeichert ist, ist es nicht wert, spezielle Routinen auf Bit-Level zu schreiben.

Davon abgesehen ist BCD immer noch gelegentlich nützlich.

Das eine Beispiel, an das ich denken kann, ist, wenn Sie eine riesige Datenbank -Flatfiles oder andere solche großen Daten haben, die sich in einem ASCII -Format wie CSV befinden. BCD ist großartig, wenn Sie nur nach einem Wert zwischen einigen Grenzen suchen. Um alle Werte zu konvertieren, während Sie alle Daten scannen, würden die Verarbeitungszeit erheblich erhöht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top