[ASM] Quitter le programme lorsque l'on appuie sur une touche

Quitter le programme lorsque l'on appuie sur une touche [ASM] - ASM - Programmation

Marsh Posté le 05-12-2004 à 13:45:17    

Bonjour.
Bon je suis debutant en asm, on a commence ca il y a 2 semaine ^^;
C'est de l assembleur 8086
 
Alors voila j'aimerai bien quitter mon programme des que l on appui sur la touche ESC par exemple. Donc j ai fait une boucle infini qui scan le port 60h (le clavier) et compare la valeur a 01 ( valeur de ESC ).
 
Cela donne :
 
boucle:
      MOV DX,60h
      IN AX,DX     ;scan le clavier
      CMP AX,1h    ;compare la valeur scanné a 1 (ESC)
      JZ fin       ;si la comparaison est egale, on saute a fin:
      JMP boucle
       
fin:
      ret
 
Ca marche tres bien sous winXP mais ca ne marche pas sous msdos(le vrai dos).
Pourquoi?
Et comment je pourrai faire la meme chose sous dos ?

Reply

Marsh Posté le 05-12-2004 à 13:45:17   

Reply

Marsh Posté le 06-12-2004 à 11:55:37    

A priori, c'est parce que AH ne vaut pas 0. Donc fait plûtot un IN AL, DX.
 
Qui plus est, tu as 2 instructions de saut (JNZ et JMP) là où tu pourrais n'en avoir qu'une.  
 
      MOV DX,60h  
boucle:  
      IN AL,DX  
      CMP AX,1h  ; "DEC AX" irait plus vite ici...
      JNZ boucle
      ret  
 
 
Bon, tout ça reste bien sûr une méthode très "primitive" de fonctionner (ça bouffe un max de temps CPU au lieu d'attendre une interruption déclenchée par le clavier, et ça risque de cours-circuiter le vrai handler clavier), mais pour du code écrit au bout de 2 semaines, c'est déjà pas mal. :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed