1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
| int ValApp (int x, int* tabCoef, int N)
{
int i = 0;
int sum = 0;
sum = 1 + tabCoef[N-1] * x*x;
for (i=N-2; i>=0; i--)
{
sum = 1 + tabCoef[i] *x*x * sum;
}
return sum;
}
R0 R1 R2
int ValApp (int x, int* TabCoef, int N)
{
int i = 0; //R3
int sum = 0; //R4
i = N-1;
*ptrTabCoef = TabCoef[N-1];
sum = 1 + *ptrTabCoef * x*x;
while (i>0)
{
ptrTabCoef--;
sum = 1 + *ptrTabCoef *x*x * sum;
i--;
}
return sum;
}
R0: x R1:ptrTabCoef R2:N
STMFD SP!, {R0-R8,LR} //sauvegarde des registres
XXX XXXXXX //Mettre R7 à 1....
ADD R3,R2,R3,LSL#2 //R3=R2+4R3 // i=N-1
LDR R5,[R1] //R5=*R1 // *ptrTabCoef = TabCoef[N-1];
MUL R6,R0,R0 //R6=R0*R0 // x*x
MUL R4,R6,R5 //R4=R5*R6 // Sum = *ptrTabCoef * x²
ADD R4,R4,R7 //R4=R4+R7 // Sum = Sum + 1
debut loop CMP R3,#0 // while(i>=0)
BLE fin loop
LDR R5,[R0,#-4] //R0=R0-4 puis R5=*R0 // ptrTabCoef--
MUL R8,R6,R5 //R8=R6*R5 // temp = x² * ptrTabCoef
MUL R4,R4,R8 //R4=R4*R8 // Sum = Sum+temp ou Sum = Sum + x² * ptrTabCoef
ADD R4,R4,R7 //R4=R4+R7 // Sum = Sum + 1
SUB R3,R3,#1 //R3=R3 - 1 // i--
B
MOV R0,R4 //R0=R4 // R0 = Sum (car je dois renvoyer sur R0)
LDMFD SP!, {R0-R8,PC}
Merci |
Partager