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