;
; 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
2000 ram equ 2000h ; Festlegung des Variablenblocks
2000 x1bog equ ram ; im RAM
2002 x2bog equ x1bog + 2
2004 x4bog equ x2bog + 2
2006 x6bog equ x4bog + 2
2008 x8bog equ x6bog + 2
8000 fs1 equ 8000h ; Koeffizienten fsi der i-ten Glieder
0003 fs2 equ 3
001E fs3 equ 2*3*5
0276 fs4 equ 3*5*6*7
2C4C fs5 equ 2*3*5*6*7*9
0000 ED5B0220 ld de,(x2bog) ; Berechnung dea 2. Gliedes
0004 010300 ld bc,fs2 ; der Reihe
0007 CD0000 call divi
000A 110080 ld de,fs1 ; erste Zwischensumme berechnen
000D EB ex de,hl ; und Zwischenspeichern
000E AF xor a
000F ED52 sbc hl,de
0011 E5 push hl
0012 ED5B0420 ld de,(x4bog) ; Berechnung des 3. Gliedes
0016 011E00 ld bc,fs3
0019 CD0000 call divi
001C D1 pop de ; Zwischensumme im Stack
001D 19 add hl,de ; aktualisieren
001E E5 push hl
001F ED5B0620 ld de,(x6bog) ; Berechnung des 4. Gliedes
0023 017602 ld bc,fs4
0026 CD0000 call divi
0029 EB ex de,hl ; Zwischensumme im Stack
002A E1 pop hl ; aktualisieren
002B AF xor a
002C ED52 sbc hl,de
002E E5 push hl
002F ED5B0820 ld de,(x8bog) ; Berechnung des 5. Gliedes
0033 014C2C ld bc,fs5
0036 CD0000 call divi
0039 D1 pop de ; Stack korrigieren
003A 19 add hl,de ; und Summe fertigstellen
003B EB ex de,hl ; Summe mit Vorfaktor multiplizieren
003C ED4B0020 ld bc,(x1bog)
0040 CD0000 call multi
0043 CB14 rl h ; Division <de>:=<dehl>/2^15
0045 CB13 rl e
0047 CB12 rl d
; sx in reg de berechnet
0049 C9 ret
Bild 5. Das Programm SINUS
|