MOVFA

Aus C64-Wiki
Zur Navigation springenZur Suche springen

Anmerkung: Dieser Artikel beschreibt die MOVFA-Routine zur Übertragung von Fließkommawerten im BASIC-ROM.

Name: MOVFA
Beschreibung: Fließkommaregister FAC runden und in Fließkommaregister ARG kopieren
Einsprungpunkt: $BC0C / 48140
Übergebene Argumente:
Rückgabe-Werte:
Akkumulator: Exponent von FAC und ARG
X-Register: 0
Y-Register: unverändert
Zero-Flag: gesetzt
Negative-Flag: gelöscht


MOVFA[1] — manchmal auch als FACARG[2] oder FAC1/2[3] bezeichnet — rundet den Inhalt des Fließkommaregisters FAC und kopiert ihn dann in das Fließkommaregister ARG.

Verwendung

MOVFA rundet zunächst den Inhalt des Fließkommaregisters FAC, erhöht die Mantisse von FAC also um 1, falls durch eine vorausgegangene Rechenoperation das höchstwertige Bit des Rundungsbytes an Adresse 112/$70 gesetzt wurde. Falls dies nicht gewünscht oder überflüssig ist — beispielsweise, weil der Inhalt von FAC zuvor mittels MOVFM aus dem Speicher gelesen wurde und das Rundungsbyte somit ohnehin den Wert 0 hat — so kann auf das Runden verzichtet werden, indem erst an Adresse $BC0F / 48143 in die Routine MOVFA eingesprungen wird. In sehr seltenen Fällen ist nach dem Runden der Inhalt von FAC nicht mehr als Fließkommazahl auf dem C64 darstellbar, in diesem Fall löst MOVFA einen ?OVERFLOW ERROR aus.

MOVFA wird von zahlreichen ROM-Routinen aufgerufen. Der im Akkumulator zurückgelieferte Exponent von FAC wird hierbei von einigen Routinen, beispielsweise von MUL10, weiterverwendet.

Laufzeitverhalten

Die Laufzeit von MOVFA setzt sich zusammen aus der Rechenzeit für das Runden von FAC und für das Umkopieren von FAC nach ARG.

Falls FAC = 0 oder falls das höchstwertige Bit des Rundungsbytes an Adresse 112/$70 gelöscht ist, so verändert das Runden den Wert von FAC nicht. Der Aufruf der ROM-Routine für das Runden benötigt in diesen Fällen nur 18 bzw. 25 Systemtakte. Falls FAC dagegen vor dem Umkopieren aufgerundet werden muss, so liegt der Aufwand hierfür zwischen 47 und 99 Systemtakten.

Das Umkopieren von FAC nach ARG benötigt unabhängig vom Inhalt von FAC immer 94 Takte.

Ein Systemtakt entspricht auf dem Commodore 64 rund einer Mikrosekunde (μs).

Weblinks

Quellen