Die Binärdarstellung eignet sich zum Rechnen; die ASCII-Darstellung
wiederum eignet sich nur zur Mensch-
Unter Maschine wird in diesem Zusammenhang die
Rechenmaschine, also der Mikrocontroller oder PC, verstanden!
Nicht also Omas Nähmaschine, eher eine NC-Werkzeugmaschine. Plattformunabhängig bedeutet, dass sich die beteiligten Maschinen keine »Gedanken« über die Eigenheiten der jeweils anderen Maschine machen brauchen (und auch sollen). Da die Byte-Anordnung von Mehr-Byte-Zahlen zwei Interpretationen kennt, nämlich „Intel“ und „Motorola“, macht man die Übertragung von Zahlen oftmals mit ASCII-Zeichen. Auch vermeidet man so »verbotene« oder unbeliebte Zeichen, wie XON/XOFF und NUL. |
Bytes | Anzahl unterschiedlicher Werte |
---|---|
1 | 28 = 256 |
2 | 216 = 65 536 |
3 | 224 = 16 777 216 |
4 | 232 = 4 294 967 296 |
Die Speicherplätze, in denen die Bytes von Mehr-Byte-Zahlen abgelegt werden, ist völlig schnuppe; sie können auch einzeln verstreut liegen, und das ist bisweilen sogar zweckmäßig! Üblich ist jedoch die Ablage in aufeinander folgenden Bytes, in zwei Weisen:
Das Problem ist nur, dass es diese beiden Weisen überhaupt gibt!
Name: Little Endian („Intel-Notation“) Big Endian („Motorola-Notation“) Reihenfolge: niedrigstes Byte zuerst höchstes Byte zuerst Vorteil: kleinerer Datentyp liegt auf gleicher Adresse Hex-Dump problemlos lesbar Nachteil: Hex-Dump byteweise verdreht Adress-Offset bei Zugriff auf kleineren Datentyp Vertreter:
- Intel i8080, Z80, i80x86, Pentium usw. (Name!)
- Siemens C166
- Atmel AVR, ATmega, ATtiny
- Texas Instruments MSP430
- Motorola 6502, 68x00 (Name!)
- Intel(!) 8051 und Derivate:
- Cypress AN2131, CY7C68013
Achtung: In welcher Weise der Assembler große Konstanten bei dw und dd ablegt legt oft die Entscheidung schon fest! Hilfe konsultieren! Man kann es IMHO nie als Programmierer festlegen. Es sei denn, man benutzt Makros zur Ablage der Konstanten.
Hinweis: Mit Mikrocontroller-Assembler ist es absolut legitim und zweckmäßig,
auch 3-Byte-Zahlen zu verwenden, die es in Hochsprachen nicht gibt!
»Krumme« Bitbreiten und das Verwenden von Nibbles (= Halb-Bytes, Tetraden)
wie bspw. bei FAT12 sind dagegen grundsätzlich abzuraten.
Es ist völlig schnuppe, was mit den 256 unterschiedlichen Werten eines Bytes angestellt wird. Üblich sind jedoch zwei, äh, drei Interpretationsweisen:
Sonderzeichen sind plattform- |
Besser, man charakterisiert das ZWK über die angenehmen Eigenschaften, anstatt es zu definieren:
Tipp: Man geize nicht mit Bits. Zum bequemen Rechnen nutzt man den Zahlenbereich maximal bis zur Hälfte aus, also ±63 für Bytes, ±16383 für 2 Bytes usw. Notfalls spendiert man ein Byte mehr. Es kostet weniger als manch umständliche Flag-Auswertung.
Für das Vorzeichen wähle man einen Platz im bitadressierbaren Speicher! Das Betrags-Byte dafür zu verwenden führt zu lästigen Maskierungsoperationen. Es wird letztlich mit 9-Bit-Zahlen, 17-Bit-Zahlen usw. operiert.
Dezimale oder binäre Teilung hängt davon ab, wie man die Zahl schließlich dem Menschen darstellt. Will man bspw. „4,25 m“ ausgeben, rechnet man mit Zentimetern.
Für alle internen Operationen, bei der man zunehmende Rundung vermeiden will, nimmt man binäre Teilung. Will man bloß „4,2 m“ ausgeben, (also ganze Dezimeter), aber intern genauer rechnen, nehme man nicht hundertstel Dezimeter (=Millimeter), sondern 1/256 Dezimeter. Das ergibt 1 Byte Nachkommastellen, nur zum Rechnen. Zur Ausgabe lässt man dieses Byte einfach weg!
Für solche Zahlen gibt es genormte IEEE-Darstellungen. Wird Binärdatenaustausch zum PC gewünscht, ist man auf diese festgelegt.
Das wird selten der Fall sein: Man backe also eigene Brötchen! Und beachte hierzu:
Geplant sind downloadbare Makros für o. g. Mikrocontroller für Gleitkomma-Grundrechenoperationen.
8051 | PIC | AVR | C166 |
---|---|---|---|
MATH_LIB.S51 von E. Ahl | n.v. | n.v. | n.v. |