Programme résident

Programme résident - ASM - Programmation

Marsh Posté le 20-03-2006 à 16:57:47    

Salut,
 
J'ai écrit un programme qui affiche l'heure en haut à droite de l'écran lorsque l'on appuye sur Printscreen et qui s'efface si on réappuye dessus.
J'aimerais le mettre résident mais je n'y arrive pas.Le détournement d'interruption fonctionne mais si je veut par exemple aller dans l'EDIT du dos l'heure reste figer et je suis bon pour fermer la fenetre(j'utilise VPC)
 
Merci
 

Code :
  1. .MODEL SMALL
  2. .STACK 100h
  3. .DATA
  4.      prtscn DB 0
  5.      ancip DW ?
  6.  ancseg DW ?
  7.  mvideo DB 16 dup(' ')
  8.  taille equ (fin-debut)/16
  9.  
  10. .CODE
  11. DEBUT:
  12.      include a:hex2asc.asm
  13.  JMP START
  14. ROUTINETIMER:
  15.    CLI
  16.    PUSH AX                   ; SAUVEGARDE DES DIFFÉRENT REGISTRES
  17.        PUSH CX
  18.        PUSH DX
  19.        PUSH SI
  20.        PUSH DI
  21.        PUSH DS
  22.        PUSH ES
  23.    MOV AX, 0B800h
  24.    MOV ES, AX
  25.        MOV SI, 144
  26.    MOV AH, 02h                ; LECTURE DE L'HEURE
  27.        INT 1Ah
  28.        MOV AL, CH                 ; AFFICHE LES HEURES
  29.        CALL HEX2ASCII
  30.        MOV AH, 07
  31.    MOV AL, ':'            ; CARACTÈRE ':'
  32.        MOV ES:[SI], AX
  33.        INC SI
  34.        INC SI
  35.        MOV AL, CL                 ; AFFICHE LES MINUTES
  36.        CALL HEX2ASCII
  37.        MOV AH, 07
  38.    MOV AL, ':'            ; CARACTÈRE ':'
  39.        MOV ES:[SI], AX
  40.        INC SI
  41.        INC SI
  42.        MOV AL, DH                 ; AFFICHE LES SECONDES
  43.        CALL HEX2ASCII
  44.    POP AX                     ; RECUPERATION DES DIFFÉRENT REGISTRES
  45.        POP CX
  46.        POP DX
  47.        POP SI
  48.        POP DI
  49.        POP DS
  50.        POP ES
  51.    STI
  52.        IRET
  53. ROUTINE05h:
  54.        CLI
  55.        MOV AX, @DATA
  56.        MOV DS, AX
  57.        CMP prtscn, 1             ;Flag du printscreen
  58.        JE ECRAN                  ;Si égale a 1 on affiche l'heure
  59.        MOV AL, 1Ch               ;Lire ancien vecteur
  60.        MOV AH, 35h
  61.        CLI
  62.        INT 21h
  63.        MOV ancip, BX             ;resultat dans ES:BX
  64.        MOV AX, ES
  65.        MOV ancseg, AX
  66.        PUSH ES
  67.        MOV AX, 0B800h             ;Appele memoire video
  68.        MOV ES, AX
  69.        MOV SI, 144                ;Place du curseur
  70.        MOV DI, 0                  ;Pointeur du buffer video
  71. SVGVIDEO1:
  72.        MOV BH, ES:[SI]            ;BH contient le premier caractere
  73.        MOV mvideo[DI], BH         ;On le place dans le buffer de sauvegarde
  74.        INC DI
  75.        INC SI
  76.        CMP DI, 16                 ;Tant que plus petit que 16 on recommence
  77.        JE SUITE
  78.        JMP SVGVIDEO1
  79. SUITE:
  80.        POP ES
  81.        PUSH DS
  82.        PUSH CS
  83.        POP DS
  84.        LEA DX, ROUTINETIMER       ;Appele la routine de l'heure
  85.        MOV AH, 25h
  86.        MOV AL, 1Ch
  87.        CLI
  88.        INT 21h
  89.        STI
  90.        POP DS
  91.        MOV prtscn, 1              ;Affiche l'heure
  92.        JMP FIN1
  93. ECRAN:
  94.        MOV DX, ancip
  95.        MOV AX, ancseg
  96.        PUSH DS
  97.        MOV DS, AX
  98.        MOV AH, 25h
  99.        MOV AL, 1Ch
  100.        CLI
  101.        INT 21h
  102.        STI
  103.        POP DS
  104.        PUSH ES
  105.        MOV AX, 0B800h
  106.        MOV ES, AX
  107.        MOV SI, 144
  108.        MOV DI, 0
  109. SVGVIDEO2:
  110.        MOV BH, mvideo[DI]         
  111.        MOV ES:[SI], BH            ;Affiche l'heure
  112.        CMP DI, 15
  113.        JE SUITE2
  114.        INC DI
  115.        INC SI
  116.        JMP SVGVIDEO2
  117. SUITE2:
  118.        POP ES
  119.        MOV prtscn, 0
  120. FIN1:
  121.        STI
  122.        IRET
  123. START:
  124.        PUSH DS
  125.        PUSH CS
  126.        POP DS
  127.        LEA DX, ROUTINE05h         ;Place le programme d'interruption
  128.        MOV AH, 25h
  129.        MOV AL, 05h                ;Detourner printscreen
  130.        CLI
  131.        INT 21h
  132.        STI
  133.        POP DS
  134. FIN:
  135.        mov dx, taille + 100        ;Mise en résident (taille du programme + taille de la pile)
  136.        mov ax, 3100h
  137.        INT 21h
  138. END START


 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 


