Utilisation d'assembleur dans Visual Studio C++ 2008

Résolu
epineurien Messages postés 83 Date d'inscription samedi 21 mai 2005 Statut Membre Dernière intervention 22 mars 2011 - 13 avril 2008 à 18:18
epineurien Messages postés 83 Date d'inscription samedi 21 mai 2005 Statut Membre Dernière intervention 22 mars 2011 - 16 avril 2008 à 11:27
Bonjour à tous !

Je suis passé il y a quelques jours de Masm32 à Visual Studio 2008 et j'ai (comme d'hab.) quelques problêmes.
Tant qu'il s'agit d'afficher un bon vieux 'hello world' en pur C , ca va . Mais dès que j'essaye d'insérer de l'asm , la galère commençe.
J'ai déjà résolut une partie des problêmes , mais il y a deux messages qui résistent <strike>encore et toujours à l'envahisseur</strike> à mes recherches.

Voilà les codes :  (je me suis basé sur les exemples 'EuclidStep2' & co. trouvé sur MSDN)
demonstration.cpp :

#include "Test.asm"                  // le fichier asm
void Truc(void);                        //équivalent d'un PROTO en C++

int main(int argc, char* argv[])
{
Truc();                                       //le programme ne fait rien , c'est juste pour voir si ça marche
return 0;
}

Test.asm :

.686
.MODEL FLAT,C
.STACK 4096

Truc PROTO

.code

Truc PROC
xor eax,eax
xor ebx,ebx
xor ecx,ecx
xor edx,edx
ret
Truc ENDP
END

Les erreurs sont :
Test.asm(1) : error C2059: erreur de syntaxe : 'constant'         ; apparement '.686' ne lui plait pas (et pareil pour '.386' , '.586' ,...)
.\Demonstration.cpp(6) : error C3861: 'Truc' : identificateur introuvable   ;apparement ma déclaration de fonction lui plait pas plus .

Donc si l'un de vous est un utilisateur de VS C++ , est-ce qu'il pourrait m'expliquer ce qui ne vas pas ?

D'avance merci !

Jetez un coup d'oeil à mon projet de moteur 3D par lancer de rayons : 

15 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
14 avril 2008 à 20:47
Essaie avec cette version:
http://brunews.com/Speed32.zip

Dézipper, lancer par le fichier vcproj et recompiler.

ciao...
BruNews, MVP VC++
3
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
13 avril 2008 à 19:33
Exemple entre autres ici:
http://www.cppfrance.com/codes/TEST-VITESSE-SELON-TYPE-WIN32-WIN64_45996.aspx

Charge projet dans VC++ et clic droit propriété sur fichier asm, tu y verras ce qu'il faut mettre en options de compil.

ciao...
BruNews, MVP VC++
0
epineurien Messages postés 83 Date d'inscription samedi 21 mai 2005 Statut Membre Dernière intervention 22 mars 2011
13 avril 2008 à 21:07
C'est fait ...

Aucun changement , j'ai exactement les mêmes erreurs .
Au passage , si j'essaye d'ajouter tes commandes :
option casemap :none
option prologue:none
option epilogue:none
j'obtiens pleins d'erreurs en plus : des 'erreurs de syntaxes' et des 'spécificateur de type manquant' dans Test.asm (au cas où ca pourrait te guider...).

Jetez un coup d'oeil à mon projet de moteur 3D par lancer de rayons : 
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
13 avril 2008 à 21:17
MON projet donné plus haut, si tu l'ouvres et compiles, tu as des erreurs ?

ciao...
BruNews, MVP VC++
0

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

Posez votre question
epineurien Messages postés 83 Date d'inscription samedi 21 mai 2005 Statut Membre Dernière intervention 22 mars 2011
13 avril 2008 à 21:21
Oui , une seule , due à un fichier manquant semble t-il :
.\Speed32.rc(10) : fatal error RC1015: cannot open include file 'afxres.h'.

