; ; Programmodul 'SINUS' zur Berechnung von sin(x) ; nach Vorbereitung der Daten durch Modul 'XICALC' ; ; IN var x1bog : Winkel in Bogenmass ; var x2bog : x1bog^2 ; var x4bog : x1bog^4 ; var x6bog : x1bog^6 ; var x8bog : x1bog^8 ; ; OUT reg de : var sx - sin(x) * 2^15 ; ; REG a,f,b,c,d,e,h,l ; extrn multi,divi ram equ 2000h ; Festlegung des Variablenblocks x1bog equ ram ; im RAM x2bog equ x1bog + 2 x4bog equ x2bog + 2 x6bog equ x4bog + 2 x8bog equ x6bog + 2 fs1 equ 8000h ; Koeffizienten fsi der i-ten Glieder fs2 equ 3 fs3 equ 2*3*5 fs4 equ 3*5*6*7 fs5 equ 2*3*5*6*7*9 ld de,(x2bog) ; Berechnung dea 2. Gliedes ld bc,fs2 ; der Reihe call divi ld de,fs1 ; erste Zwischensumme berechnen ex de,hl ; und Zwischenspeichern xor a sbc hl,de push hl ld de,(x4bog) ; Berechnung des 3. Gliedes ld bc,fs3 call divi pop de ; Zwischensumme im Stack add hl,de ; aktualisieren push hl ld de,(x6bog) ; Berechnung des 4. Gliedes ld bc,fs4 call divi ex de,hl ; Zwischensumme im Stack pop hl ; aktualisieren xor a sbc hl,de push hl ld de,(x8bog) ; Berechnung des 5. Gliedes ld bc,fs5 call divi pop de ; Stack korrigieren add hl,de ; und Summe fertigstellen ex de,hl ; Summe mit Vorfaktor multiplizieren ld bc,(x1bog) call multi rl h ; Division :=/2^15 rl e rl d ; sx in reg de berechnet ret end