Utiliser une fonction ASM compilée (sous MASM) sous Dev-C++ ?
skirby
Messages postés96Date d'inscriptionvendredi 1 avril 2005StatutMembreDernière intervention26 juillet 2007
-
6 avril 2005 à 14:14
skirby
Messages postés96Date d'inscriptionvendredi 1 avril 2005StatutMembreDernière intervention26 juillet 2007
-
6 avril 2005 à 20:07
Bonjour,
j'essaye désespérément d'intégrer une fonction assembleur (compilée sous MASM) dans Dev-C++ (v4.9.9.2)
J'ai ajouté dans les options de mon projet l'emplacement de mon fichier
asm compilé function.o (dans "Project options", onglet "Parameters" et
zone "Linker")
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 6 avril 2005 à 15:22
ASM "compilé"... nenni, c'est toi le compilo si tu écris en asm et il n'y a donc personne qui t'optimisera le code, il sera bon ou mauvais.
Le prends pas mal mais au vu de ton court exemple, vaudrait mieux écrire en C et le compilo avec les bons réglages produira nettement meilleur. Faut faire une seule lecture de l'adresse mémoire et l'adition sur eax directement, un compilo ne raterait pas cela.
skirby
Messages postés96Date d'inscriptionvendredi 1 avril 2005StatutMembreDernière intervention26 juillet 2007 6 avril 2005 à 16:11
Salut BruNews,
En effet mon exemple est stupide mais c'est fait exprès.
Mon code assembleur contient en fait 5 fonctions (environs 350 lignes
de code) qui seraient difficile d'écrire en C et qui nécessite d'être
exécutées le plus rapidement possible.
J'ai donc fait un exemple tout simple mais qui me pose le même problème que mon fichier asm d'origine.
Donc si quelqu'un m'explique comment faire fonctionner mon petit exemple, je devrais pouvoir m'en sortir à le miens.
skirby
Messages postés96Date d'inscriptionvendredi 1 avril 2005StatutMembreDernière intervention26 juillet 2007 6 avril 2005 à 17:06
J'ai essayé mais ça ne change rien.
En fait je pense que c'est plus un problème au niveau du link.
Dev C++ ne semble pas faire le lien avec ma fonction (qui se trouve dans mon fichier.o)
Le pire c'est que je ne sais pas si le problème vient :
<li>de la déclaration de ma fonction en assembleur</li>
<li>de la façon dont j'appelle ma fonction depuis Dev-C++</li>
<li>d'un problème de paramètrage de Dev-C++</li>
As-tu le temps (et l'envie) de tester le programme ?
Merci.
ps: 'public' est nécessaire je crois pour que la fonction assembleur
soit visible de l'extérieur du module (donc depuis le fichier C ou bien
d'autre modules assembleur)
Vous n’avez pas trouvé la réponse que vous recherchez ?
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 6 avril 2005 à 17:17
Désolé je bosse sur VS 2003, je ne peux donc pas tester mais passe impec sous VS avec le 'C'. Je pense que c'est une question de décoration du nom de la fonction dans la lib, pour cela qu'il ne la trouve pas.
skirby
Messages postés96Date d'inscriptionvendredi 1 avril 2005StatutMembreDernière intervention26 juillet 2007 6 avril 2005 à 17:44
Tu as fait le même test que moi ?
Tu as écrit un petit fichier en assembleur que tu as assemblé avec MASM
et utilisé ensuite dans VS 2003 ou tu as utilisé directement de
l'assembleur inline dans VS 2003 ?
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 6 avril 2005 à 17:55
Fichier asm direct dans VS, suffit de mettre:
E:\Masm32\bin\ml.exe -c -coff -Cx -Fo$(IntDir)\$(InputName).obj $(InputName).asm
en propriété du fichier asm eton utilise l'assembleur qu'on veut, identique si je l'assemblais avant avec masm.
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 6 avril 2005 à 17:57
ah oui, note que c'est un vieil truc que j'ai retrouvé, je n'utilise plus que l'asm direct dans les fichiers C en employant:
__declspec(naked)
pour que le compilo ne touche à rien, nettement plus confortable.