Comment faire un sleep en assembleur ?

Yakurena Messages postés 32 Date d'inscription   Statut Membre -  
BugMaker Messages postés 34 Statut Membre -
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 generer 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.

3 réponses

  1. iamyan38
     
    Tempo en assembleur (HC12) :

    Une tempo = des boucles qui font rien ;)

    Voici en théorie une tempo d'une seconde (appel : TMP) :

    TMP LDX #$38E ; tempo 1s = 1000($38E) x 1ms
    AT NOP
    LDAB #$32
    AT1 LDAA #$77
    AT2 DECA
    BNE AT2
    NOP
    DECB
    BNE AT1
    DEX
    BNE AT
    RTS

    Sinon j'ai bricolé une tempo d'environ 0.6 de sec pour HC12. Il faut donc adapter le nombre de fois où l'on appelle cette fonction.

    tempo PSHY
    PSHB
    LDY #$FFFF
    bcl2 LDAB #$10
    bcl1 DECB
    BNE bcl1
    DEY
    BNE bcl2
    PULB
    PULY
    RTS
    1
  2. blux Messages postés 2065 Date d'inscription   Statut Modérateur Dernière intervention   3 455
     
    Salut,

    Une boucle avec NOP, ça irait ?
    0
  3. blux Messages postés 2065 Date d'inscription   Statut Modérateur Dernière intervention   3 455
     
    Pour compléter :

    NOP = No OPeration.

    Assembly mnemonic for the instruction with opcode 0x90 (in Intel and compatible CPUs).

    Intel Arch. Software Dev's Manual wrote:
    Description

    Performs no operation. This instruction is a one-byte instruction that takes up space in the
    instruction stream but does not affect the machine context, except the EIP register.
    The NOP instruction is an alias mnemonic for the XCHG (E)AX, (E)AX instruction.

    Flags Affected
    None.

    Exceptions (All Operating Modes)
    None.

    Et en MIPS, l'instruction est NOOP...
    0
    1. BugMaker Messages postés 34 Statut Membre 7
       
      Salut,
      En assembleur 8080 (intel compatible Z80, un vieux truc ;-)
      c'était 0x00 le NOP
      A+
      phil
      0