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

  FORUM HardWare.fr
  Programmation
  C

  Changement de contexte : C + assembleur

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Changement de contexte : C + assembleur

n°1340898
cris__tof
Posté le 06-04-2006 à 18:33:26  profilanswer
 

Quelqu'un pourrait-il m'aider pour un changement de contexte à réaliser en assembleur + C?
Voilà ce que j'ai fait :
 
Fichier context_switch.h :
 
#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;
};
void context_switch(contexte_exec *old_context, contexte_exec *new_context);
 
Ma fonction en 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           */ A traites : les flags
/*        movl %ebx,8(%eax) */  
         movl 8(%esp),%eax  /*recupération de l'adresse du seconde parametre*/  
/*             movl 8(%eax),%ebx */   flags a traiter  
/*        movl %ebx,12(%esp)*/
/*        popf                      */
  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
 
Ca veut par marcher :'(((  
Si vous pouviez me donner des détails pour faire marcher ce changement de contexte :°) je suis preneur
Merci d'avance

mood
Publicité
Posté le 06-04-2006 à 18:33:26  profilanswer
 

n°1340907
Emmanuel D​elahaye
C is a sharp tool
Posté le 06-04-2006 à 19:01:07  profilanswer
 

cris__tof a écrit :

Quelqu'un pourrait-il m'aider pour un changement de contexte à réaliser en assembleur + C?


Normalement, on utilise setjmp() longjmp() et la structure qui va avec, c'est fait pour... Y'a pas besoin d'assembleur...


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1340909
cris__tof
Posté le 06-04-2006 à 19:05:56  profilanswer
 

C'est de la programmation d'os ... Je dois sauvegarder tous les registres dans une structure (un tableau dans mon cas), et restaurer ensuite les valeurs du nouveau contexte.

n°1340910
Emmanuel D​elahaye
C is a sharp tool
Posté le 06-04-2006 à 19:08:35  profilanswer
 

cris__tof a écrit :

C'est de la programmation d'os ... Je dois sauvegarder tous les registres dans une structure (un tableau dans mon cas), et restaurer ensuite les valeurs du nouveau contexte.


C'est exactement ce que font setjmp() et longjmp().
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1340911
cris__tof
Posté le 06-04-2006 à 19:12:43  profilanswer
 

Tu fais exprès de pas comprendre je pense?  
Je programme un OS de A à Z.
J'ai pas le droit à ces fonctions là, je dois faire MON changement de contexte avec un tableau pour contenir les valeurs des registres.

n°1341057
Ace17
Posté le 06-04-2006 à 23:21:28  profilanswer
 

Toi, t'es en projet systeme :-)

n°1341112
nargy
Posté le 07-04-2006 à 01:31:44  profilanswer
 

Citation :


Tu fais exprès de pas comprendre je pense?  
Je programme un OS de A à Z.
J'ai pas le droit à ces fonctions là, je dois faire MON changement de contexte avec un tableau pour contenir les valeurs des registres.


te prends pas la tête, tu trouvera facilement les sources de ces fonctions setjmp/longjmp sur le net, un ptit copier/coller et ça ira.
 
bien sûr, pour le challenge tu peut aussi essayer de le faire par toi même.
 
- eaf: un petit push peut être pour le sauvegarder?
si la fonction switch est appelée par une interruption, tu est en train d écraser le registre eax.
 
- les flags: pourquoi pas avant ebx?
- est tu sûr de l ordre des arguments::
  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 */


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

  Changement de contexte : C + assembleur

 

Sujets relatifs
[C#] Refresh d'une form après changement de langueChangement couleur sommaire
[Résolu] Changement de port sur une page webChangement d'écriture après form
Probleme connexion BD après changement de version de Weblogicchangement de couleur de police par menu déroulant
clignotement d'image lors d'un changement de dim de fenetreChangement de ligne en CSS
assembleur 68000Gif animé et changement de page
Plus de sujets relatifs à : Changement de contexte : C + assembleur


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)