Microsoft-Binärformat - Microsoft Binary Format

In der Datenverarbeitung ist Microsoft Binary Format (MBF) ein Format für Gleitkommazahlen, das in den BASIC- Sprachprodukten von Microsoft verwendet wurde, einschließlich MBASIC , GW-BASIC und QuickBASIC vor Version 4.00.

Es gibt zwei Hauptversionen des Formats. Die ursprüngliche Version wurde für speicherbeschränkte Systeme entwickelt und speicherte Zahlen in 32 Bit (4 Byte), mit einer 23-Bit- Mantisse , einem 1-Bit-Vorzeichen und einem 8-Bit- Exponenten . Extended (12k) BASIC beinhaltete einen Double-Precision-Typ mit 64 Bit.

Während der Portierung von der Intel 8080- Plattform auf den MOS 6502- Prozessor begannen Computer mit mehr Speicher als Standardfunktion auszuliefern. Diese Version wurde mit dem ursprünglichen 32-Bit-Format oder einem optionalen erweiterten 40-Bit-Format (5-Byte) angeboten. Das 40-Bit-Format wurde von den meisten Heimcomputern der 1970er und 1980er Jahre verwendet. Diese beiden Versionen werden manchmal als "6-stellig" bzw. "9-stellig" bezeichnet.

Auf PCs mit x86- Prozessor führte QuickBASIC vor Version 4 das Double-Precision-Format mit einer 55-Bit-Mantisse in einem 64-Bit (8-Byte)-Format wieder ein. MBF wurde beim Wechsel zu QuickBASIC 4 aufgegeben, das das einige Jahre zuvor eingeführte Standardformat IEEE 754 verwendet.

Geschichte

Bill Gates und Paul Allen arbeiteten 1975 an Altair BASIC . Sie entwickelten die Software an der Harvard University auf einem DEC PDP-10 , auf dem ihr Altair- Emulator lief . Eine Sache, die ihnen fehlte, war Code für die Verarbeitung von Gleitkommazahlen, der für Berechnungen mit sehr großen und sehr kleinen Zahlen erforderlich war, was insbesondere für Wissenschaft und Technik nützlich wäre. Eine der vorgeschlagenen Verwendungen des Altair war als wissenschaftlicher Taschenrechner.

Frontplatte des Altair 8800

Bei einem Abendessen im Currier House , einem Studentenwohnheim in Harvard, beschwerten sich Gates und Allen bei ihren Dinner-Begleitern, dass sie diesen Code schreiben mussten, und einer von ihnen, Monte Davidoff , sagte ihnen, dass er schon einmal Gleitkomma-Routinen geschrieben hatte und überzeugte Gates und Allen, dass er in der Lage war, den Gleitkommacode Altair BASIC zu schreiben. Zu der Zeit, als IBM eigene Programme einführte, gab es keinen Standard für Gleitkommazahlen, also musste Davidoff seine eigenen entwickeln. Er entschied, dass 32 Bit genügend Reichweite und Präzision ermöglichen würden. Als Allen es MITS demonstrieren musste , war es das erste Mal, dass es auf einem echten Altair lief. Aber es funktionierte, und als er 'PRINT 2+2' eingab, gab Davidoffs Additionsroutine die richtige Antwort.

Der Quellcode für Altair BASIC galt als verschollen, tauchte aber im Jahr 2000 wieder auf. Er hatte hinter Gates' ehemaligem Tutor und Dekan Harry Lewis 's Aktenschrank gelegen, der ihn wiederentdeckte. Ein Kommentar in der Quelle schreibt Davidoff als Autor des Mathe-Pakets von Altair BASIC zu.

Radio Shack Tandy TRS-80 Modell I System

