Dezimalstring in Longword Assembler-Programmierer sind bereits bei einfachen Ein- und Ausgaben von ganzen Zahlen auf sich gestellt: Während Hochsprachen dem Software-Autor komfortable Routinen wie »printf« oder »scanf« zur Verfügung stellen, muß sich der Assembler-Freak diese selbst schreiben. Für die Ausgabe einer ganzen Zahl sollte die Funktion »RawDoFmt()« der »exec.library« verwendet werden. Eine ähnliche Routine für Umwandlung eines Strings in ein Longword existiert in der Library allerdings nicht. Soll nun eine Dezimalzahl in ein Longword übersetzt werden, nutzen viele Autoren folgenden Algorithmus: Beginnend mit der letzten Ziffer werden diese sukzessive mit dem jeweiligen Stellenwert (1, 10, 100,...) multipliziert und anschließend die Produkte addiert. Nachteilig an diesem Verfahren ist, daß man vorab die gesamte Zeichenkette lesen und dann anschließend auf die zuvor übersprungenen Zeichen zugreifen muß. Dieses Handikap weist der im Listing ».asm« verwandte Algorithmus nicht auf. Zunächst liest er die erste Ziffer und betrachtet deren Wert als vorläufiges Ergebnis. Nun werden die folgenden Zeichen behandelt, bis man auf eine ungültige Ziffer trifft. Bei jeder Stelle wird das bisherige Ergebnis mit der Basis 10 multipliziert und der Wert der Ziffer addiert. Beim String »234« würde das Verfahren z.B. das vorläufige Ergebnis 2 mit 10 malnehmen und 3 dazuzählen, um abschließend 23 mit 10 zu multiplizieren und 4 addieren. Das Endergebnis lautet so 234. Dieses Verfahren ist nicht nur auf das Dezimalsystem beschränkt, sondern gilt für alle anderen Stellenwertsysteme (z.B. Dual-, Oktal-, Hexadezimalsystem). Das vorläufige Ergebnis wird allgemein mit der Basis multipliziert. Für diese arithmetische Operation scheidet allerdings die MULU-Anweisung des 68000er-Prozessors aus, da der Befehl zwei 16-Bit-Words multipliziert, wenngleich hier das vorläufige Ergebnis überhalb dieser Grenze liegen kann. Deshalb muß man einen alternativen Weg eingeschlagen, wobei aber das Abfangen eines Überlaufs (engl. overflow) auf keinen Fall unterbleiben darf. Bei Zweierpotenzen als Basis kann sukzessive der ADD-Befehl zum Verdoppeln des Wertes verwendet werden (die LSL-Anweisung wäre langsamer). Möchte man einen Faktor mit der Basis 10 multiplizieren, spaltet man die Operation auf: 10*Faktor = 2*Faktor + 2^2*2*Faktor Der Faktor wird also zuerst verdoppelt und dann in ein Hilfsregister übertragen. Den Inhalt des Hilfsregisters verschiebt man um zwei Dualstellen, bevor er schließlich addiert wird. Roger Fishlin