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 :

Traitement de mes entrées clavier


Sujet :

x86 32-bits / 64-bits Assembleur

  1. #1
    Invité
    Invité(e)
    Par défaut Traitement de mes entrées clavier
    Bonjour a tous,
    J'aurais besoin de votre aide pour une fonction qui me parait simple mais que je n'arrive pas a faire fonctionner parfaitement.
    En effet je programme un mini OS, et j'ai donc besoin de traiter les entrées clavier pour un peu plus d'interractivité :p Chose plus ou moins faite (un driver qui converti le scan-code de la touche clavier en ascii puis qui l'affiche), mais maintenant j'aurais aimé pouvoir traiter ce qui a été précédement entré.
    Alors j'ai déclaré une chaine de 0xff octets de long, et mis en place cela :
    En gros cela donne ceci :

    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
     
    movzx eax, byte [esi]         ; eax contient le caractère maintenant
    cmp eax, 0x0a
    je .end_write                       ; La ligne 
     
    ; Ici on écrit dans le buffer car la ligne continue
    mov edi, buff_cmd               ; buff_cmd est la chaine a remplir
    add edi, [buff_cmd_size]      ; buff_cmd_size est la taille de la chaine
    stosb                                 ; J'écris
    add byte [buff_cmd_size], 1  
    jmp .end
     
    ; procèdure de fin de ligne:
    .end_write:
    movzx edx, byte [buff_cmd_size]
    cmp edx, 0                           ; Si c'est le 1er caractère de la ligne
    je .end                                 ; On finit
    mov edi, buff_cmd
    add edi, [buff_cmd_size]        ; Sinon j'écris le retour a la ligne dans le buffer
    stosb
    add edi, 1
    mov eax, 0x00
     
    stosb                                   ; Puis je mets NULL dans le caractère suivant
    mov esi, buff_cmd
    call print                               ; J'affiche la chaine
    mov byte [buff_cmd_size], 0   ; Et on repart pour une ligne
    jmp .end
    Je traite le fait que '\n' ne soit pas le seul caractère de la ligne sinon a l'affichage on sauterait 1 ligne.
    Mes soucis :
    -le code semble fonctionner sous Qemu mais pas sous VBox
    -Il ne fait que faire semblant de fonctionner, car si je fais bien attention et que je m'amuse a lui parler (en gros si j'écris autre chose que 'aaaaa' pour le tester, je me rends compte que des fois il saute des lignes, m'affiche des caractères a la ligne suivante (donc apres le retour a la ligne alors que je suis
    censé écrire NULL après chaque '\n'...) et des erreures de ce genre.

    Le fait que le code semble fonctionner puis se mette a planter me frustre, c'est pour cela que je poste ici, car ne croyez pas que j'ai pas cherché, j'ai meme écrit un algo en francais pour chercher l'erreure, mais je ne suis que débutant ça me passe sous le nez, du moins j'espere que c'est un soucis de code et pas d'algo.

    Je vous en serait reconnaissant de m'éclairer, si besoin je peux poster mon algo en version francaise. C'est que je suis de mon téléphone pour avoir internet et c'était déja un supplice d'écrire tout cela. Merci de m'avoir lu.

    Édit : mince alors... J'ai l'air bête maintenant que je mappercoit que stosb incrémente déjà edi... Histoire que mon topic ne serve pas a rien : toujours dans le cadre de la création d'un mini OS j'ai tout juste réussit a implémenter ma 1ère commande :p Du coups je pense sérieusement a un système de fichier et je me pose la question : est ce une bonne idée d'essayer d'implementer mon propre système de fichier(qui serait simple genre 1 répertoire root et c'est tout au début) ou est ce que cela meloignerait peut être de la réalité et vaut il mieu débuter sur du fat ou ext?
    Dernière modification par Invité ; 26/11/2011 à 04h39.

Discussions similaires

  1. [SWING] gérer les entrées clavier à un seul endroit
    Par Isher dans le forum AWT/Swing
    Réponses: 7
    Dernier message: 19/07/2006, 10h55
  2. Comment annuler une entrée clavier?
    Par doudine dans le forum AWT/Swing
    Réponses: 10
    Dernier message: 17/02/2006, 11h22
  3. [Débutant] console , entrée clavier
    Par maminova dans le forum Entrée/Sortie
    Réponses: 8
    Dernier message: 18/10/2005, 10h49
  4. [Entrée standard] Prendre les entrées clavier.
    Par Katyucha dans le forum Langage
    Réponses: 4
    Dernier message: 19/09/2005, 12h22
  5. Réponses: 3
    Dernier message: 04/02/2004, 18h35

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