Altair BASIC hob ab und bald liefen die meisten frühen Heimcomputer in irgendeiner Form von Microsoft BASIC. Der BASIC-Port für die 6502- CPU, wie er im Commodore PET verwendet wird , nahm aufgrund der geringeren Codedichte des 6502 mehr Platz ein. Aus diesem Grund würde er wahrscheinlich nicht zusammen mit dem maschinenspezifischen Eingang in einen einzelnen ROM-Chip passen und Ausgabecode. Da ein zusätzlicher Chip erforderlich war, stand zusätzlicher Speicherplatz zur Verfügung, der teilweise dazu verwendet wurde, das Gleitkommaformat von 32 auf 40 Bit zu erweitern. Dieses erweiterte Format wurde nicht nur von Commodore BASIC 1 & 2 bereitgestellt , sondern auch von Applesoft BASIC I & II seit Version 1.1 (1977), KIM-1 BASIC seit Version 1.1a (1977) und MicroTAN BASIC seit Version 2b ( 1980). Nicht lange danach führten die Z80- Ports, wie Level II BASIC für den TRS-80 (1978), das 64-Bit-Format mit doppelter Genauigkeit als separaten Datentyp von 32-Bit-Einfachpräzision ein. Microsoft verwendete die gleichen Gleitkommaformate in ihrer Implementierung von Fortran und für ihren Makro-Assembler MASM , obwohl ihre Tabellenkalkulation Multiplan und ihre COBOL- Implementierung Binär-codierte Dezimal (BCD) Gleitkomma verwendet haben. Trotzdem wurde MBF für eine Weile zum De-facto-Gleitkommaformat auf Heimcomputern, bis zu dem Punkt, an dem Leute immer noch gelegentlich auf ältere Dateien und Dateiformate stoßen, die es verwenden.

VAX-11/780- Minicomputer

Parallel dazu hatte Intel 1976 mit der Entwicklung eines Gleitkomma- Coprozessors begonnen . William Morton Kahan schlug als Berater von Intel vor, dass Intel den Gleitkommawert des VAX der Digital Equipment Corporation (DEC) verwenden sollte. Der erste VAX, der VAX-11/780, war gerade erst Ende 1977 erschienen und sein Gleitkomma wurde hoch angesehen. Die Gleitkommaformate von VAX unterschieden sich von MBF nur dadurch, dass sie das Vorzeichen im höchstwertigen Bit hatten. Um ihren Chip jedoch auf einem möglichst breiten Markt zu vermarkten, wurde Kahan gebeten, Spezifikationen zu erstellen. Als Gerüchte über den neuen Chip von Intel die Konkurrenten erreichten, starteten sie eine Standardisierungsbemühung namens IEEE 754 , um zu verhindern, dass Intel zu viel an Boden gewinnt. Da ein 8-Bit-Exponent für einige Operationen, die für Zahlen mit doppelter Genauigkeit gewünscht sind, nicht breit genug war, z 60-Bit-Gleitkommaformat des CDC 6600 von 1965. Kahans Vorschlag sah auch Unendlichkeiten vor, die nützlich sind, wenn es um Division-durch-Null-Bedingungen geht; Nicht-Zahlen-Werte, die beim Umgang mit ungültigen Operationen nützlich sind; denormale Zahlen , die helfen, durch Unterlauf verursachte Probleme zu mildern; und ein besser ausgewogener Exponenten-Bias , der helfen könnte, Überlauf und Unterlauf zu vermeiden, wenn der Kehrwert einer Zahl genommen wird.

Als QuickBASIC 4.00 veröffentlicht wurde, war der IEEE 754-Standard weit verbreitet – zum Beispiel wurde er in Intels 387- Coprozessor und jeden x86- Prozessor ab dem 486er integriert . QuickBASIC-Versionen 4.0 und 4.5 verwenden standardmäßig IEEE 754-Gleitkommavariablen, aber (zumindest in Version 4.5) gibt es eine Befehlszeilenoption /MBF für die IDE und den Compiler, die von IEEE auf MBF-Gleitkommazahlen umschalten, um unterstützt früher geschriebene Programme, die auf Details der MBF-Datenformate angewiesen sind. Visual Basic verwendet außerdem das IEEE 754-Format anstelle von MBF.

Technische Details

MBF Zahlen bestehen aus einem 8-Bit - Basis-2 - Exponenten , ein Zeichen - Bit (positive Mantisse: s = 0; negative Mantisse: s = 1) und ein 23-, 31- oder 55-Bit - Mantisse des Mantisse . Links von der expliziten Mantisse ist immer ein 1-Bit impliziert, und der Radix-Punkt befindet sich vor diesem angenommenen Bit . Der Exponent wird mit einem Bias von 128 codiert , sodass Exponenten −127…−1 durch x = 1…127 (01h…7Fh) repräsentiert werden , Exponenten 0…127 werden durch x = 128…255 (80h…FFh) repräsentiert , mit einem Sonderfall für x = 0 (00h), der die ganze Zahl gleich Null darstellt.

