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
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
- 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