BE_CHTI/Obj_1/Src/DFT.s
2020-05-29 12:53:27 +02:00

61 lines
No EOL
1.4 KiB
ArmAsm

; AFONSO Perrine LARTIGUE Auriane
thumb
area moncode, code, readwrite
import TabSin
import TabCos
export CalculM
calculReouIm proc ; procedure permettant de calculer imaginaire ou reel
; ro contient la valeur de k
; r1 contient adresse de TabSig
; r2 contient adresse de TabCos ou Tabsin
mov r3 , #0x00 ; r3 va nous servir de compteur i
mov r12, #0x00 ; va contenir le resultat temporairement
comparaison cmp r3, #64 ; on compare i a 64
bne loop
b fin
loop
push {r0}
push{r12}; on garde l'ancienne contenu dans r12
mul r0, r0 , r3 ; i*k
and r0, #0x3F ; contient i*k modulo 64
ldrsh r12 , [r2, r0 , LSL #0x01] ; cos(i*k*2 pi / N)
mov r0 , r12
ldrsh r12 , [r1, r3 , LSL #0x01] ; x(i)
mul r12 , r12 , r0 ; x(i)* cos(i*k*2 pi / N)
add r3 , #0x01 ; on incremente le compteur i
mov r0, r12
pop{r12}
add r12, r0
pop {r0}
b comparaison ; on reboucle
fin
mov r0 , r12 ; on stocke le resultat final dans r0
bx lr
endp
CalculM proc
; k dans r0
;adresse de TabSig dans le registre r1
ldr r2, =TabCos ; adresse de TabCos dans le registre r2
push{LR,r0}
bl calculReouIm
mov r3, r0; Re dan r3
pop{r0}
push {r3}
ldr r2, =TabSin ; adresse de TabSin dans le registre r2
bl calculReouIm
mov r12 , r0 ; Im dans r12
pop{r3}
smull r1, r2, r3 , r3 ; Re^2
smlal r1, r2, r12 , r12; Re^2 +Im^2
mov r0, r2 ; on stocke le resultat dans r2
pop{PC}
bx lr
endp
end