ASM inline et mingw (GCC) [Résolu]

skirby 96 Messages postés vendredi 1 avril 2005Date d'inscription 26 juillet 2007 Dernière intervention - 19 avril 2006 à 09:56 - Dernière réponse : skirby 96 Messages postés vendredi 1 avril 2005Date d'inscription 26 juillet 2007 Dernière intervention
- 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.
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
skirby 96 Messages postés vendredi 1 avril 2005Date d'inscription 26 juillet 2007 Dernière intervention - 19 avril 2006 à 13:06
3
Merci
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+

Merci skirby 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 74 internautes ce mois-ci

Commenter la réponse de skirby
BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 19 avril 2006 à 10:20
0
Merci
un shift de 69 positions sur un registre 32 bits ???

ciao...
BruNews, MVP VC++
Commenter la réponse de BruNews
skirby 96 Messages postés vendredi 1 avril 2005Date d'inscription 26 juillet 2007 Dernière intervention - 19 avril 2006 à 11:20
0
Merci
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 ?
Commenter la réponse de skirby
BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 19 avril 2006 à 11:33
0
Merci
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++
Commenter la réponse de BruNews
DeAtHCrAsH 2674 Messages postés vendredi 25 janvier 2002Date d'inscription 6 février 2013 Dernière intervention - 19 avril 2006 à 17:32
0
Merci
Quel différence entre SAR et SHR ?

Shell
Commenter la réponse de DeAtHCrAsH
skirby 96 Messages postés vendredi 1 avril 2005Date d'inscription 26 juillet 2007 Dernière intervention - 19 avril 2006 à 20:34
0
Merci
Salut DeAtHCrAsH,

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

A+
Commenter la réponse de skirby

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.