Note : pour ce qui de rajouter 'option bidule:none' , ca enlève les deux erreurs que j'avait au départ et ca les remplace par  :
Test.asm(1) : error C2059: erreur de syntaxe : 'constant'
Test.asm(5) : error C2146: erreur de syntaxe : absence de ';' avant l'identificateur 'option'
Test.asm(5) : error C4430: spécificateur de type manquant - int est pris en compte par défaut. Remarque : C++ ne prend pas en charge int par défaut
Test.asm(5) : error C2146: erreur de syntaxe : absence de ';' avant l'identificateur 'prologue'
Test.asm(5) : error C4430: spécificateur de type manquant - int est pris en compte par défaut. Remarque : C++ ne prend pas en charge int par défaut
Test.asm(5) : error C2470: 'prologue' : similaire à une définition de fonction, mais aucune liste de paramètres ; corps apparent ignoré
Test.asm(6) : error C2061: erreur de syntaxe : identificateur 'option'
.\Demonstration.cpp(4) : error C2062: type 'int' inattendu
.\Demonstration.cpp(5) : error C2630: ';' trouvé(e) à la place d'une liste avec la virgule comme séparateur

Jetez un coup d'oeil à mon projet de moteur 3D par lancer de rayons : 
0
epineurien Messages postés 83 Date d'inscription samedi 21 mai 2005 Statut Membre Dernière intervention 22 mars 2011
13 avril 2008 à 21:39
MAJ :
J'en ai profité pour reprendre tes paramêtres pour le fichier 'Speed32.c' , vers 'Demonstration.cpp' , si je met :
Compilation sous : 'Compiler comme du code C' au lieu de 'Compiler comme du C++' ;
ca enlève l'erreur : '.\Demonstration.cpp(6) : error C3861: 'Truc' : identificateur introuvable.'

Jetez un coup d'oeil à mon projet de moteur 3D par lancer de rayons : 
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
13 avril 2008 à 21:49
Le fichier RC est dans le zip, il n'est pas manquant.

ciao...
BruNews, MVP VC++
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
13 avril 2008 à 21:54
Autre chose, prépare tes projets avec ceci:
TEMPLATES C/C++ POUR VS 2008
http://www.cppfrance.com/code.aspx?ID=44835

ciao...
BruNews, MVP VC++
0
epineurien Messages postés 83 Date d'inscription samedi 21 mai 2005 Statut Membre Dernière intervention 22 mars 2011
13 avril 2008 à 22:16
Le fichier '.rc' est bien là , mais pas 'afxres.h'.
Au passage , c'est pareil pour l'autre source :
.\TplVs08.rc(10) : fatal error RC1015: cannot open include file 'afxres.h'.

Remarque 1: toutes mes 'lignes de commandes' dans les propriétés sont différentes des tiennes.
Le problême c'est que j'arrive pas à les effacer , je ne peut que rajouter des options supplémentaires.

Remarque 2: j'ai aussi recopié les propriétés de tout le projet. Ca n'a rien changé , sauf que je peut remettre partout 'Compiler comme du C++' , c'est tant mieux parceque sans ça un 'include <windows.h>' donnait une série d'erreur de 10 mètres de long :
error C2027: utilisation du type non défini 'PreAttribute'
error C2027: utilisation du type non défini 'PostAttribute'
en boucle ...

Je sens que ça va être long... :-)

Pour tes templates , je doit utiliser lequel ? cWnd ?
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
13 avril 2008 à 22:24
ah ok, ton installation de VC++ n'est pas complete.

Vire la ligne afxres.h, c'est issu de MFC, pas indispensable. Suffira de mettre les constantes manquantes (comme IDC_DTATIC = -1).

ciao...
BruNews, MVP VC++
0
epineurien Messages postés 83 Date d'inscription samedi 21 mai 2005 Statut Membre Dernière intervention 22 mars 2011
14 avril 2008 à 08:45
J'ai essayer avec ton template cWnd , ca ne marche pas plus , j'ai toujours la même erreur (en même temps y avait de fichier .asm dedans ).

