IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Autres architectures Assembleur Discussion :

Code C vers Assembleur


Sujet :

Autres architectures Assembleur

  1. #1
    Invité
    Invité(e)
    Par défaut Code C vers Assembleur
    Bonjour,
    Petit nouveau dans le monde de l'ASM, j'ai développé un code C, en 2 exemplaire, le 2eme est plus proche du langage ASM je pense.
    J'aimerais savoir ce que vous en pensez ? (vu qu'il y aura surement des fautes.


    //j'ai un tableau avec des coeff, que je decremente a chaque itération, un genre de filtre, une fois que je suis arrivé au début du tableau, je sors de la boucle et je retourne le resultat

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 368
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 368
    Points : 23 622
    Points
    23 622
    Par défaut
    Bonsoir,

    Je n'ai pas encore exploré ton programme mais, à première vue :

    • Ton code semble être écrit en assembleur ARM et pas x86 (j'ai déplacé la discussion) ;
    • Pourquoi initialiser [N-1] à la main et itérer ensuite sur les suivants ? Il était plus simple d'initialiser sum à 1, et de faire courir la boucle sur tous les indices de ton tableau ...


    Citation Envoyé par blinix123 Voir le message
    [CODE]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;
    }

  3. #3
    Invité
    Invité(e)
    Par défaut
    Donc je peux ne pas traiter le 1er a part et tout mettre dans la boucle...? vais tester.

    Mais sinon le code ASM qqn trouve ca correct ?

    merci

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 368
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 368
    Points : 23 622
    Points
    23 622
    Par défaut
    Citation Envoyé par blinix123 Voir le message
    Donc je peux ne pas traiter le 1er a part et tout mettre dans la boucle...? vais tester.
    Bien sûr que si, tu le peux, mais il se trouve qu'en l'occurence, ça ne sert à rien.

Discussions similaires

  1. Marqueur du code c vers assembleur
    Par TSUS86 dans le forum x86 32-bits / 64-bits
    Réponses: 1
    Dernier message: 15/09/2011, 18h17
  2. Traduction de code Oracle vers SQL Server
    Par randomcl dans le forum Langage SQL
    Réponses: 1
    Dernier message: 13/11/2005, 23h43
  3. Traduction du code oracle vers SQL - suite
    Par randomcl dans le forum Langage SQL
    Réponses: 1
    Dernier message: 10/11/2005, 14h40
  4. [VB.net]problème de conversion de code c# vers VB.net
    Par cladsam dans le forum Windows Forms
    Réponses: 2
    Dernier message: 18/10/2005, 14h07
  5. Adaptation d'un code TMemo vers TRichEdit : problème de ScrollBars
    Par Droïde Système7 dans le forum Composants VCL
    Réponses: 2
    Dernier message: 21/01/2005, 15h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo