Code C vers ASM

benjamin0000000 Messages postés 2 Date d'inscription lundi 29 novembre 2004 Statut Membre Dernière intervention 6 mars 2009 - 5 mars 2009 à 18:02
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 - 6 mars 2009 à 22:35
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 ^^

<meta http-equiv="CONTENT-TYPE" content="text/html; charset=utf-8" /><title></title><meta /><meta content="20090305;17413700" /><meta content="16010101;0" /><!--
@page { size: 21cm 29.7cm; margin: 2cm }
P { margin-bottom: 0.21cm }
-->
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}

3 réponses

cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
5 mars 2009 à 19:08
Euh t'as qu'à compiler ton code C. Tu pourras le retrouver en l'entourant de NOP's (en ASM inline)
0
benjamin0000000 Messages postés 2 Date d'inscription lundi 29 novembre 2004 Statut Membre Dernière intervention 6 mars 2009
6 mars 2009 à 14:20
Je code sous Keil, je peux compiler mon code C et obtenir le code ASM en faisant une manip' ?
J'ai pas compris ton NOP's
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
6 mars 2009 à 22:35
Tu encadres ton code avec (devant et derrière) :
__asm("nop");
__asm("nop");

Après tu n'as plus qu'à recopier le code compilé.
0
Rejoignez-nous