Et mon installation est complète ... Ou alors tu veut dire que je n'ai pas le fichier 'afxres.h' parceque c'est juste la version express ?

Jetez un coup d'oeil à mon projet de moteur 3D par lancer de rayons : 
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
14 avril 2008 à 10:27
comme déjà dit, afxres.h fait partie de MFC, non inclus dans version Express.
Voir ici
http://www.cppfrance.com/code.aspx?ID=38359
pose 2005 ou 2008 idem.

ciao...
BruNews, MVP VC++
0
epineurien Messages postés 83 Date d'inscription samedi 21 mai 2005 Statut Membre Dernière intervention 22 mars 2011
14 avril 2008 à 20:00
Personne n'a une idée ?
Parceque je suis toujours bloqué là ...

Y a toujours ce foutu .386 / .586 / .686 qui ne veut pas être reconnu , même quand j'utilise les réglages de BruNews ...

Jetez un coup d'oeil à mon projet de moteur 3D par lancer de rayons : 
0
epineurien Messages postés 83 Date d'inscription samedi 21 mai 2005 Statut Membre Dernière intervention 22 mars 2011
15 avril 2008 à 10:26
Ok ca compile sans erreurs , mais comme j'avait pas 'winres.h' , il a fallut que je bidouille ; je l'ai remplacer par 'winresrc.h' et j'ai rajouter '#define IDC_STATIC -1'.
(Accesoirement j'ai une moyenne de 16000 pour BYTE et WORD , et 18000 pour DWORD (c'est un vieux PC au bureau )).

J'ai remplacer le contenu de tes fichiers (donc en gardant tes réglages) par les codes que j'ai posté au début :
tstspeed.asm(1) : error C2059: erreur de syntaxe : 'constant'
Cette fois c'est TON .586 qui n'est plus reconnu.
Ce qui semble vouloir dire que ca n'est pas une question de réglages .. Peut être un truc que je ne définit pas correctement dans mon code ? Pourtant même aprés relecture et comparaison avec ton .asm , je voit pas ce que j'ai put zapper d'important...

En désespoir de cause j'ai uploadé mon projet sur mon site :
http://hydrargyrum.ifrance.com/Telechargement/ProjetVSC++.rar.txt
(l'extension '.txt' est à virer , c'est juste parceque mon hébergeur fait la geule au fichiers '.rar' , sans que je sache pourquoi ...).

Donc si quelqu'un a une ou deux heures à perdre pour essayer d'identifier la source du probleme ...

Jetez un coup d'oeil à mon projet de moteur 3D par lancer de rayons : 
0
epineurien Messages postés 83 Date d'inscription samedi 21 mai 2005 Statut Membre Dernière intervention 22 mars 2011
16 avril 2008 à 11:27
J'ai trouvé la source du problême !!!!!
Dans ta source tu n'as pas d'include sur 'tstSpeed.asm' , j'ai testé et c'est le '#include test.asm' qui me donnait l'erreur sur le '.x86'.
J'ai aussi comprit le coté indispensable de ton '#pragma comment(linker, "/entry:myWinMain")'.

Voilà donc le .cpp fonctionnel :
#include <windows.h>
DWORD __stdcall Truc();
#pragma comment(linker, "/entry:Main")
int Main(int argc, char* argv[])
{
Truc();
return 0;
}

Par contre juste un truc bizarre ; si je vire le "include windows.h" j'obtiens :
.\Demonstration.cpp(3) : error C2143: erreur de syntaxe : absence de '{' avant '__stdcall'
C'est quoi cette histoire ? Pourquoi y aurait il besoin d'un marqueur de corps de fonction avant de pouvoir déclarer les PROTO (enfin ... leur équivalent C++) ?

Dans tout les cas merci beaucoup pour ton aide BruNews !

Jetez un coup d'oeil à mon projet de moteur 3D par lancer de rayons : 
0
Rejoignez-nous