SIGN
Anmerkung: Dieser Artikel beschreibt die numerische SIGN-Routine im BASIC-ROM.
Name: | SIGN | ||||||
Beschreibung: | Zahl im Fließkommaregister FAC prüfen und Akkumulator sowie Flags entsprechend setzen | ||||||
Einsprungpunkt: | $BC2B / 48171 | ||||||
Übergebene Argumente: | |||||||
Rückgabe-Werte: | |||||||
Akkumulator: | $00 falls FAC=0, $01 falls FAC positiv, $FF falls FAC negativ | ||||||
Zero-Flag: | gesetzt genau dann, wenn FAC=0 | ||||||
Negative-Flag: | gesetzt genau dann, wenn FAC<0 |
SIGN[1] — manchmal auch als SGNFAC[2] bezeichnet — prüft die Zahl im Fließkommaregister FAC und setzt den Wert des Akkumulators und damit das Zero-Flag und das Negative-Flag entsprechend: Falls FAC den Wert 0 hat, so setzt die Routine den Akkumulator auf 0 / $00. Bei einer positiven Zahl in FAC bekommt der Akkumulator den Wert 1 / $01, bei einer negativen Zahl den Wert 255 / $FF. Nach dem Aufruf ist ein FAC von 0 an einem gesetzten Zero-Flag erkennbar; eine negative Zahl in FAC an einem gesetzten Negative-Flag. Sind beide Flags gelöscht, so weist dies auf eine positive Zahl in FAC hin.
Der Aufruf von SIGN verändert keine Speicherinhalte.
Laufzeitverhalten[Bearbeiten | Quelltext bearbeiten]
SIGN prüft lediglich den Exponenten von FAC an Adresse 97/$61, und bei einer von 0 verschiedenen Zahl in FAC zusätzlich das Vorzeichen an Adresse 102/$66. Dementsprechend benötigt ein Aufruf von SIGN nur 18 Systemtakte, falls FAC den Wert 0 enthält. Im Fall einer positiven bzw. negativen Zahl in FAC beträgt die Laufzeit von SIGN 28 bzw. 27 Takte.
Ein Systemtakt entspricht auf dem Commodore 64 rund einer Mikrosekunde (μs).
Weblinks[Bearbeiten | Quelltext bearbeiten]
- Disassembly von SIGN/$BC2B auf All About Your 64
- CodeBase 64: Floating Point Math
- C64 BASIC & KERNAL ROM Disassembly von Michael Steil
- C64OS: Floating Point Math from BASIC