;ce programme est pour l'assembleur RealView (Keil) thumb area moncode, code, readonly export calcul_dft import TabCos import TabSin ; calcul_dft proc push {lr} push {r0,r1,r4,r5} ldr r2, =TabCos bl calcul_partie_dft ;recuperation Re(k) dans r0 smull r4, r5, r0, r0 ;Re(k)² dans r4, r5 pop {r0,r1} ;recupereration de TabSig et k dans r0,r1 ldr r2, =TabSin bl calcul_partie_dft ;mise de -Im(k) dans r0 smlal r4, r5, r0, r0 ;Re²+(-Im(k))² mov r0, r5 ;recuperation des bits de poids fort de M2(k) pop {lr, r4,r5} bx lr endp calcul_partie_dft proc push {r4-r7} mov r4, r0 ;chargement de TabSig dans r4 mov r5, r2 ;chargement de TabCos/TabSin dans r5 mov r6, r1 ;chargement de k dans r6 mov r7, #0 ;ik dans r7 mov r3, #0 ;i=0 dans r3 mov r0, #0 ;resultat de la somme dans r0 boucle ldrh r1, [r4, r3, LSL #1] ;chargement de x(i) ldrsh r2, [r5, r7, LSL #1] ;chargement de cos(ik..), ldrs(!)h tres important, ne fonctionne pas sinon mla r0, r1, r2, r0 ;multiplication + ajout au resultat de x(i)cos(ik..) add r7, r7, r6 ;mise a jour de ik and r7, r7, #63 ;modulo de ik par 64 add r3, #1 ;incrementation de i cmp r3, #64 ;test de i bne boucle beq sortie sortie pop {r4-r7} bx lr endp end