;
; Programmodul 'COSINUS' zur Berechnung von cos(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 cx - cos(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 fc1 equ 8000h ; Koeffizienten fci der i-ten Glieder
0006 fc3 equ 2*3
005A fc4 equ 3*5*6
04EC fc5 equ 2*3*5*6*7
0000 210080 ld hl,fc1 ; erste Zwischensumme berechnen
0003 ED5B0220 ld de,(x2bog) ; und auf Stack ablegen
0007 AF xor a
0008 ED52 sbc hl,de
000A E5 push hl
000B ED5B0420 ld de,(x4bog) ; Berechnung des 3. Gliedes
000F 010600 ld bc,fc3
0012 CD0000 call divi
0015 D1 pop de ; Zwischensumme im Stack
0016 19 add hl,de ; aktualisieren
0017 E5 push hl
0018 ED5B0620 ld de,(x6bog) ; Berechnung des 4. Gliedes
001C 015A00 ld bc,fc4
001F CD0000 call divi
0022 D1 pop de ; Zwischensumme im Stack
0023 EB ex de,hl ; aktualisieren
0024 AF xor a
0025 ED52 sbc hl,de
0027 E5 push hl
0028 ED5B0820 ld de,(x8bog) ; Berechnung des 5. Gliedes
002C 01EC04 ld bc,fc5
002F CD0000 call divi
0032 D1 pop de ; Stack korrigieren
0033 19 add hl,de ; und Summe fertigstellen
; cx in reg hl berechnet
0034 C9 ret
Bild 6. COSINUS
|