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

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

Votre réponse

6 réponses

Meilleure réponse
Messages postés
96
Date d'inscription
vendredi 1 avril 2005
Statut
Membre
Dernière intervention
26 juillet 2007
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+

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 109 internautes nous ont dit merci ce mois-ci

Commenter la réponse de skirby
Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
7 novembre 2014
41
0
Merci
un shift de 69 positions sur un registre 32 bits ???

ciao...
BruNews, MVP VC++
Commenter la réponse de BruNews
Messages postés
96
Date d'inscription
vendredi 1 avril 2005
Statut
Membre
Dernière intervention
26 juillet 2007
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
Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
7 novembre 2014
41
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
Messages postés
2674
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
2
0
Merci
Quel différence entre SAR et SHR ?

Shell
Commenter la réponse de DeAtHCrAsH
Messages postés
96
Date d'inscription
vendredi 1 avril 2005
Statut
Membre
Dernière intervention
26 juillet 2007
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.