Assembleur inline avec Microsoft Visual C++ Toolkit 2003

Résolu
skirby Messages postés 96 Date d'inscription vendredi 1 avril 2005 Statut Membre Dernière intervention 26 juillet 2007 - 28 janv. 2006 à 13:08
skirby Messages postés 96 Date d'inscription vendredi 1 avril 2005 Statut Membre Dernière intervention 26 juillet 2007 - 29 janv. 2006 à 01:09
Bonjour,

J'aurais voulu savoir si il était possible de faire de l'assembleur inline avec le compilateur gratuit Microsoft Visual C++ Toolkit 2003 ?

J'utilise la syntaxe suivante :
__asm
{
mov eax, 1
}

J'ai une erreur à la compilation.

En revanche la sytaxe suivante fonctionne :
asm("mov $1, %eax");

Pourtant c'est la syntaxe AT&T (très peu pratique) de GCC.

Pourquoi je ne peux pas utiliser la syntaxe Intel ?

Merci d'avance pour votre aide.

8 réponses

spiky31 Messages postés 106 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 11 février 2008
28 janv. 2006 à 22:47
Juste pour signaler a skirby que chez moi ton code fonctionne sans probleme avec VC toolkit 2003.
Si tu utilise code::blocks n'oublie pas de changer le compilateur dans les parametres de ton projet.
3
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 13
28 janv. 2006 à 13:37
Tu peux utiliser la syntaxe intel avec la version 2005 Express
Tu peux le récupérer gratuitement ici:
http://download.microsoft.com/download/7/6/0/760bd72d-bef3-4e0f-bdfb-1024ad5b005b/vc.iso

Donne quand même ton erreur pour voir
0
skirby Messages postés 96 Date d'inscription vendredi 1 avril 2005 Statut Membre Dernière intervention 26 juillet 2007
28 janv. 2006 à 18:47
Salut vecchio56

Voici mon code :
#include

int main()
{
std::cout << "Hello world!" << std::endl;

__asm {
mov eax, 1
}

return 0;
}
Comme tu peux le voir on ne peux pas faire plus simple.

Voici l'erreur que j'ai à la compilation :
main.cpp: In function `int main()':
main.cpp:7: error: expected `(' before '{' token
main.cpp:7: error: expected asm body before '{' token
main.cpp:8: error: `mov' undeclared (first use this function)
main.cpp:8: error: (Each undeclared identifier is reported only once for each function it appears in.)
main.cpp:8: error: expected `;' before "eax"
Process terminated with status 1 (0 minutes, 3 seconds)
Pour info, je compile sous CodeBlocks avec Microsoft Visual C++ Toolkit 2003 comme compilateur par défaut.

Sinon, j'ai récupéré la version 2005 Express (400 Mo)
Je vais essayer pour voir ce que ça donne.
Mais si quelqu'un trouve la réponse à ma question avec la version Toolkit 2003 je suis preneur.

Merci et A+
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 13
28 janv. 2006 à 19:50
Malgré ce que tu crois, j'ai bien l'impression que tu compiles actuellement avec gcc. Car chez moi, avec gcc j'obtiens les mêmes messages. Ceux de VC++ sont assez différents (notamment, il y a à chaque fois le numéro de l'erreur)
0

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

Posez votre question
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
28 janv. 2006 à 19:54
C'est clair que ces messages ne sortent pas du compilo VC++, il serait dans tous les cas incapable de transcrire de la syntaxe AT&T car pas fait pour cela..

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
0
cs_chris91 Messages postés 54 Date d'inscription jeudi 20 novembre 2003 Statut Membre Dernière intervention 4 avril 2007
29 janv. 2006 à 00:42
bonsoir,
avec codeblocks, bien que le compilateur par défaut soit c++ toolkit,
chaque nouveau projet est quand même compilé avec gcc.
en fait, avec le compilateur numéro 0.

le plus rapide, clic droit sur le nom du projet et build options pour changer le compilateur.

sinon, une solution possible est de modifier le projet template :
C:\Program Files\CodeBlocks\share\CodeBlocks\templates\win32.cbp


<?xml version="1.0"?>
<!DOCTYPE CodeBlocks_project_file>
<CodeBlocks_project_file>
<FileVersion major="1" minor="1"/>

<Option title="Win32 Application"/>
<Option makefile="Makefile"/>
<Option compiler="1"/>

<Target title="default">
<Option type="0"/>
<Option compiler="1"/>
</Target>

<Linker>



</Linker>


</CodeBlocks_project_file>

voilà, chaque nouveau projet WIN32 sera configuré avec le compilateur numéro 1
bye.
0
cs_chris91 Messages postés 54 Date d'inscription jeudi 20 novembre 2003 Statut Membre Dernière intervention 4 avril 2007
29 janv. 2006 à 00:45
mince, les tabs...

donc, ajout de la ligne <Option compiler="1"/>
dans la section et la sous-section
0
skirby Messages postés 96 Date d'inscription vendredi 1 avril 2005 Statut Membre Dernière intervention 26 juillet 2007
29 janv. 2006 à 01:09
Merci à vous tous ;o)

Il suffisait simplement de modifier les options du projet (et pas seulement le compilateur par défaut) pour que CodeBlocks compile avec Microsoft Visual Toolkit 2003 et non pas avec GCC.
0