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