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

Langage Delphi Discussion :

Problème avec l'assembleur


Sujet :

Langage Delphi

  1. #1
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 15
    Par défaut Problème avec l'assembleur
    Salut
    Je débute sous l'environnement Delphi 5,et je veux utiliser l'assembleur dedans.
    J'ai déjà essayer de faire ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    Asm
    mov ah, 2
    mov dl, 'a'
    int 21h
    end;
    end;
    end.
    Mais rien du tout , et il m'affiche un message d'erreur.

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 132
    Par défaut
    D'après ton code, tu veux utiliser une fonction du DOS sous Windows...
    Imprimer (AH = 2) le caractère 'a' (en DL)
    Ouille...
    Âïe...

  3. #3
    Invité1
    Invité(e)
    Par défaut
    bonjour

    si tu es sous Windows XP ça ne marchera pas

    meme moi j'ai essayé un code assembleur et rien

    bonne chance

  4. #4
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    Citation Envoyé par samy larson Voir le message
    bonjour

    si tu es sous Windows XP ça ne marchera pas

    meme moi j'ai essayé un code assembleur et rien

    bonne chance
    sous XP ou sous n'importe quoi d'autre, Delphi compile du code Intel en mode protégé...l'interruption 21h n'a pas de sens dans ce contexte.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  5. #5
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 15
    Par défaut
    Salut
    Mais si int 21 h ça na rien a avoir,comment puis je afficher un texte sur l'écran.
    Merci d'avance.

  6. #6
    Membre éprouvé

    Homme Profil pro
    Inscrit en
    Mars 2009
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2009
    Messages : 128
    Par défaut
    L'appel des interruptions du Bios ou du Dos, c'était bien du temps du... Dos et de Windows avant XP quand il y avait encore un Dos exploitable.

    Alors pour écrire du texte : les routines Delphi ne suffisent pas ?

  7. #7
    Membre Expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 567
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 567
    Par défaut
    Salut

    J'ai l'impression que tu n'as pas fait de programmation depuis un certain temps ou tu as lu des docs disons âgées... ou enfin tu reprends une application DOS à porter sous Delphi (dans ce cas bon courage, tu n'as plus qu'à tout réécrire).

    Pour afficher un message à l'écran tu peux essayer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      ShowMessage('Coucou !');
    C'est d'un intérêt assez limité. Il vaudrait mieux savoir ce que tu veux vraiment faire.

    Cdlt

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  8. #8
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 15
    Par défaut
    Salut
    Merci e-ric, mais je veux intégrer un code en assembleur qui me permet d'écrire un message a l'écran et ceci dans le code Delphi.
    Merci d'avance.

  9. #9
    Membre éclairé Avatar de khaled-benloucif
    Inscrit en
    Octobre 2008
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Octobre 2008
    Messages : 74
    Par défaut
    si tu peux préciser un peut tu désigne quoi par le terme "message"?
    tu veux afficher: une boite de dialogue? du texte sur l'écran? message sous invite de commande?

  10. #10
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 15
    Par défaut
    salut
    Je veux afficher du texte sur l'écran, en utilisant l'assembleur.
    Merci d'avance.

  11. #11
    Membre éclairé Avatar de khaled-benloucif
    Inscrit en
    Octobre 2008
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Octobre 2008
    Messages : 74
    Par défaut
    La réponse n'est pas claire. tu veux dessiner du texte sur l'écran? sur le bureau par exemple? ou tu veux dessiner du texte sur ta fiche?

  12. #12
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 15
    Par défaut
    Salut
    je veux veux dessiner du texte sur l'écran.
    Merci de votre patience.

  13. #13
    Membre éclairé Avatar de khaled-benloucif
    Inscrit en
    Octobre 2008
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Octobre 2008
    Messages : 74
    Par défaut
    je vois mal comment le faire en assembleur, mais en revanche en passant par la GDI possible (utiliser une variable de type TCanvas et GetWindowDC) par exemple!

  14. #14
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 15
    Par défaut
    Salut
    Merci khaled-benloucif,je cherche le code en assembleur.

  15. #15
    Membre Expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 567
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 567
    Par défaut
    Salut

    En fait ce que tu demande n'est pas coutumier avec Delphi. L'environnement de Windows impose pour afficher à l'écran de passer par des fonctions déjà définies (les API), qui rendent le travail plus facile car elle sont indépendantes du matériel.

    Tu peux sans doute appeler ces API depuis des routines en assembleur mais cela ne t'apportera pas grand chose. L'usage de l'assembleur est en général réservé à des aspects plus "calcultatoires".

    En ce qui concerne le code assembleur, je n'en ai pas fait depuis la fac et cela commence à dater. En tout cas, je n'en ai pas fait avec Delphi.

    Cdlt

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  16. #16
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    Citation Envoyé par crazyinf Voir le message
    salut
    Je veux afficher du texte sur l'écran, en utilisant l'assembleur.
    Merci d'avance.
    il va falloir te montre un peu plus imaginatif

    Etape 1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      MessageBox(0, 'Hello', 'Titre', 0);
    end;
    Etape 2: en mode debug un break point sur le ShowMessage et on affiche la fenêtre CPU
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     push $00
     push $0043e348
     push $0043e350
     push $^00
     call MessageBox
    Etape 3 : reproduire le code en ASM
    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
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
    //  MessageBox(0, 'Hello', 'Titre', 0);
      asm
        push 0
        push OFFSET @Title
        push OFFSET @Msg
        push 0
        call MessageBox
        jmp @Done
        @Msg:
         db 'Hello',0
        @Title:
         db 'Titre',0
        @Done:
      end
    end;
    Nb: et oui, sous Windows on invoque l'API Windows, pas les interruptions
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  17. #17
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 15
    Par défaut
    Salut
    Merci Paul TOTH, je vais essayer votre solution.

  18. #18
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 15
    Par défaut
    Salut
    Merci Paul TOTH, ça marche ,mais j'ai un autre problème,comment utiliser
    l'API windows pour réaliser le test de la souris int 33h et du clavier int 16h,
    car je veux tester s'il y a une frappe au clavier ou non, ou bien un clic de souris.
    je cherche aussi de la documentation sur les API sous Delphi, est ce que vous connaissez quelques liens utile.
    Merci d'avance.

  19. #19
    Fxg
    Fxg est déconnecté
    Membre émérite
    Homme Profil pro
    ingénieur financier
    Inscrit en
    Septembre 2003
    Messages
    513
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : ingénieur financier

    Informations forums :
    Inscription : Septembre 2003
    Messages : 513
    Par défaut
    En utilisant l'évènement OnKeyDown par exemple.

    SI je peux me permettre de te donner un petit conseil, replonge toi un peu dans des doc pour te mettre dans l'espris de la programmation en delphi sous Windows.
    Tu trouveras ton bonheur sur le site

  20. #20
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    Citation Envoyé par crazyinf Voir le message
    Salut
    Merci Paul TOTH, ça marche ,mais j'ai un autre problème,comment utiliser
    l'API windows pour réaliser le test de la souris int 33h et du clavier int 16h,
    car je veux tester s'il y a une frappe au clavier ou non, ou bien un clic de souris.
    je cherche aussi de la documentation sur les API sous Delphi, est ce que vous connaissez quelques liens utile.
    Merci d'avance.
    STOP ! Delphi permet de programmer SOUS WINDOWS, pas sous DOS.

    Si tu veux jouer avec l'API DOS tu peux toujours télécharger Turbo Pascal et reprendre la bonne vieille programmation par interruption.

    Sous Windows, l'interaction avec le système d'exploitation se fait via des appels à des fonctions chargées dynamiquement par LoadLibrary/GetProcAddress ou statiquement dans les headers du .EXE

    Souris -> GetCursorPos
    Clavier -> GetKeyboardState

    Toutes ces fonctions sont définies dans Windows.pas (liaison statique), tu peux faire F1 sur une des fonction pour obtenir l'aide en ligne du SDK Microsoft.

    Ceci dit, la programmation sous Windows ne peut pas se faire sans la gestion des événements (équivalent des IRQ du DOS) qui sont déclenchés par l'OS pour indiquer un déplacement de souris, une nécessaire de redessiner l'écran, etc...etc...
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

Discussions similaires

  1. Réponses: 1
    Dernier message: 12/12/2011, 10h42
  2. Problème avec assembleur dans code C++
    Par wishmerhill dans le forum C++
    Réponses: 0
    Dernier message: 05/03/2008, 11h38
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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