Utilisation d'assembleur dans Visual Studio C++ 2008 [Résolu]

epineurien 83 Messages postés samedi 21 mai 2005Date d'inscription 22 mars 2011 Dernière intervention - 13 avril 2008 à 18:18 - Dernière réponse : epineurien 83 Messages postés samedi 21 mai 2005Date d'inscription 22 mars 2011 Dernière intervention
- 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 : 
Afficher la suite 

Votre réponse

15 réponses

Meilleure réponse
BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 14 avril 2008 à 20:47
3
Merci
Essaie avec cette version:
http://brunews.com/Speed32.zip

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

ciao...
BruNews, MVP VC++

Merci BruNews 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 BruNews
BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 13 avril 2008 à 19:33
0
Merci
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++
Commenter la réponse de BruNews
epineurien 83 Messages postés samedi 21 mai 2005Date d'inscription 22 mars 2011 Dernière intervention - 13 avril 2008 à 21:07
0
Merci
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 : 
Commenter la réponse de epineurien
BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 13 avril 2008 à 21:17
0
Merci
MON projet donné plus haut, si tu l'ouvres et compiles, tu as des erreurs ?

ciao...
BruNews, MVP VC++
Commenter la réponse de BruNews
epineurien 83 Messages postés samedi 21 mai 2005Date d'inscription 22 mars 2011 Dernière intervention - 13 avril 2008 à 21:21
0
Merci
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 : 
Commenter la réponse de epineurien
epineurien 83 Messages postés samedi 21 mai 2005Date d'inscription 22 mars 2011 Dernière intervention - 13 avril 2008 à 21:39
0
Merci
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 : 
Commenter la réponse de epineurien
BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 13 avril 2008 à 21:49
0
Merci
Le fichier RC est dans le zip, il n'est pas manquant.

ciao...
BruNews, MVP VC++
Commenter la réponse de BruNews
BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 13 avril 2008 à 21:54
0
Merci
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++
Commenter la réponse de BruNews
epineurien 83 Messages postés samedi 21 mai 2005Date d'inscription 22 mars 2011 Dernière intervention - 13 avril 2008 à 22:16
0
Merci
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 ?
Commenter la réponse de epineurien
BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 13 avril 2008 à 22:24
0
Merci
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++
Commenter la réponse de BruNews
epineurien 83 Messages postés samedi 21 mai 2005Date d'inscription 22 mars 2011 Dernière intervention - 14 avril 2008 à 08:45
0
Merci
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 : 
Commenter la réponse de epineurien
BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 14 avril 2008 à 10:27
0
Merci
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++
Commenter la réponse de BruNews
epineurien 83 Messages postés samedi 21 mai 2005Date d'inscription 22 mars 2011 Dernière intervention - 14 avril 2008 à 20:00
0
Merci
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 : 
Commenter la réponse de epineurien
epineurien 83 Messages postés samedi 21 mai 2005Date d'inscription 22 mars 2011 Dernière intervention - 15 avril 2008 à 10:26
0
Merci
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 : 
Commenter la réponse de epineurien
epineurien 83 Messages postés samedi 21 mai 2005Date d'inscription 22 mars 2011 Dernière intervention - 16 avril 2008 à 11:27
0
Merci
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 : 
Commenter la réponse de epineurien

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.