begin process at 2012 05 25 11:27:31
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive Assembleur

 > 

Archives

 > 

Forum general 80xxx

 > 

Modifer le vecteur d'interruptions


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Modifer le vecteur d'interruptions

mercredi 31 août 2005 à 15:10:05 | Modifer le vecteur d'interruptions

vecchio56

Administrateur CodeS-SourceS
Bonjour
J'essaie de refaire la source http://www.cppfrance.com/code.aspx?ID=33558 en assembleur (ca consiste à modifier la routine de l'interruption 08h). Le problème est que programme se termine aussitôt après avoir été lancé.
Voici mon code:

.model small
.stack

.data
oldTimerSegment   DW     ?
oldTimerOffset    DW     ?

.code

; place la valeur de ds dans le code pour pouvoir le récupérer
; dans myTimer
DataSegment       DW     ?

myTimer:
  push  ax bx dx

  mov   ah, 2
  mov   dl, '.'
  int   21h

  mov   ax, DataSegment
  mov   es, ax
  mov   ax, es:oldTimerSegment
  mov   bx, es:oldTimerOffset

  mov   es, ax
  call  es:[bx]
  pop   dx bx ax
  iret

main:
  mov   ax, @data
  mov   ds, ax
  mov   DataSegment, ax

  ; Modification du vecteur d'interruptions
  xor   ax, ax
  mov   es, ax
  mov   bx, 20h    ; 8*4=20h

  ; premier mot: offset de la procédure
  mov   ax, es:[bx]
  mov   oldTimerOffset, ax
  mov   ax, offset myTimer
  mov   es:[bx], ax

  ; deuxième mot: valeur de segment de code
  mov   dx, es:[bx+2]
  mov   oldTimerSegment, dx
  mov   ax, cs
  mov   es:[bx+2], ax

  ; attend l'appui d'un touche
  mov   ah, 1
  int   21h

  mov   ah, 4Ch
  int   21h

  end main
mercredi 31 août 2005 à 19:08:20 | Re : Modifer le vecteur d'interruptions

vecchio56

Administrateur CodeS-SourceS
J'ai modifié plusieurs choses mais j'y arrive toujours pas. Mon programme se comporte différemment: des fois il plante, des fois il affiche des pointes puis il s'arrête, des fois il se termine tout de suite...

.model small
.stack

.data
oldTimerSegment   DW     ?
oldTimerOffset    DW     ?

.code

; place la valeur de ds dans le code pour pouvoir le récupérer
; dans myTimer
DataSegment       DW     ?
compteur          DW     0

myTimer:
  push  ax ds es

  ; simule un int: empile flags, cs et ip
  pushf
  push  cs
  push  offset ip_

  mov   ds, DataSegment
  inc   compteur
  cmp   compteur, 18
  jne   noReset
  mov   compteur, 0
  mov   ah, 2
  mov   dl, '.'
  int   21h
noReset:

  mov   ax, oldTimerSegment
  mov   es, ax

ip_:
  jmp   es:oldTimerOffset      ; appel de la routine par défaut

  pop   es ds ax
  iret


main:
  mov   ax, @data
  mov   ds, ax
  mov   DataSegment, ax

  ; Modification du vecteur d'interruptions
  xor   ax, ax
  mov   es, ax
  mov   bx, 20h    ; 8*4=20h


  mov   ax, es:[bx]
  mov   oldTimerOffset, ax
  mov   dx, es:[bx+2]
  mov   oldTimerSegment, dx


  mov   ax, offset myTimer
  mov   dx, cs
  cli
  mov   es:[bx], ax
  mov   es:[bx+2], dx
  sti

  mov   ah, 1
  int   21h

  mov   ah, 4Ch
  int   21h

  end main
jeudi 1 septembre 2005 à 10:42:11 | Re : Modifer le vecteur d'interruptions

patatalo

Membre Club Administrateur CodeS-SourceS
salut,

il faut que ton programme reste resident

@++
jeudi 1 septembre 2005 à 11:17:12 | Re : Modifer le vecteur d'interruptions

vecchio56

Administrateur CodeS-SourceS
Ah? ca veut dire quoi?
jeudi 1 septembre 2005 à 11:36:15 | Re : Modifer le vecteur d'interruptions

patatalo

Membre Club Administrateur CodeS-SourceS

re,

quand tu finis un programme avec la fonction 4C de l'int 21h, cela veut dire que ton programme doit etre déchargé de la memoire. La memoire ainsi libérée est utilisée pour un autre programme.

