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

Autres architectures Assembleur Discussion :

[MIPS] Comment faire un sleep en assembleur ?


Sujet :

Autres architectures Assembleur

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 23
    Points : 25
    Points
    25
    Par défaut [MIPS] Comment faire un sleep en assembleur ?
    Bonsoir,
    J'aimerais faire un programme en assembleur MIPS permettant de synchroniser la saisie de caractères au clavier par l'utilisateur et leur affichage à l'écran. Le problème est que le processeur est tellement rapide qu'il affiche toujours instantanément les caractères à l'écran, dès qu'ils sont saisis au clavier.
    J'ai donc pensé que le seul moyen de permettre à l'utilisateur de "prendre de l'avance" est d'endormir le processeur pendant un temps donné. Le problème pour cela est que je n'arrive pas à trouver l'instruction en assembleur pour faire cela (l'équivalent de "sleep" dans les langages de programmation). J'ai essayé de générer un programme en assembleur à partir de la compilation d'un programme en C contenant juste l'instruction "sleep", mais ça me donne un code avec des instruction très bizarres et qui ne marchent pas à l'execution.
    J'aimerais donc savoir si quelqu'un connaîtrait un code en assembleur permettant de le faire.
    Merci d'avance.

  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 417
    Points
    59 417
    Billets dans le blog
    2
    Par défaut
    Bonjour !

    Une recherche avancée sur le forum avec le mot clé Delay devrait te fournir des pistes de réponse.
    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 confirmé
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Mars 2006
    Messages
    400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Mars 2006
    Messages : 400
    Points : 562
    Points
    562
    Par défaut
    Pour ma part, j'utilise le code suivant pour faire un Sleep.

    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
    ;------------------------------------------------
    ram16_Delay PROC
    ; Synopsis: Create an n-millisecond delay
    ; Receives: EAX = milliseconds
    ;------------------------------------------------
        pushad
        mov ebx,1000000
        mul ebx
        mov ebx,15085
        div ebx
        mov ecx,eax
        and ecx,ecx
        jz fin
        in al,61h
        and al,10h
        mov ah,al
      @@:
        in al,61h
        and al,10h
        cmp al,ah
        je @B
        mov ah,al
        dec ecx
        jnz @B
      fin:
        popad
        ret
    ram16_Delay ENDP
    Il fonctionne sur le principe que l'IRQ 0 (ou int 8, Timer System) est générée environ 18,2 fois par seconde.
    L'IRQ 0 est générée tout les 65536 signaux émis par le timer.
    A chaque signal, le bit 4 (LSB=0,MSB=7) du port 61h est inversé.

    On peut donc mesuer le temps en comtant le nombre d'inversion de ce bit.

Discussions similaires

  1. Comment faire un sleep de moins d'une seconde ?
    Par djibril dans le forum Téléchargez
    Réponses: 0
    Dernier message: 31/05/2011, 01h14
  2. Comment faire un Sleep dans une boucle PL/SQL
    Par foster06 dans le forum PL/SQL
    Réponses: 3
    Dernier message: 01/02/2008, 18h59
  3. Réponses: 8
    Dernier message: 18/09/2002, 03h20
  4. Comment faire pour mettre l'ecran en veille ?
    Par March' dans le forum MFC
    Réponses: 6
    Dernier message: 29/08/2002, 14h25
  5. Comment faire pour créer un bitmap
    Par GliGli dans le forum C++Builder
    Réponses: 2
    Dernier message: 24/04/2002, 15h41

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