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 :

TSR (programme résident) : pourquoi il ne le fait qu'une seule fois ?


Sujet :

Assembleur

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Étudiant
    Inscrit en
    Décembre 2005
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2005
    Messages : 60
    Par défaut TSR (programme résident) : pourquoi il ne le fait qu'une seule fois ?
    Bonjour,

    Voici mon programme il fait simplement un deplacement de curseur mais le problème c'est qu'il le fait qu'une seule fois ....

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
    CODE segment 'CODE'
         assume cs:CODE
         org 100h
         begin:  jmp install
     
                 add9 dd ?
                 col db 0
     
         vect9   proc far
                 call teste
                 jmp cs:add9
         vect9   endp
     
         teste   proc near
                 push ax
                 push dx
                 push bx
                 mov ah,02h
                 mov bh,0
                 mov dl,0
                 mov dh,cs:col
                 int 10h
                 inc cs:col
                 inc cs:col
                 pop bx
                 pop ax
                 pop dx
                 ret
         teste   endp
     
         install:
                 mov ax,cs                  ;load ds
                 mov ds,ax
     
                 mov ax,3509                ;get current vector 9
                 int 21h                    ;and save it
                 mov word ptr cs:add9,bx    ;offset
                 mov word ptr cs:add9+2,es  ;segment
     
                 mov ax,2509h
                 mov dx,offset vect9
                 int 21h
     
                 mov     ax, ds:[2Ch]            ; Release environment.
                 mov     es, ax
                 mov     ah, 49h
                 int     21h
     
                 mov     dx, offset install 	; Find paragraphs
                 shr     dx, 1                   ; Divide by 16.
                 shr     dx, 1
                 shr     dx, 1
                 shr     dx, 1
                 inc     dx                      ; Add one to be sure.
                 mov     ax, 3100h               ; Set TSR
                 int     21h
    CODE    ENDS
    		end begin
    Merci d'avance de vos conseils

  2. #2
    Inactif
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 130
    Par défaut
    Ou tu copies ton code plusieurs fois
    Ou tu lui indiques qu'il doit boucler et rappeler ta procédure de traitement curseur, ce qui n'est pas le cas de ton code...

    - Un label (à moins que tu fasses directement un Call/ret)

    - si besoin:un compteur
    - si besoin une (des) condition(s)
    - si besoin un (des) tests

    - le saut lui même.

  3. #3
    Membre Expert
    Avatar de Juju_41
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Février 2003
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Février 2003
    Messages : 974
    Par défaut
    Citation Envoyé par wwwwwwo
    Ou tu copies ton code plusieurs fois
    Ou tu lui indiques qu'il doit boucler et rappeler ta procédure de traitement curseur, ce qui n'est pas le cas de ton code...
    Non, il s'agit d'un programme TSR pour DOS (visiblement) et en redéfinissant l'interruption 09h (qui correspond à l'IRQ 1 : le clavier), la procédure devrait être appelée à chaque évênement clavier.

    Dans quel environnement est exécuté ce programme ? DOS "réel" ? un émulateur ?
    Peut-on avoir plus de précisions sur le comportement à l'éxécution : le curseur est placé en haut à gauche et après ? que se passe-t'il ?

  4. #4
    Membre confirmé
    Étudiant
    Inscrit en
    Décembre 2005
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2005
    Messages : 60
    Par défaut
    Bien vu Juju c'est un TSR !
    Donc c'est pour ça que je ne comprend pas pourquoi il ne fait l'opération qu'une seule fois !

    Mon code est exécuter sur DOS le DOS de Windows Vista. Ce qui se passe c'est que le curseur s'affiche quand j'appuie sur une touche mais ensuite j'ai beau appuyer 1000 fois sur une touche cela aura aucun effet !

    Merci d'avance de vos réponse !

  5. #5
    Inactif
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 130
    Par défaut
    Merci de nous rapeller le principe des interuptions (visiblement, un grand moment): Sous le Dos Vista(!) c'est un grand pas pour l'assembleur, un grand moment de pédagogie .

    Le but du post, puiqu'il faut tout expliquer sur ce forum , était de souligner que la structure même du prog ne présente plus aucun intérêt à l'heure actuelle (pour ne pas dire depuis certainement un moment certain). Ou alors, utilisez LowLevelClient et tous les mécanismes compatibles que Kernel vous propose depuis que le DOS n'est plus utilisé par ceux qui installent Windows (soyons sérieux, à l'heure des coeurs multiples et de la réoganistion de la topologie !) surtout si notre ami travail sous Vista (là je suis encore plus perplexe sur l'intérêt d'un tel code -> complètement obsoslète pour ne pas dire impertinent). Rentrer en conflit avec HAL et Kernel je vois pas bien l'intérêt: Essuyez-vous les pieds et demander poliment en passant par la porte . Sinon, pourquoi ne pas faire ça sous Dos DIRECTEMENT (quitte à retourner au préhistorique ). Donc, même pour comprendre les principes des mécanismes mis en place, la méthode d'approche n'est pas correcte et source d'énormes confusions... C'est comvouvoul...


    PS: Int ne t'assure (plus) pas que ton code sera rappelé plusieurs fois... (Sous DOS (réel) oui).
    Juste pour le fun: Arrêter le tir avec un assembleur qui n'a plus lieu d'être et qui ré-invente la roue, par principe, sans apporter rien au scimilibi... enfin au truc...).

    Un débutant qui tombe là dessus, c'est sûr, surtout s'il vient du C/C++, s'enfuit en courant. Pourquoi utiliser directement un mécanisme qui est maintenant géré très correctement par un environement multitâches performant ?
    L'assembleur, c'est pour faire joli, ou avez-vous l'intention de l'utiliser dans la vie réelle ? Pour des applications actuelles réelles ?

  6. #6
    Membre Expert
    Avatar de Juju_41
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Février 2003
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Février 2003
    Messages : 974
    Par défaut
    Citation Envoyé par sacados1
    Mon code est exécuter sur DOS le DOS de Windows Vista.
    Je pense que le problème se situe ici. Le "DOS de Windows Vista" est une invite de commande qui n'émule que très grossièrement MS-DOS. Grossomodo, sous une invite de commandes, dès qu'on se sert de choses trop "pointues" (redirection d'IRQ, utilisation de certaines interruptions du BIOS etc ...) ça ne passe pas.

    Je vous conseille d'utiliser un émulateur DOS comme DosBox afin de tester votre programme plutôt que l'invite de commande Windows.

    Tenez-nous au courant et bon courage

    Edit :
    Citation Envoyé par wwwwwwo
    PS: Int ne t'assure (plus) pas que ton code sera rappelé plusieurs fois... (Sous DOS (réel) oui).
    "Int" n'a jamais rien assuré du tout ... j'ai pas compris ce que vous vouliez dire dans cette phrase

    Pour le reste, chacun fait ce qu'il veut, un peu de culture générale ne fait pas de mal Je m'amusais bien à faire du basic sur CPC464 alors que j'avais un 80486 à la maison ...

  7. #7
    Membre confirmé
    Étudiant
    Inscrit en
    Décembre 2005
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2005
    Messages : 60
    Par défaut
    Le but de ce programme n'est evidement pas de reinventer la roue !!! Mais c'est juste pedagogique !

    Merci pour le consil de DOS oui c'est ce qui etait dit dans les magazines windows vista emule DOS ce qui peut etre cause des probleme je vais donc utiliser le programme que vous m'avez file

    Merci encore

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

Discussions similaires

  1. pourquoi on error goto ne fonctionne qu'une seule fois ?
    Par alsimbad dans le forum Général VBA
    Réponses: 9
    Dernier message: 05/09/2014, 12h09
  2. onbeforeunload ne se fait qu'une seule fois
    Par eXiaNazaire dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 05/11/2008, 15h01

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