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

Assembleur Discussion :

Programmer une pause brève


Sujet :

Assembleur

  1. #1
    Membre confirmé Avatar de NeoMan
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 171
    Par défaut Programmer une pause brève
    Bonjour à tous!

    J'aimerais savoir comment faire une pause très courte (de l'ordre du millième de seconde). Mon but est de faire une animation lors de l'apparition d'un écran de travail.

    Merci d'avance!

  2. #2
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 65
    Par défaut
    eh bien...

    une boucle, ou plusieurs boucles imbriquées, avec autant de NOP qu'il faut à l'intérieur pour faire la durée que tu veux ...

    oui mais, dépendant de la fréquence du processeur me diras tu.

    essaye alors le time stamp counter.

    Mnemonic: RDTSC
    Opcode : 0F 31
    Bug in : Poorly documented for Pentium Processor

    Function:
    RDTSC reads a Pentium internal 64 bit register which is being incremented
    from 0000 0000 0000 0000 at every CPU internal clockcycle. Note that this
    gives a clockcycle-accurate timer with a range of more than 8800 years at
    66 Mhz...

    The instruction places the counter in the EDX:EAX register pair.
    que tu ne trouveras que sur pentium et quelques autres processeurs ....



    je ne vois pas grand chose d'autre.


    golem
    +++

  3. #3
    Membre confirmé Avatar de NeoMan
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 171
    Par défaut
    Merci beaucoup pour l'info.
    Malheureusement c'est loin d'être une fonction commune à tous les processeurs et mon programme est destinée à être mis un ordinateur assez ancien (avec un processeur de 16bits)...

    Mais merci encore pour l'info elle est soigneusement notée dans un petit coin

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 92
    Par défaut
    push 1000d ; 1seconde
    call Sleep

  5. #5
    Membre confirmé Avatar de NeoMan
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 171
    Par défaut
    Il m'indique qu'il ne connais pas le Symbole 'Sleep'. Ca me paraissait logique mais je voulais quand même essayer...
    Soit mon processeur (ou compilateur, qui est TASM) ne rend pas possible ce code, soit tu as hormis de définir la procedure Sleep.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 92
    Par défaut
    Sous Masm elle foctionne super bien

    que veux tu que j'te dise ?


    Elle fait partie de Kernel32 si je ne me trompe pas.
    Un rapide EXP S t'en dira plus. @+

  7. #7
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Par défaut
    non c'est tout a fait normal qu'elle ne fonctionne pas... je ne sais plus je crois quil faut inclure kernell32.lib, et definir un prototype de fonction. Je me rappelle plsu comment on fauit avec tasm

  8. #8
    Membre confirmé Avatar de NeoMan
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 171
    Par défaut
    Oki Je prend note... Je crois savoir à qui je peux deander comment définir un prototype de fonction sous TASM, mais je ne le verrais que la semaine prochaine... La suite au prochain épisode..

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 92
    Par défaut
    Je pense pas que le problème vienne de là. Parce que les Prototypes ne servent qu'à utiliser la macro "Invoke".

    Par exemple on ne peut pas utiliser
    invoke ExitProcess, eax
    si le proto n'a pas été définit mais rien n'empêche
    Push eax
    Call ExitProcess

    Donc je doute que ça vienne de ça.


    Je me demande plutôt si Sleep n'appartiendrait pas à une des lib spécifiques à masm est non pas à une des DLL communes.

    Dans ce cas il faudrait que tu la récupère.

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 92
    Par défaut
    Je viens de vérifier avec SoftIce

    un EXP sleep me donne

    Kernel32:
    Sleep
    SleepEx

    donc je vois pas pourquoi un call Sleep ne fonctionnerait pas.

    ou alors ta version de Kernel ne possède pas cette fonction

    Essaies la même chose chez toi pour vérifier que cette fonction existe.

  11. #11
    Membre confirmé Avatar de NeoMan
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 171
    Par défaut
    Je regarderais ça ce soir (pas vraiment le temps de le faire maintenant )
    Mais je peut te dire que ma version de Kernel32.dll est : 5.1.2600.1106

    @ ce soir...

  12. #12
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Par défaut
    nop, Sleep appartiens a kernell32.lib. Par ailleur les prototypes ne servent pas qu'a l'utilisation de invoke. Sous MASM, il permettent d'importer les fonctions egalement. Sinon il y a des mots clés pour l'importation. Quoiqu'il en soit, il faut avertir le compilateur que le symbole Sleep est une fonction définie dans un autre module.

  13. #13
    Membre confirmé Avatar de NeoMan
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 171
    Par défaut
    Citation Envoyé par Blustuff
    [...] Par ailleur les prototypes ne servent pas qu'a l'utilisation de invoke. Sous MASM, il permettent d'importer les fonctions egalement. [...] Quoiqu'il en soit, il faut avertir le compilateur que le symbole Sleep est une fonction définie dans un autre module.
    Oki merci pour l'info
    Aah! Heu... en fait désolé de profiter un peu de votre patience , mais comment on fait sous TASM pour "avertir le compilateur" ?

    Merci pour votre patience

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 92
    Par défaut
    Citation Envoyé par Blustuff
    nop, Sleep appartiens a kernell32.lib
    C'est pas le problème. Un fichier *.lib et un fichier .dll c'est la même chose pratiquement. le lib est l'étape de création précédant le format dll (suffit d'utiliser link.exe pour qu'il associe les offsets pour chaque ligne d'instruction). donc on retrouve EXACTEMENT les même fonctions.
    D'ailleurs SoftIce ne s'y trompe pas.

    Son problème est ailleurs mais je vois pas trop où.

    A la rigueur pourquoi ne pas créer un Timer, c'est si simple.

  15. #15
    Membre confirmé
    Inscrit en
    Juin 2002
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 24
    Par défaut
    salut,

    il faut que tu déclares la fonction de cette manière
    ou
    je suis plus très sûr

    et ensuite selon le linker :
    si microsoft alors il faut que tu linke kernel32.lib
    si borland alors il faut que tu linke avec import32.lib

Discussions similaires

  1. Mettre une pause dans un programme
    Par PNL dans le forum Général Java
    Réponses: 12
    Dernier message: 28/01/2016, 01h54
  2. [FAQ] Comment programmer une pause dans le code autrement ?
    Par Invité dans le forum Vos Contributions VBScript
    Réponses: 0
    Dernier message: 18/08/2013, 22h07
  3. Réponses: 9
    Dernier message: 18/12/2009, 01h36
  4. [Quick Basic] Programmer une pause
    Par msteffen dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 04/01/2007, 22h30
  5. Faire une pause dans le programme
    Par shinobi dans le forum Access
    Réponses: 6
    Dernier message: 13/06/2005, 17h37

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