Assembler : warum BCD existiert?
Ich weiß, BCD ist wie intuitiver Datentyp, wenn Sie nicht wissen binären.
Aber ich weiß nicht, warum diese Codierung nutzen, wie seine nicht viel Sinn macht, da seine Abfälle
Vertretung in 4bits (wenn Darstellung größer ist als 9).
Denke auch ich, dass nur x86 unterstützt, ergänzt und subs direkt (Sie können konvertieren Sie Sie über FPU).
Ist es möglich, dass dieser kommt aus alten Maschinen oder andere Architekturen?
Dank!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, BCD ist für viele Dinge nützlich, die Gründe, die oben gegeben. Eine Sache, die ist sowas von Auffällig, das scheint übersehen worden ist, bietet eine Anleitung, um zu gehen von Binär in BCD und Umgekehrt. Dies könnte sehr nützlich sein bei der Umwandlung einer ASCII-Zahl in eine Binärzahl um für arithmatic.
Einem der Plakate war falsch über zahlen gespeichert werden, oft im ASCII -, tatsächlich eine Menge binäre Zahl, die Lagerung erfolgt, weil seine effizienteren. Und Konvertierung von ASCII nach Binär ist ein wenig kompliziert. BCD ist die Art von gehen zwischen ASCII-und Binär, wenn es eine bsdtoint und inttobcd Anleitung machen würde conversions als solche wirklich einfach. Alle ASCII-Werte konvertiert werden müssen binäre für arithmatic. So, BCD ist tatsächlich nützlich, dass ASCII-binary Umwandlung.
BCD-Arithmetik ist nützlich für die genaue dezimale Berechnungen, die oft eine Voraussetzung für Finanz-Anwendungen, Rechnungswesen, etc. Es macht auch Dinge wie die Multiplikation/Division durch Potenzen von 10 zu erleichtern. In diesen Tagen gibt es bessere alternativen.
Gibt es eine gute Wikipedia-Artikel die diskutiert die vor-und Nachteile.
BigDecimal
Art auf die hardware-BCD-es würde sicher schnell gehen, wenn Sie es auch so gemacht hat. Ich bin mir nicht sicher, was wäre "besser" als die Verwendung der hardware-Datentyp.BCD ist nützlich bei sehr low-end-Elektronik Spektrum, wenn der Wert in einem register angezeigt wird, durch eine Ausgabe-Gerät. Zum Beispiel, sagen, Sie haben einen Taschenrechner mit einer Reihe von sieben-segment-anzeigen, die eine Zahl anzeigen. Es ist bequem, wenn jede Anzeige wird gesteuert durch separate bits.
Kann es unglaubwürdig erscheint, dass ein moderner x86-Prozessor würde verwendet werden, ein Gerät mit dieser Art von displays, aber x86 geht zurück lange Weg, und die ISA unterhält eine große Abwärtskompatibilität.
BCD-Raum-Weise verschwenderisch, das ist wahr, aber es hat den Vorteil, dass ein "fixed pitch" - format, so dass es leicht zu finden die N-te Ziffer einer Zahl.
Ein weiterer Vorteil ist, dass es für genaue arithmetische Berechnungen auf beliebige Größe zahlen. Auch mit dem "fixed pitch" genannten Eigenschaften, wie arithmetische Operationen können leicht werden wiederum unterteilt in mehrere threads (parallele Verarbeitung).
BCD existiert in modernen x86-CPU 's, da es in der ursprünglichen 8086-Prozessor, und alle x86 CPU' s 8086 kompatibel. BCD-Operationen in x86 verwendet wurden, zur Unterstützung von business-Anwendungen, wie damals. BCD-Unterstützung im Prozessor selbst ist nicht wirklich mehr genutzt.
Beachten Sie, dass BCD ist eine exakte Darstellung von Dezimalzahlen, die floating-point nicht ist, und dass die Umsetzung von BCD-in hardware wesentlich einfacher ist als die Implementierung floating point. Diese Art von Dingen zählte, mehr, zurück, wenn die Prozessoren hatten weniger als eine million transistoren, die lief auf ein paar megahertz.
Heutzutage ist es üblich, zum speichern von zahlen im Binär-format, und konvertieren Sie Sie in Dezimalformat für die Anzeige, aber die Umstellung dauert einige Zeit. Wenn der primäre Zweck einer Zahl angezeigt werden, oder Hinzugefügt werden, um eine Zahl, die angezeigt wird, kann es praktischer sein, um Berechnungen durchzuführen, die in ein decimal-format als um Berechnungen durchzuführen, die in binären und konvertieren Sie Sie in Dezimalformat. Viele Geräte mit numerischen anzeigen, und viele video-Spiele, gespeicherte Nummern im gepackten BCD-format speichert zwei Ziffern pro byte. Dies ist der Grund, warum viele score-Zähler überlauf 1.000.000 Punkte eher als power-of-two-Wert. Wenn die hardware nicht erleichtern packed-BCD-Arithmetik, die alternative wäre nicht mit binären, aber ausgepackt dezimal. Konvertieren von gepackten BCD zu dezimal entpackt im moment ist es angezeigt, können Sie einfach tun, eine Ziffer zu einem Zeitpunkt. Konvertieren von Binär zu dezimal, durch Kontrast, ist wesentlich langsamer und erfordert ein Betriebssystem auf die gesamte Menge.
Übrigens, den 8086-Befehlssatz ist der einzige, den ich gesehen habe mit den Anweisungen für die "ASCII Adjust for Division" und "ASCII Adjust for Multiplication", von denen vermehrt ein byte von zehn und die andere dividiert durch zehn. Seltsamerweise ist der Wert "0A" ist Teil der Maschine Anweisungen, die ersetzt wurde durch eine andere Nummer führen Sie die Anweisungen zum multiplizieren oder dividieren Sie durch andere Mengen, aber die Anweisungen sind nicht dokumentiert, als general-purpose-Multiplikation/Division-durch-die ständige Anweisungen. Ich Frage mich, warum diese Funktion nicht dokumentiert ist, gegeben, dass es nützlich gewesen sein könnte?
Es ist auch interessant zu beachten, die Vielfalt der Ansätze verwendeten Prozessoren für das hinzufügen oder Subtraktion von gepackten BCD. Viele führen Sie eine binäre addition, aber verwenden Sie eine Flagge, um zu verfolgen, ob ein tragen kam von bit 3 auf bit 4 bei einer addition; Sie dürfen dann erwarten, dass code zu bereinigen, das Ergebnis (z.B. PIC), liefern einen opcode Aufräumen neben, aber nicht die Subtraktion, die Versorgung eines opcode zu bereinigen, und neben anderen für die Subtraktion (z.B. x86), oder verwenden Sie eine Flagge, um nachzuverfolgen, ob der Letzte Vorgang war, addition oder Subtraktion, und verwenden Sie den gleichen Befehl zu bereinigen, sowohl (z.B. Z80). Einige verwenden Sie separate Befehle zur BCD-Arithmetik (z.B. 68000), und einige verwenden einer flag, um anzugeben, ob addition/Subtraktion Operationen sollte die Verwendung binäre oder BCD (z.B. 6502-Derivate). Interessanterweise ist die original-6502 führt BCD Mathematik auf die gleiche Geschwindigkeit wie binäre Mathematik, aber CMOS Derivate davon benötigen einen zusätzlichen Zyklus für BCD-Operationen.
FBLD
undFLSTP
laden und speichern mit BCD-zahlen. Einige moderne Architekturen hardware-Unterstützung für die decimal-float wie Power6 und IBM z10Ich bin mir sicher, dass der Wiki-Artikel bereits verlinkt, geht mehr in detail, aber ich verwendet, BCD auf IBM-mainframe-Programmierung (PL/I). BCD-nicht nur garantiert, dass Sie sich auf bestimmte Bereiche eines byte zu finden, eine einzelne Zahl - das ist nützlich, manchmal aber auch erlaubt, die hardware zu gelten einfache Regeln zum berechnen der erforderlichen Genauigkeit und dezimalstellenanzahl für z.B. addieren oder zu multiplizieren zwei zahlen zusammen.
Soweit ich mich erinnere, wurde mir gesagt, dass auf mainframes, Unterstützung für BCD wurde in hardware implementiert und in dieser Zeit, war unsere einzige option für die Darstellung von Gleitkommazahlen. (Wir reden hier von 18 Jahren gehen hier!)
Als ich im college war vor über 30 Jahren, wurde mir gesagt, die Gründe, warum BCD (COMP-3 in COBOL), war ein gutes format.
Keiner dieser Gründe noch relevant sind mit moderner hardware. Wir haben schnelle, binäre fixed point Arithmetik. Wir müssen nicht mehr in der Lage sein zu wandeln BCD-zu einem anzeigbaren format durch hinzufügen von offset zu jeder BCD-Ziffer. Wir selten zahlen speichern, als acht bit pro Ziffer, so dass die Tatsache, dass BCD dauert nur vier bits pro Ziffer ist nicht sehr interessant.
BCD ist ein Relikt und sollte in der Vergangenheit gelassen werden, wo es hingehört.
Sehr wenige Menschen können die Größe ausgedrückten Beträge in hexa, so ist es sinnvoll zu zeigen, oder zumindest anzeigen, zwischengeschaltete Ergebnis in dezimal. Speziell in der Finanz-oder Rechnungswesen-Welt.
Moderne computing hat betont, Codierung, zeichnet die design-Logik, anstatt die Optimierung von ein paar cpu-Zyklen, hier oder dort. Der Wert der Zeit und/oder Speicher gespeichert ist oft nicht Wert, schriftlich Spezial-bit-level-Routinen.
Dass gesagt wird, die BCD immer noch gelegentlich nützlich.
Dem einen Beispiel, das ich denken kann, ist, wenn man eine riesige Datenbank mit flachen Dateien oder anderen großen Daten, die in ein ASCII-format wie CSV. BCD ist genial, wenn alles, was Sie tun, ist Blick für den Wert zwischen den Grenzen. Zum konvertieren aller Werte, wie Sie scan all dieser Daten würde erheblich die Verarbeitungszeit erhöhen.