Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1373 connectés 

  FORUM HardWare.fr
  Programmation
  ASM

  Stocker la valeur des registres dans un tableau

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Stocker la valeur des registres dans un tableau

n°1340927
cris__tof
Posté le 06-04-2006 à 19:52:49  profilanswer
 

Mon problème : réaliser une sauvegarde des registres d'un x86 dans un tableau.
en C :
 
#define NB_REG 8
 
typedef int contexte_exec[NB_REG];
/* 0  esp;
   1  ebp;
   2  eflags;
   3  ebx;
   4  ecx;
   5  edx;
   6  esi;
   7  edi;
};
*/
/* Fonction permettant le changement de contexte entre deux processus */
 
void context_switch(contexte_exec *old_context, contexte_exec *new_context);
 
Mon prog assembleur :
 
.text
   
.global context_switch
 
context_switch:  
  movl 4(%esp),%eax  /*On recupere l'adresse du tableau de lancien contexte, eax est un registre crash on peut y stocker l'adresse  */
  movl %esp,(%eax)  /*Cette adresse correspond au champ esp, on sauvegarde donc l'ancienne valeur d'esp */
  movl %ebp,4(%eax)  /*Tableau d'entiers pour context, on accede a chaque champ par saut de 4 */
  movl %ebx,12(%eax)
  movl %ecx,16(%eax)  
  movl %edx,20(%eax)  
  movl %esi,24(%eax)  
  movl %edi,28(%eax)
/*  pushf     eflags a gérer */
/*  popl %ebx */
/*  movl %ebx,8(%eax) */  
  movl 8(%esp),%eax  /*recupération de l'adresse du seconde parametre*/  
 /* movl 8(%eax),%ebx */
/*  movl %ebx,12(%esp)*/
/*  popf   eflags a gerer */
  movl 28(%eax),%edi
  movl 24(%eax),%esi
  movl 20(%eax),%edx
  movl 16(%eax),%ecx
  movl 12(%eax),%ebx  
  movl 4(%eax),%ebp  
  movl 0(%eax),%esp
  ret
 
Aidez moi pour corriger mon programme s'il vous plaît :°)
Merci d'avance

mood
Publicité
Posté le 06-04-2006 à 19:52:49  profilanswer
 

n°1341376
db__
spécialiste de l'à peu près
Posté le 07-04-2006 à 12:38:46  profilanswer
 

Bonjour
Sauf si on connait exactement le moment ou un processus sera remplacé par un autre, et que dans ce cas on peut prévoir de ne rien mettre d'interessant dans eax, ou si on utilise jamais eax (adieu mul, div, ...) il est hasardeux, dangereux de ne pas sauvegarder eax. Sauvegarder ces valeurs en pile ou dans un emplacement mémoire ne change pas grand chose. J'utiliserais plutot un pusha puis une sauvegarde de esp dans un emplacement mémoire plutôt qu'une longue litanie de mov; au retour un échage de pointeur de pile suffit avec un popa. Si on aime pas le pusha et le popa avant de mettre le pointeur tableau dans eax, sauvegarder ce dernier sur la pile puis le resauvegarder dans la mémoire.
qu'est-ce qu'un registre crash ? je n'ai pas ce concept dans ma doc 386 (sybex)
j'imagine que c'est un registre qui quand on y met n'importe quoi permet l'obtention du message segmentation fault indiquant un crash du programme.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  ASM

  Stocker la valeur des registres dans un tableau

 

Sujets relatifs
Re-numéroation de champ après suppression de lignes d'un tableauchanger la valeur d'un jbutton quand je clic dessus
Cherche exemple ArrayList, agrandir tableau dynamiquement[VB.net] Ancienne et nouvelle valeur du DataGridView
javascript: tableau à partir d'un stringNews et tableau en array : un peu trop gros
Selectionner valeur dans une liste déroulantebordure juste pour qq cases d'un tableau
Integrer les valeurs d'un tableau php dans un menu déroulant HTMLStocker un attribut d'un objet dans une BDD
Plus de sujets relatifs à : Stocker la valeur des registres dans un tableau


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR