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")
Qu'est ce qui ne va pas ?
Merci d'avance pour votre aide.
A voir également:
Utiliser une fonction ASM compilée (sous MASM) sous Dev-C++ ?
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.
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.
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)
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.
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 ?
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.
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.