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