IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

x86 32-bits / 64-bits Assembleur Discussion :

[Winsows + Tasm] call fonctions C


Sujet :

x86 32-bits / 64-bits Assembleur

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 198
    Points : 106
    Points
    106
    Par défaut [Winsows + Tasm] call fonctions C
    Bonjour,

    J'utilise Tasm et j'aimerais pouvoir utiliser des fonctions du C.
    J'ai écris un programme simple utilisant printf mais lorsque je crée le fichier objet j'obtiens le message d'erreur suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    **Error** test.asm(63) Undefined symbol: PRINTF

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    .MODEL small
    .STACK 100h
    .DATA
    .CODE
     
    main PROC
     
      mov   ax,@data
      mov   ds,ax
     
    	mov ax, 'Hello World!'
    	call printf
     
      mov   ax,4C00h
      int   21h
    main  ENDP
    END main

    Que faire ?

    Merci d'avance

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 198
    Points : 106
    Points
    106
    Par défaut
    En rajoutant en haut de mon programme

    Cela crée le fichier objet mais ne link pas ... Comment faire ?

    Merci

  3. #3
    Membre actif Avatar de golden boy
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2010
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2010
    Messages : 120
    Points : 230
    Points
    230
    Par défaut
    En décompilant des programmes, j'ai toujours vu des symboles underscore devant le nom de ces fonctions (_printf, _malloc, _scanf). C'est peut-être spécifique à la syntaxe de GNU as, mais tu peux toujours essayer d'en mettre un et voir ce qu'il en est.


  4. #4
    Membre émérite
    Avatar de supersnail
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 719
    Points : 2 793
    Points
    2 793
    Par défaut
    Bonjour,

    Tout d'abord, les programmes que tu compiles sont pour l'instant en 16 bits (vu que c'est un exécutable MS-DOS). Or, pour pouvoir utiliser printf, il te faut développer en 32 bits et utiliser le format PE (exécutable windows). Ensuite, tu ne peux pas générer de PEs d'un coup de baguette magique. Il te faut d'abord compiler ton code assembleur en ce qu'on appelle un "fichier objet" comme en C, puis linker ce fichier objet (par exemple alink).

    Ensuite, il faut savoir que les fonctions standard (printf, scanf, malloc, etc...) ne nettoient pas la pile: il faudra le faire toi-même.

    Edit: tu peux nous montrer ton code ainsi que les option de compilation/linkage que tu as faites?
    Toute question technique envoyée en MP ira directement à la poubelle

    Un code ne marchera jamais, il n'a jamais reçu la capacité de se déplacer.
    Inutile donc de dire "ça marche pas", donnez plutôt des informations précises afin de mieux pouvoir vous aider.


    Grand gourou de la -attitude

Discussions similaires

  1. [TASM][Débutant] Fonction 0AH de l'interruption 21h
    Par Punkfloyd1967 dans le forum x86 16-bits
    Réponses: 1
    Dernier message: 13/04/2008, 14h08
  2. qu'elle est l'utilité de la fonction Call
    Par mennix dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 31/05/2007, 19h31
  3. [DOS] probléme d'utilisation de la fonction CALL
    Par Benjamin_es dans le forum Scripts/Batch
    Réponses: 3
    Dernier message: 19/03/2007, 16h01
  4. Réponses: 2
    Dernier message: 14/12/2006, 22h47
  5. Réponses: 3
    Dernier message: 05/11/2006, 13h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo