FMULTT

Aus C64-Wiki
Zur Navigation springenZur Suche springen

Anmerkung: Dieser Artikel beschreibt die numerische FMULTT-Routine im BASIC-ROM.

Name: FMULTT
Beschreibung: Fließkommaregister FAC mit Fließkommaregister ARG multiplizieren
Einsprungpunkt: $BA2B / 47659
Übergebene Argumente:
Zero-Flag: gesetzt falls FAC = 0, sonst gelöscht
Sonstige: FAC = Faktor B, ARG = Faktor A
Rückgabe-Werte:
Sonstige: FAC = Ergebnis der Multiplikation A*B, ARG = Faktor A


FMULTT — manchmal auch als MULT[1][2][3] oder einfach als Multiplikation[4] bezeichnet — multipliziert den Inhalt des Fließkommaregisters FAC mit dem im Fließkommaregister ARG befindlichen Wert.

Nach dem Aufruf steht in FAC das Ergebnis der Multiplikation, während ARG unverändert ist und für nachfolgend aufgerufene Numerik-Routinen weiter verwendet werden kann. Ist das Produkt zu groß für die Fließkommadarstellung des C64, so löst FMULTT einen ?OVERFLOW ERROR aus. In diesem Fall ist FAC anschließend undefiniert, während ARG unverändert bleibt.

Neben dem Inhalt des Fließkommaregisters FAC ändert FMULTT auch das Hilfsregister an den Adressen 38/$26 bis 41/$29.

Verwendung

FMULTT ist eigentlich keine eigenständige ROM-Routine. Vielmehr ergibt sich ihr Einsprungpunkt dadurch, dass auf die Startadresse der Routine FMULT ein Offset von 3 aufaddiert und dadurch der Aufruf der Routine CONUPK zu Beginn von FMULT ausgelassen wird.

Bei der Nutzung von FMULTT ist zu beachten, dass sich die Routine auf zwei Seiteneffekte von CONUPK verlässt. In jedem Fall darf das Zero-Flag nur dann gesetzt sein, wenn im Fließkommaregister FAC der Wert 0 gespeichert ist, denn bei gesetztem Zero-Flag überspringt FMULTT alle Berechnungen. Falls sowohl FAC als auch ARG ungleich 0 sind, so muss zudem das höchstwertige Bit von Adresse 111/$6F angeben, ob die Vorzeichen von FAC und ARG gleich sind (Bit ist gelöscht) oder verschieden sind (Bit ist gesetzt). Den Inhalt dieser Adresse verwendet FMULTT als Vorzeichen des Resultats (die Multiplikation von Faktoren mit gleichem Vorzeichen führt zu einem positiven, von Faktoren mit unterschiedlichem Vorzeichen zu einem negativen Ergebnis). Die genannten Voraussetzungen lassen sich am einfachsten dadurch erfüllen, dass unmittelbar vor dem Aufruf von FMULTT die folgende kurze Codesequenz ausgeführt wird:

LDA *$66
EOR *$6E
STA *$6F
LDA *$61

Alle im Abschnitt "Quellen" genannten Bücher erwähnen die Voraussetzungen für den Aufruf von FMULTT entweder nur teilweise oder gar nicht.

Algorithmus

Der von FMULTT verwendete Algorithmus sowie das Laufzeitverhalten sind ausführlich in der Beschreibung von FMULT dokumentiert. Bei den dort angegebenen Rechenzeiten ist lediglich zu beachten, dass selbstverständlich die Laufzeit der Routine CONUPK (85 Systemtakte) bei der Verwendung von FMULTT nicht anfällt.

Weblinks


Quellen