ASM inline et mingw (GCC)

Résolu
skirby Messages postés 96 Date d'inscription vendredi 1 avril 2005 Statut Membre Dernière intervention 26 juillet 2007 - 19 avril 2006 à 09:56
skirby Messages postés 96 Date d'inscription vendredi 1 avril 2005 Statut Membre Dernière intervention 26 juillet 2007 - 19 avril 2006 à 20:34
Bonjour tout le monde,

J'aimerais mettre de l'assembleur inline dans mon code en C.
J'utilise Code::Block et mingw.

Voici un extrait de code qui ne veut pas fonctionner :

int tmp; // Variable globale pour pourvoir être utilisé dans le code asm



int fnt(char* s) {

int a;

for (int i = 0; i < strlen(s); i++) {

tmp = (unsigned char)s[i];



// Ce morceaux de code fonctionne (passage par un registre)

// asm(".intel_syntax noprefix \n"

// "mov eax, _tmp \n"

// "sar eax, 0x45 \n"

// "mov _tmp, eax \n"

// ".att_syntax \n"

// "\n");



// Pas celui la

// Le message d'erreur est le suivant : 1\Temp\ccOEaaaa.s:100: Error: ambiguous operand size for `sar'

asm(".intel_syntax noprefix \n"

"sar _tmp, 0x45 \n"

".att_syntax \n"

"\n");

a += tmp;

}



return a;

}

Une idée ?

Merci d'avance pour votre aide.
A voir également:

6 réponses

skirby Messages postés 96 Date d'inscription vendredi 1 avril 2005 Statut Membre Dernière intervention 26 juillet 2007
19 avril 2006 à 13:06
Pas de quoi pour sar
Je vais bien dormir ce soir car j'ai réussi à apprendre quelque chose à BruNews ;o)

Blague à part, j'ai fini par trouvé la solution. En fait, c'était plutôt logique.
Il suffisait d'écrire ceci :

asm(".intel_syntax noprefix \n"
"sar dword ptr _tmp, 0x45 \n"
".att_syntax \n"
"\n");

Voila pour ceux que ça intéresse et que ça pourrait dépanner.

Merci BruNews.

A+
3
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
19 avril 2006 à 10:20
un shift de 69 positions sur un registre 32 bits ???

ciao...
BruNews, MVP VC++
0
skirby Messages postés 96 Date d'inscription vendredi 1 avril 2005 Statut Membre Dernière intervention 26 juillet 2007
19 avril 2006 à 11:20
Salut BruNews,

La n'est pas le problème car même si je mets 0x05 par exemple, j'ai le même message d'erreur.
1\Temp\cciOaaaa.s:63: Error: ambiguous operand size for `sar'

De plus, SAR n'est pas la même chose que SHR.

Explication :
+------------------------------+ +----+
SHR 0 ----->| |---->| CF |
+------------------------------+ +----+

+------------------------------+ +----+
SAR +-->| |---->| CF |
| +------------------------------+ +----+
+-----+

Si je compile le code asm inline suivant avec Microsoft Visual C++ Toolkit 2003
__asm { sar tmp, 0x45 }
ça fonctionne sans problème.

Une idée ?
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
19 avril 2006 à 11:33
merci pour sar....

Mets ton nbr en format décimal, tu verras si c'est format hexa qu'il n'aime pas, sait-on jamais.

ciao...
BruNews, MVP VC++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
19 avril 2006 à 17:32
Quel différence entre SAR et SHR ?

Shell
0
skirby Messages postés 96 Date d'inscription vendredi 1 avril 2005 Statut Membre Dernière intervention 26 juillet 2007
19 avril 2006 à 20:34
Salut DeAtHCrAsH,

Jettes un oeil ici et tu comprendras
http://www.iut-arles.up.univ-mrs.fr/eremy/dut/Archi/asm.html#sar

A+
0
Rejoignez-nous