Reply

Marsh Posté le 20-03-2006 à 16:57:47   

Reply

Marsh Posté le 21-03-2006 à 12:27:00    

Bonjour
Je ne me rapelle plus de la réponse car je n'ai plus fait ce genre d'exercice depuis 15 ans.
Sous windows, il y a une horloge en bas à droite qui marche bien.
De nos jours rendre résident un programme dos n'est pas d'un intéret flagrant. Il y a moyen depuis pas mal de temps d'utiliser de l'assembleur 32 bits. Est-ce du masochisme ou est-ce pour faire raler notre modérateur ?

Reply

Marsh Posté le 23-03-2006 à 19:37:59    

Si quelqu'un pourrait me répondre. J'ai essayé toute les methode.
* Mettre un label de debut et de fin, les soustraire diviser par 16 et ajouter la taille de la pile => marche pas
 
* Mettre en equ dans les data et le mettre dans dx a la fin => marche pas

Reply

Marsh Posté le 24-03-2006 à 00:30:50    

et encore de l'assembleur 16 bits :pfff:
 
edit: grillé en beauté [:ddr555]

db__ a écrit :

Il y a moyen depuis pas mal de temps d'utiliser de l'assembleur 32 bits. Est-ce du masochisme ou est-ce pour faire raler notre modérateur ?


Message édité par Harkonnen le 24-03-2006 à 00:32:10
Reply

Marsh Posté le 25-03-2006 à 03:05:30    

MAD_DIM a écrit :

(...)
 ajouter la taille de la pile => marche pas


 
Alors si tu es sous MS-DOS 5.00 je te conseille de passer à MS-DOS 6.00 qui est bien meilleure et corrige quelques bugs...
Sinon peut-être que tu devrais essayer de mettre à jour ton ordi, ton programme à l'air de consommer beaucoup de ressource, par exemple essaye d'augmenter ta mémoire vive pour passer 4Mo si ta carte mère le supporte bien sûr, c'est encore assez rare de nos jours [:dr_zoidberg]
 
 
 
 
 
 
 
 
[:dslam]


---------------
Scarmatil
Reply

Marsh Posté le 25-02-2010 à 12:58:21    

coucou , il est vrai que çà fait 4 ans que tu as soumis ta préoccupation à propos  de la réalisation d'un programme résident . Apparemment , c'est pas ici que t'as trouvé la solution . Mais aujourd'hui , je suis dans la mème situation , non ,mon cas est pire car je n'ai aucune notion sur les programmes résident , et pourtant , je dois en réaliser un. Mon proffesseur de système nous a demandé de réaliser un espion qui intercepte le clavier et la souris. Mais avant celà , il faudrait d'abord pouvoir réaliser un programme résident. J'espère que toi ou toute autre personne lisant ce message , pourra m'aider  .
 
merci !!!

Reply

Marsh Posté le 25-02-2010 à 14:09:53    

[:popcorn]


---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
Reply

Sujets relatifs:

Leave a Replay

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