Floating-Point Arithmetik
Suche
Index
FAQ
Kontakt
Zurück

5. Floating Point Arithmetik
       Alle Rechenoperationen werden mit reelen Zahlen durchgefuehrt, die in zwei
        Pseudo-Registern stehen. Es sind dies die Floating-Point-Akkumulatoren FAC1
        und FAC2.

        Die verwendeten ROM-Routinen und Speicherplaetze sind :


        Name       2001      3001      8001        Beschreibung
        ------------------------------------------------------------------

        ABS        $DB2A     $DB64     $CD8E       FAC1=ABS(FAC1)
        ADD        $D73F     $D776     $C9A0       FAC1=FAC2+FAC1
        ATN        $E048     $E08C     $D32C       FAC1=ATN(FAC1)
        COS        $DF9E     $DFD8     $D282       FAC1=COS(FAC1)
        DIV        $D9E4     $DA1E     $CC48       FAC1=FAC2/FAC1
        EXP        $DEA0     $DEDA     $D184       FAC1=EXP(FAC1)
        FAC12      $DAE1     $DB1B     $CD45       FAC1 in FAC2
        FAC12R     $DADE     $DB18     $CD42       FAC1 in FAC2 mit Rundung
        FAC1MEM    $DAA9     $DAE3     $CD0D       FAC1 in Memory ohne Rundung
        FAC1MEMR   $DAA6     $DAE0     $CD0A       FAC1 in Memory mit Rundung
        FAC21      $DACE     $DB08     $CD32       FAC2 in FAC1
        FRE        $D26E     $D263     $C4B2       FAC1=FRE(x) ohne garb. coll.
        FREGC      $D264     $D259     $CA48       FAC1=FRE(x) mit garb. coll.
        INT        $DB9E     $DBD8     $CE02       FAC1=INT(FAC1)
        LOG        $D8BF     $D8F6     $CB20       FAC1=LOG(FAC1)
        MEMADD     $D73C     $D773     $C99D       wie MEMFAC2 und ADD
        MEMDIV     $D9E1     $DA1B     $CC45       wie MEMFAC2 und DIV
        MEMFAC1    $DA74     $DAAE     $CCD8       Memory in FAC1
        MEMFAC2    $D95E     $D998     $CBC2       Memory in FAC2
        MEMPWR     $DE2E     $DE65     $D10F       wie MEMFAC1 und POWER
        MEMSUB     $D725     $D733     $C986       wie MEMFAC2 und SUB
        MEMULT     $D8FD     $D934     $CB5E       wie MEMFAC2 und MULT
        MINUS      $DE67     $DEA1     $D14B       FAC1=FAC1
        MULT       $D900     $D937     $CB61       FAC1=FAC2*FAC1
        NORMFAC1   $D7AC     $D7E3     $C0AD       normalisiert FAC1
        POWER      $DE2E     $DE68     $D112       FAC1=FAC2^FAC1
        RFAC1      $DAED     $DB27     $CD51       Rundung von FAC1
        RND        $DF45     $DF7F     $D229       FAC1=RND(FAC1)
        SGN        $DB0B     $DB45     $CD6F       FAC1=SGN(FAC1)
        SGNFAC1    $DAFD     $DB37     $CD61       Vorzeichen aus FAC1 in A-Reg.
        SIN        $DFA5     $DFDF     $D289       FAC1=SIN(FAC1)
        SQR        $DE24     $DE5E     $D108       FAC1=SQR(FAC1)
        SUB        $D728     $D736     $C989       FAC1=FAC2-FAC1
        TAN        $DFEE     $E028     $D2D2       FAC1=TAN(FAC1)

        FAC1       $B0-B5    $5E-63    $5E-63      Floating Akkumulator #1
        FAC2       $B8-BD    $66-6B    $66-6B      Floating Akkumulator #2
        

5.1 Reelle Konstanten
        Einige haeufig gebrauchte reelle Zahlen (von BASIC bei Funktionsberechnungen
        verwendet) sind im Festwertspeicher vorhanden. Sie sind alle im Speicherformat
        abgelegt (s. Kap. 1.6) und koennen mit Hilfe der Routinen MEMFAC1 oder MEMFAC2
        in den Floating Akku #1 oder #2 geladen werden.

         2001     3001     8001        Beschreibung
        ------------------------------------------------------------------

         $CDBC    $CDA3    $BEA0       pi = 3.14159265
         $D891    $D8C8    $CAF2       1
         $D897    $D8CE    $CAF8       log(e) = 0.434294482 (Basis 10)
         $D8AB    $D8E2    $CB0C       1/SQR(2) = 0.707106781
         $D8B0    $D8E7    $CB11       SQR(2) = 1.41421356
         $D8B5    $D8EC    $CB16       -0.5
         $D8BA    $D8F1    $CB1B       ln(2) = 0.693147181 (Basis e)
         $D9CB    $DA05    $CC2F       10
         $DDE3    $DE1D    $D0C7       0.5
         $E01A    $E054    $D2FE       pi/2 = 1.57079633
         $E01F    $E059    $D303       2*pi = 6.28318531
         $E024    $E05E    $D308       0.25


5.2 Uebertragung Speicher in FAC
        Eine im Speicher stehende reelle Zahl wird in den FAC uebertragen. Die Adresse
        der reellen Zahl wird im A-Register (low Byte) und Y-Register (high Byte)
        uebergeben :

         Speicher in FAC1 : JSR MEMFAC1

         Speicher in FAC2 : JSR MEMFAC2

