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

  1. #1
    Membre du Club
    Étudiant
    Inscrit en
    Décembre 2005
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2005
    Messages : 60
    Points : 47
    Points
    47
    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
    Points : 160
    Points
    160
    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 expérimenté
    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 : 40
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2003
    Messages : 974
    Points : 1 557
    Points
    1 557
    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 ?
    Avant de poster, merci de consulter les règles du forum

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

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2005
    Messages : 60
    Points : 47
    Points
    47
    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
    Points : 160
    Points
    160
    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 expérimenté
    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 : 40
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2003
    Messages : 974
    Points : 1 557
    Points
    1 557
    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 ...
    Avant de poster, merci de consulter les règles du forum

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

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2005
    Messages : 60
    Points : 47
    Points
    47
    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

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 130
    Points : 160
    Points
    160
    Par défaut
    Il n'est aucunement question de remettre en cause une liberté inaliénable (par ailleurs) mais de sérieusement remettre en cause une soit-disant culture (qui, elle, peut devenir aliénante, si ce n'est alien-hante ) et une pédagogie qui tournent à la régression: Du rabâchage 16 bits que l’on peut trouver sur n’importe quel mauvais site d’ASM (y’en a déjà pas beaucoup…).

    Je fais du code Atari sur Atari mais je n'utilise pas d'émulateur Atari sur PC. Donc, comme toi, je fais ce qu'il faut sur la bonne machine: Restons donc cohérents jusqu'au bout : Saisir un code clavier et l’afficher c’est quand-même pas bien sorcier en ASM 32/64 sur PC et sous Vista… Si ? Ben changez d’outils les gâ !

    De plus, sur un forum lu par certains qui s’intéressent à l’ASM (donc, dans le cas un peu spécial d'un forum assembleur, forcément pollué par l'intox galopante des HLLeux...) il serait souhaitable (souhaitable voyez...) que la liberté de faire de l'assembleur actuel soit aussi préservée et existe en tant possibilité réellement encouragée sur un forum digne de ce nom... à moins qu'on encourage l’abandon de la base sur laquelle tous les HLL sont construits... Chacun peut constater, sur ce forum assembleur, qu'au jour d'aujourd'hui on commence vaguement à parler d'utiliser le 32 bits et des API en ASM (un comble, ça devrait-être le cas au moins depuis NT...). Les posts sur SSEx, MMX, LLC, KS ou la topologie sont quasi inexistants...
    Les codeurs assembleur devraient, comme à l'habitude, avoir une longueur d'avance sur toutes les technologies actuelles. Alors, ne pas expliquer que faire de l'assembleur ce n'est pas forcément utiliser des trucs antédiluviens (et appeler ça de la culture et de la liberté... ) c'est encourager de mauvais départs qui donneront de mauvais codeurs (s’ils ne sont pas dégoûtés d’entrée) avec de mauvais réflexes...
    Mais, je me répète: C'est comme vouvoul, c'est vous les payeurs...

  9. #9
    Membre du Club
    Étudiant
    Inscrit en
    Décembre 2005
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2005
    Messages : 60
    Points : 47
    Points
    47
    Par défaut
    Ok d'accord je sais l'assembleur que l'on étudie n'est pas adapté à l'assembleur d'aujourd'hui mais quel est l'assembleur aujourd'hui ? Pourrais-tu me renseigner sur les différents sites ?
    Les livres qui parlent de l'assembleur face aux dual core etc ?

    Merci de ta réponse..

    Ps: Désolais je pense que le sujet n'est plus adapté...

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 130
    Points : 160
    Points
    160
    Par défaut
    Si tu regardes du côté de la signature, tu trouveras l'url où télécharger ce que je considère comme un outil révolutionnaire pour la programmation "dé-enfumée" au jour d'aujourd'hui

    http://en.wikipedia.org/wiki/RosAsm

    Le pack Open Source comprend toutes les docs, plusieurs formes de tutoriaux (y compris interactifs, ce qui me semble être la forme que tu recherches: Le pas à pas avec la visualisation du code (ainsi que les explications au fur et à mesure) et les contenus des divers registres, de la mémoire, le suivi de variables etc.).
    Sur le site de Yeohhs tu trouveras plus d'une centaine de petites démos ultra simples sur a peu près tout, OpenGL, MySQL, les boites de dialog, la gestion d'images, l'affichage float, les conversions. Tout autant sur le site de RosAsm.org.

    Je ne peux que te conseiller de prendre le plus tôt possible les bonnes habitudes vis à vis de l'ASM, tu t'en trouveras nettement plus encouragé !

    PS: Juju_41, Int, pour Interupt Request. Il est vrai que certaines contractions de contractions ne sont pas toujours limpides: Désolé.

  11. #11
    Membre confirmé
    Homme Profil pro
    .
    Inscrit en
    Juin 2002
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : .
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2002
    Messages : 239
    Points : 567
    Points
    567
    Par défaut
    Il y a une erreur grave dans la procédure teste : les registres ne sont pas dépilés dans le bon ordre.

    Aussi à chaque appui sur une touche, les registres ax et dx sont permutés ...

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 130
    Points : 160
    Points
    160
    Par défaut
    les shr sont biens aussi...
    Bah... fô bien commencer par un bout

    Courage !

  13. #13
    Membre du Club
    Étudiant
    Inscrit en
    Décembre 2005
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2005
    Messages : 60
    Points : 47
    Points
    47
    Par défaut
    Bonjour !

    C'est-à-dire une erreur avec push et les pop ?
    Quel est cette erreur peux-tu me dire ce qu'il faut que je corrige ?

    Merci d'avance

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 130
    Points : 160
    Points
    160
    Par défaut
    Histoire de dire... mais bon...

    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
    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 4
                 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

  15. #15
    Membre du Club
    Étudiant
    Inscrit en
    Décembre 2005
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2005
    Messages : 60
    Points : 47
    Points
    47
    Par défaut
    Ok c'est bon je vient de capter ....

    D'accord donc quand tu push dans un ordre tu pop dans le désordre !

    Ok Merci je le met en résolu !

  16. #16
    Membre du Club
    Étudiant
    Inscrit en
    Décembre 2005
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2005
    Messages : 60
    Points : 47
    Points
    47
    Par défaut
    Finalement non ....
    Même résultat !

    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
     
    teste   proc near
                 push ax
                 push dx
                 push cx
                 mov ax, cs
                 mov es, ax
                 mov ah,01h
                 mov ch,6
                 mov cl,cs:col
                 int 10h
                 inc cs:col
                 pop cx
                 pop dx
                 pop ax
                 ret
         teste   endp
    Autre proposition ?
    Merci d'avance !

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 130
    Points : 160
    Points
    160
    Par défaut
    aie aie aie... et

    Franchement, le 32 bits, ce sera moins pénible: Cet assembleur là ne t'apportera rien de valable au jour d'aujourd'hui.
    Pourquoi entrer en conflit avec un OS qui est gentil avec toi ?
    Ou alors, lance-toi dans les mini drivers (en mode User tu auras les sanctions normalisées de l'OS et une fois installé du plantage BOSD du plus frustrant des effets...).

    Pour commencer en assembleur, aujourd'hui, la saisie de caractère de cette manière n'est pas une solution très pédagogique. Prends les API de base (que tu connais sans doute déjà) et descend au fur et à mesure que tu comprends ce qui se passe avec le traçage au debug. Ensuite, tu pourras te faire ta routine Low Level comme tu veux avec des Int si tu veux, mais respectueuses de l'environnement et des devoirs de l'OS.

    Loi de Dave Small Article 1: On obtient le maximum de résultats en s'enmerdant au maximum. Toute économie dans ce domaine entraînant immanquablement des pertes à moyens et longs termes.

    Donc, s'enmerder au maximum dans ton cas, c'est passer par les API Win32 dans un premier temps . Aller du connu vers l'inconnu est le bon sens pédagogique même .

  18. #18
    Membre confirmé
    Homme Profil pro
    .
    Inscrit en
    Juin 2002
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : .
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2002
    Messages : 239
    Points : 567
    Points
    567
    Par défaut
    La fonction 01 de l'interruption 10h ne déplace pas le curseur.
    C'est la fonction 02 qui se charge de cela.

    La fonction 01 sert à définir l'apparence du curseur.
    Plus précisément, elle définit les lignes qui sont occupées par le curseur à l'intérieur de la matrice qui sert à définir un caractère.

    Revoyez votre programme en appelant la fonction 02 à la place de la fonction 01.

  19. #19
    Membre du Club
    Étudiant
    Inscrit en
    Décembre 2005
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2005
    Messages : 60
    Points : 47
    Points
    47
    Par défaut
    Merci je vais tester cela et je te dirais!

  20. #20
    Membre confirmé
    Homme Profil pro
    .
    Inscrit en
    Juin 2002
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : .
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2002
    Messages : 239
    Points : 567
    Points
    567
    Par défaut
    Il faut aussi faire attention au point suivant : la syntaxe de la fonction 02 n'est pas la même que celle de la fonction 01.

    La fonction 02 utilise le registre dx alors que la fonction 01 utilise le registre cx.

    Pour la fonction 02, il faut :
    ah = 2
    bh = 0 ( numéro de la page écran )
    dl = numéro de la colonne ( entre 0 et 79 s'il y a 80 colonnes )
    dh = numéro de la ligne ( entre 0 et 24 s'il y a 25 lignes )

    On ne peut donc pas augmenter le numéro de la colonne indéfiniment : lorsque le numéro de colonne atteint 80, il faut le remettre à 0 et incrémenter le numéro de ligne.

    Le code de la procédure teste est donc à revoir.

+ 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