Léa-Linux & amis :   LinuxFR   GCU-Squad   GNU
asm
Envoyé par: moueza

bonjour,
Je me mets à l'ASM inline et 1er eccueil rencontré pour le fichier asmInline.c ci-dessous :


int main(void)
{
int a, b;
a=12;haut de page
b=30;

__asm__("add %%ebx, %%eax"
: "=eax"(a) //sortie
: "eax"(a), "ebx"(b) //entree
: "eax"); //modifie
printf("a+b=%i\n",a);
return(0);
}



wireless:~/Desktop/clef256/PROGRAMMATION/asm # gcc asmInline.c -o asmInline
asmInline.c: In function main:
asmInline.c:12: warning: incompatible implicit declaration of built-in function printf
asmInline.c:8: error: impossible constraint in asm



Je ne comprends pas ce qu'il me veut.
le asm est-il bien bordé par 2 underscores à gauche et à droite ?

Poste le Monday 3 July 2006 15:13:50
Répondre     Citer    
Re: asm
Envoyé par: Léa (Fred)

#include "stdio.h"

Poste le Monday 3 July 2006 21:48:48
Répondre     Citer    
Re: asm
Envoyé par: menelrandir

Ou mieux :
#include <stdio.h>
Bien que GCC accepte les deux.

Poste le Monday 3 July 2006 23:35:48
Répondre     Citer    
Re: asm
Envoyé par: menelrandir

Et pour l'assembleur, les régistres pour les entrées et les sorties sont désignés par des codes : a pour eax, b pour ebx, etc

Poste le Tuesday 4 July 2006 00:47:29
Répondre     Citer    
Re: asm
Envoyé par: moueza

Alors, j'ai corrigé mon code en :


wireless:~/Desktop/clef256/PROGRAMMATION/asm #
wireless:~/Desktop/clef256/PROGRAMMATION/asm # cat asmInline.c
#include <stdio.h>

int main(void)
{
int a, b;
a=12;
b=30;

asm("add %%ebx, %%eax"
: "=eax"(a) //sortie
: "eax"(a), "ebx"(b) //entree
: "eax"); //modifie
printf("a + b = %i\n", a);
return (0);
}
wireless:~/Desktop/clef256/PROGRAMMATION/asm #







wireless:~/Desktop/clef256/PROGRAMMATION/asm #
wireless:~/Desktop/clef256/PROGRAMMATION/asm #
wireless:~/Desktop/clef256/PROGRAMMATION/asm # gcc asmInline.c -o asmInline
asmInline.c: In function main:
asmInline.c:9: error: impossible constraint in asm
wireless:~/Desktop/clef256/PROGRAMMATION/asm #


Apparemment, ça vient du asm:
il faut l'entourer de 2 underscores, d'espaces, ou quoi ?

Poste le Wednesday 5 July 2006 11:24:02
Répondre     Citer    
Re: asm
Envoyé par: menelrandir

Le problème ne vient pas du asm mais de ses arguements, les 2 underscores avant et après sont facultatifs mais pas génants.

Le problème c'est que :
Citation

Et pour l'assembleur, les régistres pour les entrées et les sorties sont désignés par des codes : a pour eax, b pour ebx, etc
Ce qui donne :
int A, B;
A=12;
B=30; 

asm("add %%ebx, %%eax"
: "=a"(A) //sortie
: "a"(A), "b"(cool smiley //entree
: "eax"); //modifie
J'ai passer les noms des variables en majuscule pour éviter les confusions.

Poste le Wednesday 5 July 2006 13:31:03
Répondre     Citer    
Re: asm
Envoyé par: moueza

Euh ,il y a encore une erreur,qu'est-ce qui ne va pas encore ?:



wireless:~/Desktop/clef256/PROGRAMMATION/asm # cat asmInlineGuillemets.c
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
int A, B;
A=12;
B=30;

asm("add %%ebx, %%eax"
: "=a"(A) //sortie
: "a"(A), "b"(cool smiley //entree
: "eax"); //modifie
printf("a + b = %i\n", A);
return (0);
}
wireless:~/Desktop/clef256/PROGRAMMATION/asm #
wireless:~/Desktop/clef256/PROGRAMMATION/asm #
wireless:~/Desktop/clef256/PROGRAMMATION/asm #
wireless:~/Desktop/clef256/PROGRAMMATION/asm # gcc asmInlineGuillemets.c -o go
asmInlineGuillemets.c: In function â&#128;&#152;mainâ&#128;&#153;:
asmInlineGuillemets.c:10: error: can't find a register in class â&#128;&#152;AREGâ&#128;&#153; while reloading â&#128;&#152;asmâ&#128;&#153;
wireless:~/Desktop/clef256/PROGRAMMATION/asm #


Poste le Monday 10 July 2006 18:20:08
Répondre     Citer    
Re: asm
Envoyé par: menelrandir

Cette erreur disparaît en supprimant la ligne
: "eax"); //modifie

Mais je t'avoue que je ne comprends pas trop pourquoi et que je ne pense pas que ce soit une solution très propre.

Poste le Tuesday 11 July 2006 17:54:30
Répondre     Citer    

Veuillez vous authentifier auparavant pour commenter.

 

Ce forum !
asm
Pour poser vos questions sur les scripts shell, le Perl, le C, etc... Attention : nous ne sommes pas des spécialistes du dev, ce forum est juste pour de petites aides ponctuelles concernant le développement et les outils de développement.

Sauf mention contraire, les documentations publiées sont sous licence Creative-Commons