FCOMP

Aus C64-Wiki
Zur Navigation springenZur Suche springen

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

Name: FCOMP
Beschreibung: Zahl im Fließkommaregister FAC mit Zahl im Speicher vergleichen und Akkumulator sowie Flags entsprechend setzen
Einsprungpunkt: $BC5B / 48219
Übergebene Argumente:
Akkumulator: Adresse der Zahl im Speicher (Low-Byte)
Y-Register: Adresse der Zahl im Speicher (High-Byte)
Rückgabe-Werte:
Akkumulator: $00 falls FAC=Zahl im Speicher, $01 falls FAC>Zahl, $FF falls FAC<Zahl
Zero-Flag: gesetzt genau dann, wenn FAC=Zahl
Negative-Flag: gesetzt genau dann, wenn FAC<Zahl

FCOMP — manchmal auch als CMPFAC[1][2] oder VERGLCH[3] bezeichnet — vergleicht den Inhalt des Fließkommaregisters FAC mit einer Zahl im Speicher und setzt den Wert des Akkumulators und damit das Zero-Flag und das Negative-Flag entsprechend. Die Speicheradresse dieser Fließkommazahl wird im Akkumulator (Low-Byte) und im Y-Register (High-Byte) übergeben. Die Zahl muss im kompakten 5 Byte-Format vorliegen, wie es zum Speichern von REAL-Variablen verwendet wird. Es können sowohl Werte im RAM als auch Konstanten im BASIC-ROM adressiert werden.

Falls FAC gleich der Zahl im Speicher ist, so setzt die Routine den Akkumulator auf 0/$00. Ist FAC größer, so bekommt der Akkumulator den Wert 1/$01, falls FAC dagegen kleiner als die Zahl ist, so hat der Akkumulator anschließend den Wert 255/$FF. Das Laden des Akkumulators mit diesen Konstanten beeinflusst auch das Negative- und das Zero-Flag entsprechend: Das Zero-Flag ist genau dann gesetzt, wenn FAC und die Zahl im Speicher gleich sind; das Negative-Flag zeigt an, dass FAC kleiner ist als die Zahl im Speicher. Ist keines der beiden Flags gesetzt, so ist FAC größer als die Zahl, mit der verglichen wurde.

Der Aufruf von FCOMP verändert nur den Hilfszeiger an den Adressen 34/$22 (Low-Byte) und 35/$23 (High-Byte).

Laufzeitverhalten[Bearbeiten | Quelltext bearbeiten]

FCOMP liefert um so schneller ein Ergebnis, je klarer (und damit früher) die Unterschiede zwischen den verglichenen Zahlen festgestellt werden können. Die Laufzeit liegt daher zwischen 38 Systemtakten (beide Zahlen gleich 0) und 116 Systemtakten (zwei positive gleiche Zahlen, zwischen denen sich nur durch Berücksichtigung des Rundungbytes an Adresse 112/$70 ein Unterschied ergibt).

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

Weblinks[Bearbeiten | Quelltext bearbeiten]

Quellen[Bearbeiten | Quelltext bearbeiten]