tu dois rendre ton programme résident ( il doit rester en mémoire ) je crois que c'est l'int 27h qui fait ça ( dx prends le nombres de paragraphes ).

lors du déchargement de ton programme, n'oublie pas de remettre le vecteur d'interruption vers la bonne addresse.

@++

jeudi 1 septembre 2005 à 11:42:23 | Re : Modifer le vecteur d'interruptions

vecchio56

Administrateur CodeS-SourceS
mov   ah, 1
int   21h

Ca attend l'appui d'une touche sur le clavier, donc normalement mon programme va rester résident. Il y a donc un problème ailleurs

A quoi ca sert de remettre la bonne adresse à la fin, puisque mon programme se termine?
jeudi 1 septembre 2005 à 12:08:39 | Re : Modifer le vecteur d'interruptions

patatalo

Membre Club Administrateur CodeS-SourceS
re,

je serais toi, je mettrais plutot une boucle infinie pour test.

qui prouve que le le programme ne chope pas un caractere qui traine dans STDIN dès l'execution ? ( fait un flush du buffer avant la demande )

@++
jeudi 1 septembre 2005 à 12:12:24 | Re : Modifer le vecteur d'interruptions

vecchio56

Administrateur CodeS-SourceS
Une boucle infinie ca prend un peu trop de cpu a mon gout. Quand je change pas l'interruption, le programme attend toujours l'appui... Tu sais comment on fait un flush en asm?
Au fait je suis sous XP, donc en mode virtuel et pas en mode réel, donc la table d'interruption n'appartient qu'a mon programme, non?
jeudi 1 septembre 2005 à 12:39:33 | Re : Modifer le vecteur d'interruptions

patatalo

Membre Club Administrateur CodeS-SourceS

c'est pas le genre de truc que je ferais tourner sous XP.
le code myTimer me parait aussi louche ( simule int ? )
voilà un exemple de TSR ( le 16 bits, ça fait longtemps que j'en fais plus que pour les secteurs de boot )
[ Lien ]

jeudi 1 septembre 2005 à 12:51:43 | Re : Modifer le vecteur d'interruptions

vecchio56

Administrateur CodeS-SourceS
J'appelle une routine d'interruption, mais comme elle va dépiler cs, il faut que je l'empile avant
Merci pour le lien et pour ton aide

1 2 3 4

Cette discussion est classée dans : code, mov, ax, bx, dx


Répondre à ce message

Sujets en rapport avec ce message

rs232 [ par TRAX44 ] salut,tout premièrement je sais qu'il ya des exemples sur le site!mais mon problème est autre je tiens à comprendre pourquoi mon code ne fonctionne pa pb int 21h ah=0ah [ par mat74 ] salut a ts ,voila j'ai fais un programme qui est censé lire une chaine entré par l'utilisateur et ensuite la reafficher . Il me demande bien d'entré u petit probleme de debutant [ par freekc ] j'essaie de faire un ptit prog que lorsque l'on rentre son nom prenom etc . Il y est un recapitulatif qui se mette en dessous ms lorsque que le recapi Ennoncés à corriger svp :-) [ par did2604 ] Bonjour à tous,Mon professeur m'a demandé de convertir les énoncés (en langage C) suivants en assembleur, quelqu'un aurait-il la gentilesse de me les Executer 2 action en meme temps [ par HirOinEvOl ] Bonjour, je souhaite exécuter les deux codes suivant mais simultanément pour qu'ils puissent tournés en parrallèles. Je n'ai trouvé aucun moyen de l verification d'un code [ par marooh ] Bonjour, j'ai écrit un code assembleur qui consiste à créer un tableau de 20 cases , de les remplir,de trouver le maximum et de faire la moyenne.mais correction d'un code assembleur [ par marooh ] Bonjour, j'ai ce code assembleur qui permet la creation d'un tableau de 10 cases et les remplir avec le chiffre 5.en l'utlisant avec tasm,il s'avère prob avec une fonction [ par marooh ] bonjour, j'ai un gros probleme j'ai écrit un code assembleur qui permet de trouver le mot le plus long et de l'afficher mais à l'execution il affiche correction d'un code [ par marooh ] bonjour,j'ai écrit un code assembleur qui permet de comparer deux tableaux,ce code je veux l'inserer dans un code c. si vous pouvez bien me le corrige ERREUR DE SEGMENTATION en asm [ par tahsgh ] salam; jai le code suivant ----------------------------------------- global main SECTION . text main :


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,967 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales