| FAQ der Newsgroup de.comp.lang.assembler (d.c.l.a.) | |
|
Wie wandle ich eine Zahl in ein anderes Format/Zahlensystem um?
Für die Ein- und Ausgabe von Strings müssen Zahlen häufig von einem Zahlensystem in ein anderes oder von einem Format in ein anderes umgewandelt werden. Zahlen in verschiedenen Zahlensystemen werden immer in Strings (hier ASCIIZ) umgewandelt. Zur Verarbeitung im Computer werden Zahlen in ein Computerformat umgewandelt. Computerformate: Ein Byte ist ein Bündel von 8 Bits. Benutzt man das Wort "Byte" für eine Zahl, so ist immer ein unsigned integer gemeint, also der Zahlenbereich von 0 bis 255. Ein Word ist eine Kombination aus 2 Bytes. Benutzt man das Wort "Word" für eine Zahl, so ist immer ein unsigned integer gemeint, also der Zahlenbereich von 0 bis 65535. Ein Dword ist eine Kombination aus 4 Bytes. Benutzt man das Wort "Dword" für eine Zahl, so ist immer ein unsigned integer gemeint, also der Zahlenbereich von 0 bis 4294967295. Ein Integer ist eine Zahl aus der Menge der natürlichen Zahlen oder eine Zahl aus der Menge der ganzen Zahlen. Diese Vermengung ist etwas unglücklich. Während die Menge N für den Mathematiker zwanglos eine Teilmenge der Menge G ist, sind für den Assembler-Programmierer unsigned integers und signed integers durchaus verschiedene Mengen, die sich lediglich überschneiden. Ein Long ist ein "langes" Integer - in dieser FAQ eine Kombination aus 8 Bytes. Ein Long passt bei der IA32-Architektur nicht mehr in ein einzelnes Register. Um die Zusammengehörigkeit der Register darzustellen, werden beide Register angegeben mit einem Doppelpunkt verbunden: "EDX:EAX". Ein Single ist eine Kombination aus 4 Bytes für die FPU , die als Gleitkommazahl interpretiert wird. Ein Double ist eine Kombination aus 8 Bytes für die FPU , die als Gleitkommazahl interpretiert wird. Ein Float (floating point number) ist der Oberbegriff für Gleitkommazahlen und kann ein Single oder ein Double sein.
Eine BCD-Zahl (binary coded decimal number) ist eigentlich ein Bündel von 4 Bits,
die lediglich den Zahlenbereich von 0 bis 9 darstellen (dürfen). Kombinationen
dieser 4 Bits, die eine größere Zahl ergeben würden, sind unzulässig.
In dieser FAQ ist von drei Arten von BCD-Formaten die Rede: Zahlensysteme: Eine Dezimalzahl ist ein String, dessen einzelne Ziffern im Zahlenbereich von 0 bis 9 liegen. Eine rationale Zahl ist eine Dezimalzahl mit einem Trennzeichen (Punkt) und einem Nachkommaanteil. Eine Hexadezimalzahl ist ein String, dessen einzelne Ziffern im Zahlenbereich von 0 bis 15 liegen. Die Zahlen von 10 bis 15 werden durch die Buchstaben 'A' bis 'F' ausgetauscht, damit eine Ziffer auch immer nur einen Buchstaben belegt. Eine Binärzahl ist ein String, dessen einzelne Ziffern im Zahlenbereich von 0 bis 1 liegen. Bei der Exponentialschreibweise besteht die Zahl aus der Mantisse und einem nach einem 'E' angehängten Exponenten. Beispiel: -1.23E-45. Entgegen der Schulmathematik sind in dieser FAQ Mantissen mit mehrstelligem Vorkommaanteil zulässig und Mantissen ohne Nachkommaanteil erwünscht. Wir arbeiten nämlich mit Prozessoren und nicht mit Rechenschiebern. Ralph 'rkhb' Bauer 09.08.2008 |