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