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
    Futur Membre du Club
    Inscrit en
    Mars 2009
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 15
    Points : 8
    Points
    8
    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 habitué
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 123
    Points : 174
    Points
    174
    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 sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 448
    Points
    28 448
    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.

  5. #5
    Futur Membre du Club
    Inscrit en
    Mars 2009
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 15
    Points : 8
    Points
    8
    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 actif

    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
    Points : 203
    Points
    203
    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 561
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

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

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 561
    Points : 3 951
    Points
    3 951
    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

  8. #8
    Futur Membre du Club
    Inscrit en
    Mars 2009
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 15
    Points : 8
    Points
    8
    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 régulier Avatar de khaled-benloucif
    Inscrit en
    Octobre 2008
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Octobre 2008
    Messages : 74
    Points : 77
    Points
    77
    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
    Futur Membre du Club
    Inscrit en
    Mars 2009
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 15
    Points : 8
    Points
    8
    Par défaut
    salut
    Je veux afficher du texte sur l'écran, en utilisant l'assembleur.
    Merci d'avance.

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 74
    Points : 77
    Points
    77
    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
    Futur Membre du Club
    Inscrit en
    Mars 2009
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 15
    Points : 8
    Points
    8
    Par défaut
    Salut
    je veux veux dessiner du texte sur l'écran.
    Merci de votre patience.

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 74
    Points : 77
    Points
    77
    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
    Futur Membre du Club
    Inscrit en
    Mars 2009
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 15
    Points : 8
    Points
    8
    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 561
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

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

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 561
    Points : 3 951
    Points
    3 951
    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

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

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 448
    Points
    28 448
    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

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

  18. #18
    Futur Membre du Club
    Inscrit en
    Mars 2009
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 15
    Points : 8
    Points
    8
    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 éclairé
    Homme Profil pro
    ingénieur financier
    Inscrit en
    Septembre 2003
    Messages
    510
    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 : 510
    Points : 837
    Points
    837
    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 sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 448
    Points
    28 448
    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...

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