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

Programmation d'OS Assembleur Discussion :

[OS Perso] Récupérer une chaîne de caractères


Sujet :

Programmation d'OS Assembleur

  1. #1
    Membre du Club
    Inscrit en
    Octobre 2004
    Messages
    138
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 138
    Points : 45
    Points
    45
    Par défaut [OS Perso] Récupérer une chaîne de caractères
    Bonjour,
    Voilà j'ai fait un miniOs avec un driver clavier.
    Lorsque je tape sur le clavier il n'y a pas de problème, cela s'affiche à l'écran.
    Maintenant, je voudrais afficher et aussi enregistrer dans un buffer ce que je tape pour un traitement lors de l'appuie de la touche entrée

    Donc j'ai declaré
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Compteur: dw 0
    msgRecup:
    (...)
    mon caractère se trouve en ebp+8

    je le mets dans al pour l'affichage
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    mov byte al,[ebp+8]
    Mais mon probleme c'est pour mettre les caractères dans msgRecup???

    Lorsque j'appuie sur entrée, je veux afficher la chaîne de caractères.
    Si je declare lorsque j'appuie sur entrée mon traitement pour l'affichage fonctionne


    Merci

  2. #2
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 938
    Points : 59 416
    Points
    59 416
    Billets dans le blog
    2
    Par défaut
    Bonjour !

    Tu pourrais enregistrer le caractère dans le buffer au moment de l'affichage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    mov al,[ebp+8]
    mov [msgRecup+compteur],al
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  3. #3
    Membre du Club
    Inscrit en
    Octobre 2004
    Messages
    138
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 138
    Points : 45
    Points
    45
    Par défaut
    Oui c'est ce que j'ai fait hier et je retester aujourd'hui mais j'ai une erreur de fou

    beroset-p-637 invalid effective adresse

    Peut etre ai je mal declarer msgRecup comment le declarer correctement je l'ai declarer ainsi


    Merci

  4. #4
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 938
    Points : 59 416
    Points
    59 416
    Billets dans le blog
    2
    Par défaut
    Par exemple, pour un buffer de 127 caractères :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    msgRecup: db 128 dup(0)
    (je ne suis pas sûr du dup, c'est peut-être times - je suis au boulot )
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  5. #5
    Membre du Club
    Inscrit en
    Octobre 2004
    Messages
    138
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 138
    Points : 45
    Points
    45
    Par défaut
    J'ai essayé avec dup et en remplanceant le dup par times mais j'ai

    comma excpected after operand 1 pour la declaration et meme erreur que tout a l'heure pour l'autre ligne

  6. #6
    Membre du Club
    Inscrit en
    Octobre 2004
    Messages
    138
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 138
    Points : 45
    Points
    45
    Par défaut
    j'ai aussi essayer ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    msgRecup:	times 256 dw 0
    Pas d'erreur a la declaration mais toujours mon beroset erreur

  7. #7
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 938
    Points : 59 416
    Points
    59 416
    Billets dans le blog
    2
    Par défaut
    En fait j'ai vraiment écrit à la sauvette et c'était n'importe quoi.
    Je pense que ceci est mieux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    msgRecup:   times 256 db 0
     
    mov al,[ebp+8] 
    mov bx,msgRecup
    mov [bx+compteur],al
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  8. #8
    Membre du Club
    Inscrit en
    Octobre 2004
    Messages
    138
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 138
    Points : 45
    Points
    45
    Par défaut
    Oui merci ca compile
    mais ensuite pour le mettre dans msgRecup faut faire quoi je maitrise pas encore l'asm
    Thanks

  9. #9
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 938
    Points : 59 416
    Points
    59 416
    Billets dans le blog
    2
    Par défaut
    Si tu incrémentes convenablement la variable compteur, le code proposé remplit msgRecup au fur et à mesure de l'affichage à l'écran.
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  10. #10
    Membre du Club
    Inscrit en
    Octobre 2004
    Messages
    138
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 138
    Points : 45
    Points
    45
    Par défaut
    Moi je comprends qu'il remplit bx mais je ne vois pas ou on remet le contenu de bx dans msgRecup
    Si tu peux m'expliquer car j'ai pas tout ppigé la :
    Merci

  11. #11
    Membre régulier
    Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juillet 2004
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 89
    Points : 106
    Points
    106
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    msgRecup:   times 256 db 0
     
    mov al,[ebp+8]
    mov bx,msgRecup
    mov [bx+compteur],al
    C'est simple, bx contient l'adresse mémoire de msgRecup (2eme mov). La dernière ligne place le caractère à l'adresse de msgRecup+compteur

  12. #12
    Membre du Club
    Inscrit en
    Octobre 2004
    Messages
    138
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 138
    Points : 45
    Points
    45
    Par défaut
    Ok
    J'ai essaye ca compile mais ca ne fonctionne pas
    Bien entendu j'incremente ensuite mon compteur

    Quand j'appelle ma procedure d'affichage de msg rien ne s'affiche

  13. #13
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 938
    Points : 59 416
    Points
    59 416
    Billets dans le blog
    2
    Par défaut
    Si le code n'est pas trop long, tu peux peut-être le poster ?
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  14. #14
    Membre du Club
    Inscrit en
    Octobre 2004
    Messages
    138
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 138
    Points : 45
    Points
    45
    Par défaut
    C'est le code utilisé pour faire l'affichage des caracteres il fonctionne
    Je tiens a preciser que si je met ds msgRecup un truc genre 'test' quand il est appelé a etre affiche il m'affiche test

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    msgRecup:   times 256 dw 0
    compteur: dw 0 
    (...)
     
    afficher: 
     
    	mov byte al,[ebp+8]	;On recupere le caractere dans al 
    	cmp al,0xA		;On regarde si c'est le caractere retour chariot 
    	jz cr_nl		;Si oui on saute vers cr_nl 
     
           mov bx,msgRecup
           mov [bx+compteur],al 
           inc word [compteur]
     
    	jmp caractere		;On saute vers caractere 
     
    cr_nl:				;Retour chariot et nouvelle ligne 
    	mov byte [posY],79		;On place le curseur en fin de ligne 
     
            mov eax,2
            mov esi,msgRecup
            int 0x80
     
            jmp fin_afficher 
     
    caractere:			 
    	mov byte [es:edi],al	;On copie le caractere 
    	inc edi 
     
    	mov byte al,[ds:Attr] 
    	mov byte [es:edi],al	;Et son attribut. 
     
    	inc edi 
     
    (...)

  15. #15
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 938
    Points : 59 416
    Points
    59 416
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par log2n
    Je tiens a preciser que si je met ds msgRecup un truc genre 'test' quand il est appelé a etre affiche il m'affiche test
    Dans ce cas, es-tu bien sûr que le caractère à récupérer est stocké dans la pile à [ebp+8] ?
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  16. #16
    Membre du Club
    Inscrit en
    Octobre 2004
    Messages
    138
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 138
    Points : 45
    Points
    45
    Par défaut
    Certains vu que quand je tape sur le clavier ca s'affiche à l'écran

  17. #17
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 938
    Points : 59 416
    Points
    59 416
    Billets dans le blog
    2
    Par défaut
    Manifestement, [bx+compteur] ne contient pas l'adresse de la chaîne.
    Mais peut-être bien [ebx+compteur] (avec compteur variable 32 bits) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    compteur: dd 0
     
    ...
    mov ebx,msgRecup 
    mov [ebx+compteur],al
    ...
    Si ce n'est pas ça... ben je ne vois pas.
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  18. #18
    Membre du Club
    Inscrit en
    Octobre 2004
    Messages
    138
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 138
    Points : 45
    Points
    45
    Par défaut
    Marche pas non plus

  19. #19
    Membre du Club
    Inscrit en
    Octobre 2004
    Messages
    138
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 138
    Points : 45
    Points
    45
    Par défaut Récupérer une chaîne de caractères V2
    Je n'ai toujours pas trouvé de réponse, je n'arrive toujours pas à récupérer ma chaîne de caractères. Le développement de cet OS est pour mon projet; j'ai demandé à mes profs mais personne n'a su me répondre. Je suis trés embêté car sans ça je suis bloqué et je ne peux donc plus continuer..
    Je vous remercie de votre aide

  20. #20
    Membre chevronné
    Avatar de Forthman
    Homme Profil pro
    conception mécanique
    Inscrit en
    Janvier 2005
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 702
    Points : 1 905
    Points
    1 905
    Par défaut
    Salut,

    J'ai ton code sous les yeux (sur l'ecran j'ai jamais pu lire un code )
    Es-tu sur que le code de la touche Enter soit bien 0Ah ?
    pour moi ce serait plutot 0Dh

    pour le reste du code, il faudrait savoir avec quel assembleur tu travaille
    j'imagine que ES est bien initialise avec B800h ...
    enfin, si ca affiche mais que ca ne prend pas la touche enter ...

    a+ Francois

Discussions similaires

  1. Récupérer une chaîne de caractère
    Par romain_t dans le forum C
    Réponses: 8
    Dernier message: 23/10/2010, 23h01
  2. Réponses: 3
    Dernier message: 03/11/2009, 07h19
  3. sql récupérer une chaîne de caractères dans un champ
    Par ritchie23 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 07/05/2009, 12h12
  4. comment récupérer une chaîne de caractères
    Par the_crow_man dans le forum C
    Réponses: 8
    Dernier message: 04/07/2008, 15h39
  5. Réponses: 3
    Dernier message: 27/05/2008, 20h05

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