ABS (ROM-Routine)

Aus C64-Wiki
Zur Navigation springenZur Suche springen

Anmerkung: Dieser Artikel beschreibt die numerische ABS-Routine zur Berechnung des Absolutbetrags im BASIC-ROM.

Name: ABS
Beschreibung: Betrag von Fließkommaregister FAC berechnen
Einsprungpunkt: $BC58 / 48216
Übergebene Argumente:
Rückgabe-Werte:
Akkumulator: unverändert
X-Register: unverändert
Y-Register: unverändert
Negative-Flag: 0

Die ROM-Routine ABS[1][2] — manchmal auch als FACABS[3] bezeichnet — setzt das Vorzeichen der im Fließkommaregister FAC gespeicherten Zahl auf "positiv" und ersetzt sie damit durch ihren Absolutbetrag. Ihr Einsprungpunkt ist in der Tabelle der BASIC-Funktionen an Adresse $A056 hinterlegt, so dass die Routine bei jeder Auswertung der Funktion ABS vom BASIC-Interpreter aufgerufen wird.

War FAC vor dem Aufruf von ABS kleiner als 0, so entfernt ABS einfach das Vorzeichen und verwandelt FAC damit in eine positive Zahl, wobei deren Abstand zur 0 gleich bleibt. Andernfalls wird FAC durch den Aufruf von ABS nicht verändert.

Algorithmus[Bearbeiten | Quelltext bearbeiten]

ABS besteht nur aus einem einzigen Maschinenbefehl, der den an Adresse 102/$66 gespeicherten Wert um eine Stelle nach rechts verschiebt und damit das (im höchstwertigen Bit enthaltene) Vorzeichen von FAC auf "positiv" setzt. Es empfiehlt sich daher, für die Berechnung des Betrags von FAC nicht die ROM-Routine ABS aufzurufen, sondern stattdessen den entsprechenden Befehl

LSR *$66

direkt zu verwenden, da dies sowohl Rechenzeit als auch Speicherplatz spart (5 statt 17 Systemtakte, 2 statt 3 Bytes).

Innerhalb des BASIC-ROM wird ABS nie direkt aufgerufen, sondern der Einsprungpunkt dieser ROM-Routine ist lediglich in der Tabelle der BASIC-Funktionen als Implementierung der BASIC-Funktion ABS hinterlegt.

Laufzeitverhalten[Bearbeiten | Quelltext bearbeiten]

Die Laufzeit von ABS beträgt 17 Systemtakte.

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

Weblinks[Bearbeiten | Quelltext bearbeiten]

Quellen[Bearbeiten | Quelltext bearbeiten]