5.3 Uebertragung FAC#1 in Speicher
        Eine im FAC1 stehende reelle Zahl wird in den Speicher uebertragen. Die Zieladresse
        duer die reelle Zahl wird im X-Register (low-Byte) und Y-Register (high Byte) uebergeben:

         mit Rundung : JSR FAC1MEMR

         ohne Rundung : JSR FAC1MEM
5.4 Uebertragung FAC #2 in FAC #1
        Kopieren des Inhaltes von Floating Akku #2 in Floating Akku #1 mit:

         JSR FAC21

5.5 Uebertragung FAC #1 in FAC #2
        Kopieren des Inhaltes von Floating Akku #1 in Floating Akku #2 mit:

	 mit Rundung : JSR FAC12R

	 ohne Rundung: JSR FAC12

5.6 Rundung von FAC #1
        Runden des Inhaltes von Floating Akku #1 wird erreicht mit:

         JSR RFAC1

5.7 Normalisierung
        Der Floating-Akkumulator #1. wird mit der folgenden Routine normalisiert:

         JSR NORMFAC1

5.8 Vorzeichen des FAC1
       Das Vorzeichen des FAC1 wird als Ergebnis im A-Register uebergeben:

          JSR SGNFAC1

5.9 Dynamische Operatoren
        Dies sind: Addition, Subtraktion, Multiplikation, Division und Exponentiation. Vor Aufruf
        der Routinen muessen die beteiligten Werte in FAC1 und FAC2 geladen werden. Dabei muss FAC2
        unmittelbar vor dem Funktionsaufruf folgendermassen gesetzt werden:

	        LDA #low    ;LOW BYTE DER ADRESSE
	        LDY #high   ;HIGH BYTE DER ADRESSE
                JSR MEMFAC2 ;ZAHL AUS SPEICHER IN FfYC2 UEBERTRAGEN
                JSR      ...GEWUENSCHTE FUNKT ION AUSFUEHREN

         Die Uebertragung einer reellen Zahl aus dem Speicher in den FAC2 (bei POWER in den FACi) und
         die Ausfuehrung der gewuenschten Operation koennen mit den folgenden Routinen mit einem
         JSR-Aufruf erledigt werden:

                LDA #low     ;LOW BYTE DER ADRESSE
                LDY #high    ;HIGH BYTE DER ADRESSE
                JSR       ...;ZAHL IN SPEICHER UEBERTRAGEN UND OPERATION AUSFUEHREN

        Es folgen Startadressen der moeglichen Funktionen:

          FAC1 = MEM + FAC1 : JSR MEMADD  ;ADDITION
          FAC1 = MEM - FAC1 : JSR MEMSUB  ;SUBTRAKTION
          FAC1 = MEM * FAC1 : JSR MEMULT  ;MULTIPLIKATION
          FAC1 = MEM / FAC1 : JSR MEMDIV  ;DIVISION
          FAC1 = FAC2 ^ MEM : JSR MEMPWR  ;EXPONENTIATION

        Ist dies aus irgendwelchen Gruenden nicht moeglich oder sinnvoll, so sind
        unmittelbar vor dem Funktionsaufruf folgende Befehle auszufuehren:

                LDA FACi+5  ;VORZEICHENVERGLEICH
                EOR FAC2+5  ;VON FAC1 UND FAC2
                STA FAC2+6
	        LDA FAC1    ;EXPONENT FAC1
                JSR ...     ;GEWUENSCHTE FUNKTION AUSFUEHREN

        Es folgen die Startadressen der moeglichen Funktionen:

          FAC1 = FAC2 + FAC1 :  JSR ADD     ;ADDITION
          FAC1 = FAC2 - FAC1 :  JSR SUB     ;SUBTRAKTION
          FAC1 = FAC2 * FAC1 :  JSR MULT    ;MULTIPLIKATION
          FAC1 = FAC2 / FAC1 :  JSR DIV     ;DIVISION
          FAC1 = FAC2 ^ FAC1 :  JSR POWER   ;EXPONENTIATION

5.10 Monadische Operatoren
        Dies sind : ABS, ATN, COS, EXP, FRE, INT, LOG, POS, RND, SIN, SGN, SQR, TAN
        und MINUS. Das Argument wird in FAC1 bereitgestellt, das Ergebnis steht nach
        der Rueckkehr ebenfalls in FAC1.

            ABS   :   JSR ABS   ; Absolutwert
            ATN   :   JSR ATN   ; ARCUS-Tangens
            COS   :   JSR COS   ; Cosinus
            EXP   :   JSR EXP   ; Exponentialfunktion
            FRE   :   JSR FRE   ; Freier Speicherplatz
            FREGC :   JSR FREGC ;  Mit Garbage Collection
            INT   :   JSR INT   ; Ganzzahligen Teil abtrennen
            LOG   :   JSR LOG   ; Natuerlicher Log. (Basis E)
            MINUS :   JSR MINUS ; Vorzeichenwechsel
            POS   :   JSR POS   ; Cursorposition
            RND   :   JSR RND   ; Zufallszahl
            SIN   :   JSR SIN   ; Sinus
            SGN   :   JSR SGN   ; Vorzeichen
            SQR   :   JSR SQR   ; Quadratwurzel
            TAN   :   JSR TAN   ; Tangens

 

Letzte Änderung: 2019-01-04 10:06:12
  Rubrik:  CBM PET
Rubriken-Übersicht
 9 Besucher online 

Valid XHTML 1.0 Transitional Valid CSS!