begin process at 2012 05 30 10:42:16
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

Utiliser une fonction ASM compilée (sous MASM) sous Dev-C++ ?


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Utiliser une fonction ASM compilée (sous MASM) sous Dev-C++ ?

mercredi 6 avril 2005 à 14:14:13 | Utiliser une fonction ASM compilée (sous MASM) sous Dev-C++ ?

skirby

Bonjour,

j'essaye désespérément d'intégrer une fonction assembleur (compilée sous MASM) dans Dev-C++ (v4.9.9.2)

Voici mon code C :

/**************** Code C ****************/

#include <windows.h>
#include "rc_dlg.h"

extern long STDCALL myfnt(long);

/* prototype for the dialog box function. */
static BOOL CALLBACK DialogFunc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam);

int WINAPI WinMain (HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nFunsterStil)
{
    DialogBoxParam(hThisInstance,  MAKEINTRESOURCE(IDD_DLG1), NULL, (DLGPROC) DialogFunc, 0);
}

BOOL CALLBACK DialogFunc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
  char s[255];

    switch (msg) {
    case WM_INITDIALOG:
      wsprintf(s, "Valeur : %d", myfnt(10));
    MessageBox( 0, s, "Title", 0);

        return TRUE;
    case WM_CLOSE:
        EndDialog(hwndDlg,0);
        return TRUE;
    }
    return FALSE;
}

/**************** Code ASM ****************/

Et voici mon code assembleur (compilé avec MASM)

.386
.model flat, stdcall  ;32 bit memory model
option casemap :none  ;case sensitive

.code

myfnt proc public arg1:dword
    add arg1, 10
    mov eax, arg1
myfnt endp

end

/*****************************************/


A la compilation, j'ai ceci comme erreur :
  [Linker error] undefined reference to `_Z5myfntl@4'
  ld returned 1 exit status
 D:\tmp\Makefile.win [Build Error]  [test.exe] Error 1

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.

mercredi 6 avril 2005 à 15:22:27 | Re : Utiliser une fonction ASM compilée (sous MASM) sous Dev-C++ ?

BruNews

Administrateur CodeS-SourceS
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.

ciao...
BruNews, MVP VC++
mercredi 6 avril 2005 à 16:11:04 | Re : Utiliser une fonction ASM compilée (sous MASM) sous Dev-C++ ?

skirby

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.

mercredi 6 avril 2005 à 16:55:36 | Re : Utiliser une fonction ASM compilée (sous MASM) sous Dev-C++ ?

BruNews

Administrateur CodeS-SourceS
Essaie en ajoutant un 'C':

myfnt proc C public arg1:dword
    add arg1, 10
    mov eax, arg1
myfnt endp

pas certain que 'public' soit utile.

ciao...
BruNews, MVP VC++
mercredi 6 avril 2005 à 17:06:13 | Re : Utiliser une fonction ASM compilée (sous MASM) sous Dev-C++ ?

skirby

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 :
  • de la déclaration de ma fonction en assembleur
  • de la façon dont j'appelle ma fonction depuis Dev-C++
  • d'un problème de paramètrage de Dev-C++
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)
mercredi 6 avril 2005 à 17:17:01 | Re : Utiliser une fonction ASM compilée (sous MASM) sous Dev-C++ ?

BruNews

Administrateur CodeS-SourceS
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.

ciao...
BruNews, MVP VC++
mercredi 6 avril 2005 à 17:44:18 | Re : Utiliser une fonction ASM compilée (sous MASM) sous Dev-C++ ?

skirby

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 ?
mercredi 6 avril 2005 à 17:55:01 | Re : Utiliser une fonction ASM compilée (sous MASM) sous Dev-C++ ?

BruNews

Administrateur CodeS-SourceS
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.

ciao...
BruNews, MVP VC++
mercredi 6 avril 2005 à 17:57:26 | Re : Utiliser une fonction ASM compilée (sous MASM) sous Dev-C++ ?

BruNews

Administrateur CodeS-SourceS
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.

ciao...
BruNews, MVP VC++
mercredi 6 avril 2005 à 20:07:35 | Re : Utiliser une fonction ASM compilée (sous MASM) sous Dev-C++ ?

skirby

J'ai réussi

Voici le code assembleur

my_fnt proc stdcall public arg1:dword
    add arg1, 10
    mov eax, arg1
    ret
my_fnt endp

et la déclaration dans le fichier C

extern "C" long STDCALL my_fnt(long);

Merci BruNews pour ton aide



Cette discussion est classée dans : code, wparam, asm, masm, myfnt


Répondre à ce message

Sujets en rapport avec ce message

inclusion de code asm sous devcpp [ par obasileus ] est ce ke kkun connait la typographie ki permet d'inclure du code assembleur sous le compilateur dev c++ ? C++ et asm [ par Chouchou182 ] BonjourVoilà un extrait : __asm{ mov ah, 00h mov al, 13h int 10h }Aucun bug a la compilationAcess violation code asm en c++ [ par HCJarod ] Salut,j'ai un petit problème sous Borland C++. Lorsque j'insère de code assembleur dans ma source par asm{..} et que je veux faire du pas à pas, il y pb pour hooké la touche entrer et espace [ par BsEtZeOpLhD ] Salut.Voila mon problème : j'essaye d'empecher l'utilisation des touches entrer et espace dans toutes les fenêtre windows.J'ai essayer de faire un hoo ASM et C++ [ par rastafari ] Pourquoi est-ce que ce programme génère une erreur à l'éxécution?int f(){ __asm</font color="#0000F Combo des touches dans un Hook [ par bdkiller ] Salut,encore moi avec les Hooks xDJ'arrive à mettre les hook en place, ca marche, sauf que je sais pas comment faire pour intercepter la combinaison d [HOOK]Encore le meme probleme.. [ par bdkiller ] Salut,Bon, après pas mal d'heures passés là-dessus, j'ai la DLL qui se compile sans erreurs, l'appli principale qui se compile sans erreurs également! optimisation d un code asm [ par sajid_morad ] salut tout le monde j aimerai bien savoir comment optimiser un code en assembleur ( le temps d execution des instruction le plus optimal ), et esqu il release vs debug en asm !!!! [ par sajid_morad ] salut tout le monde, voulant optimisé une boucle qui prend un peu de temps je l ai réécri en asm, en effet j ai pu optimisé le temps en optimisant le Code ASM dans projet CPP [ par FearBlue ] Slt a tous !!!$Je dev une appli en Cpp et je desire inclure de L'asm dedansJe compile avec gccVoici ce que je fais et ca fait grosse erreur :(:(:(:(  


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,702 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales