61 lines
No EOL
1.4 KiB
ArmAsm
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 |