Code C vers ASM

Fermé
pimousse123 Messages postés 1 Date d'inscription jeudi 5 mars 2009 Statut Membre Dernière intervention 5 mars 2009 - 5 mars 2009 à 18:06
Bonjour,
je suis nouveau dans le monde de l'ASM, j'ai un code C que j'aimerais donc transrire en ASM...
Le 2eme code C est plus proche du langage ASM je pense.
Merci de me signaler mes erreurs ^^


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}