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 16-bits Assembleur Discussion :

Arrêter une temporisation en appuyant sur une touche


Sujet :

x86 16-bits Assembleur

  1. #1
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 242
    Par défaut Arrêter une temporisation en appuyant sur une touche
    Bonjour, je réalise en ce moment un projet en Assembleur. Mon programme est en mode graphique. A l'intérieur, j'ai une boucle (pour le moment infini), contenant une procedure de temporisation (procedure qui fait passer le temps volontairement).
    Mon but est de pouvoir sortir de ma boucle dès que l'utilisateur a appuyé sur la touche 'q' du clavier.
    Le probleme est que si j'utilise l'interruption habituelle pour lire un caractère, le programme attend que je tape un caractere et n'execute pas ma temporisation ; je ne peux donc pas faire comme ceci.
    Connaitriez-vous un moyen qui permettrait de résoudre ce problème?

  2. #2
    Membre chevronné Avatar de dapounet
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 469
    Par défaut
    Essaie ça :
    Edit : il faut regarder le zero flag (JZ/JNZ) pour savoir si le buffer est vide ou pas.

  3. #3
    Membre très actif
    Avatar de edfed
    Profil pro
    être humain
    Inscrit en
    Décembre 2007
    Messages
    476
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : être humain

    Informations forums :
    Inscription : Décembre 2007
    Messages : 476
    Billets dans le blog
    1
    Par défaut A defaut de poulet, on mange des poules
    bein, sous dos, c'est facile, il faut:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    boucle:
              .....
     
              mov ax,0C00H  ;effacer le buffer clavier, pour eviter les bips
              int 21h
              in al, 60h         
              cmp al,key.q     ;bein, pas trop besoin de commentaires
              jne boucle        
    ;;        suite du programme
    ou alors, utiliser une int9 differente, la creer soit meme, specialement pour le programme, et donc, peut etre optimisée pour fournir une flexibilité maximum
    un peu comme celle que j'ai codé..

  4. #4
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 242
    Par défaut
    Merci de vos réponses !
    La solution de dapounet fonctionne très bien (merci !) ,a part que je ne vérifie que c'est bien sur la touche que l'utilisateur a appuyé (il faut surement rajouté un test).
    L'autre possibilité est aussi intéressante, mais je ne connais pas la commande "in". Faute de frappe ou non? Et sinon, que fait -elle?
    Merci de m'avoir aidé en tout cas

  5. #5
    Membre chevronné Avatar de dapounet
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 469
    Par défaut
    Il y a un espace d'adressage dédié aux entrées/sorties, et IN permet de lire un ou plusieurs octets à partir d'un port déterminé par son adresse. La fonction du BIOS que tu appelles avec INT 16h va à un moment ou un autre accéder au clavier comme ça.
    En fait je viens de me rendre compte qu'il y a une fonction DOS pour ça, voilà un exemple d'utilisation :

    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
    nouvelle_lecture:
            mov ah, 0Bh
            int 21h
            test al, al
     
    ; si aucun caractère lu on reteste l'état du buffer
            jz nouvelle_lecture
     
    ; On retire le caractère du buffer
            mov ah, 07h
            int 21h
     
    ; On l'affiche
            mov ah, 02h
            mov dl, al
            int 21h
     
    ; On attend que l'utilisateur appuie sur une touche avant de quitter
            mov ah, 07h
            int 21h
     
    ; Fin du programme
            mov ax, 4C00h
            int 21h

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Valider une sélection en appuyant sur la touche entrée
    Par canadianfanatic dans le forum Interfaces Graphiques
    Réponses: 8
    Dernier message: 29/08/2011, 14h16
  2. Réponses: 3
    Dernier message: 18/05/2010, 15h37
  3. Réponses: 30
    Dernier message: 19/03/2010, 00h06
  4. Requete SUM sur une table avec critère sur une autre
    Par wail00 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 21/05/2007, 16h58
  5. [Access] Requête sur une table et tri sur une autre
    Par VooDooS dans le forum Langage SQL
    Réponses: 2
    Dernier message: 30/08/2006, 15h07

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