Das MBF-Format mit doppelter Genauigkeit bietet weniger Skalierung als das IEEE 754- Format, und obwohl das Format selbst fast eine zusätzliche Dezimalstelle an Genauigkeit bietet, sind die gespeicherten Werte in der Praxis weniger genau, da IEEE-Berechnungen 80-Bit-Zwischenergebnisse verwenden und MBF dies nicht tut 'T. Im Gegensatz zu IEEE-Gleitkomma unterstützt MBF keine denormalen Zahlen , Unendlichkeiten oder NaNs .

MBF Single-Precision-Format (32 Bit, "6-digit BASIC"):

Exponent Unterschrift Bedeutung
8 Bit,
Bit 31–24
1 Bit,
Bit 23
23 Bit,
Bit 22–0
xxxxxxxxx S mmmmmmmmmmmmmmmmmmmmmmmm

MBF-Format mit erweiterter Genauigkeit (40 Bit, "9-digit BASIC"):

Exponent Unterschrift Bedeutung
8 Bit,
Bit 39–32
1 Bit,
Bit 31
31 Bit,
Bit 30–0
xxxxxxxxx S mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm

MBF-Format mit doppelter Genauigkeit (64 Bit):

Exponent Unterschrift Bedeutung
8 Bit,
Bit 63–56
1 Bit,
Bit 55
55 Bit,
Bit 54–0
xxxxxxxxx S mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm

Beispiele

  • "10":
32-Bit-Format: 84h, 20h, 00h, 00h
40-Bit-Format: 84h, 20h, 00h, 00h, 00h
  • "2":
32-Bit-Format: 82h, 00h, 00h, 00h
40-Bit-Format: 82h, 00h, 00h, 00h, 00h
  • :
32-Bit-Format: 81h, 00h, 00h, 00h
40-Bit-Format: 81h, 00h, 00h, 00h, 00h
  • "0":
32-Bit-Format: 00h, 00h, 00h, 00h (oder 00h, xxh, xxh, xxh)
40-Bit-Format: 00h, 00h, 00h, 00h, 00h (oder 00h, xxh, xxh, xxh, xxh)
  • "0,5":
32-Bit-Format: 80h, 00h, 00h, 00h
40-Bit-Format: 80h, 00h, 00h, 00h, 00h
  • "0,25":
32-Bit-Format: 7Fh, 00h, 00h, 00h
40-Bit-Format: 7Fh, 00h, 00h, 00h, 00h
  • "-0.5":
32-Bit-Format: 80h, 80h, 00h, 00h
40-Bit-Format: 80h, 80h, 00h, 00h, 00h
  • "sqrt(0.5)":
32-Bit-Format: 80h, 35h, 04h, F3h
40-Bit-Format: 80h, 35h, 04h, F3h, 34h
  • "sqrt(2)":
32-Bit-Format: 81h, 35h, 04h, F3h
40-Bit-Format: 81h, 35h, 04h, F3h, 34h
  • "ln(2)":
32-Bit-Format: 80h, 31h, 72h, 18h
40-Bit-Format: 80h, 31h, 72h, 17h, F8h
  • "log 2 (e)":
32-Bit-Format: 81h, 38h, AAh, 3Bh
40-Bit-Format: 81h, 38h, AAh, 3Bh, 29h
  • "pi/2":
32-Bit-Format: 81h, 49h, 0Fh, DBh
40-Bit-Format: 81h, 49h, 0Fh, DAh, A2h
  • "2*pi":
32-Bit-Format: 83h, 49h, 0Fh, DBh
40-Bit-Format: 83h, 49h, 0Fh, DAh, A2h

Siehe auch

Verweise

Externe Links

  • Microsoft bietet eine Dynamic Link Library für 16-Bit-Visual Basic mit Funktionen zum Konvertieren zwischen MBF-Daten und IEEE 754.
    • Diese Bibliothek umschließt die MBF-Konvertierungsfunktionen in dem 16-Bit-Visual C(++) CRT.
    • Diese Umwandlungsfunktionen runden eine IEEE-Zahl mit doppelter Genauigkeit wie ⋅ 2 –128 auf null statt auf 2 –128 .
    • Sie unterstützen überhaupt keine Denormals : Die IEEE- oder MBF-Zahl mit einfacher Genauigkeit 2 −128 wird in Null umgewandelt, obwohl sie in beiden Formaten darstellbar ist.
    • Diese Bibliothek ist nur für die Verwendung mit Visual Basic vorgesehen; Von C(++)-Programmen wird erwartet, dass sie die CRT-Funktionen direkt aufrufen.