Programmation d'un mini OS

Programmation d'un mini OS - C - Programmation

Marsh Posté le 15-03-2006 à 00:11:59    

Salut à tous,
 
J'ai de grosses grosses difficultés dans la programmation d'un OS (machine intel 80x86). Je comprends à peu près toutes les choses qu'il y a à faire, mais au moment de coder en C bah c'est là que ca devient difficile : / (la prog est pas ma matière de prédilection :°)
Par exemple, pour gérer le changement de contexte pour mon noyau, j'ai très bien compris qu'il faut faire une "photographie" des registres qu'un processus p1 utilise id les sauvegarder dans un tableau (registres eax,ebx,ecx,edx,esi,edi,cs,ds,es,ss,fs,gs,esp,ebp,esp et eflags) mais je vois pas du tout comment sauvegarder les valeurs de ces registres  :??:  :??: Je présens l'insertion d'assembleur, mais j'ai franchement beaucoup de mal.
Si quelqu'un a des tuyaux pour me faire avancer, m'aider dans la compréhension ce serait bien sympa. :]
 
PS : c'est mon premier post sur le forum, bien que j'aille tous les jours sur hfr :p. Merci de pas être trop méchant avec moi :]

Reply

Marsh Posté le 15-03-2006 à 00:11:59   

Reply

Marsh Posté le 15-03-2006 à 00:32:16    

je pense que la catégorie programmation est plus approprié a ce genre de posts.
Je déplace [:cupra]

Reply

Marsh Posté le 15-03-2006 à 00:44:20    

Reply

Marsh Posté le 15-03-2006 à 00:45:00    

ben pour sauvegarder les registres, le mieux est de faire un bon vieux push [:petrus75]
mais dis moi, y'a quand même plus simple pour commencer à programmer que d'attaquer un OS non [:petrus dei]

Reply

Marsh Posté le 15-03-2006 à 00:49:33    

Et bien j'ai déjà programmé pas mal d'autres trucs, en luttant c'est vrai. Et là pour l'OS j'ai pas trop le choix à vrai dire.
Sinon pour reprendre le topic je vois toujours pas comment avec un push j'arriverai à mettre les valeurs contenues dans les registres dans un unsigned long contexte[Nb_Registres] :s

Reply

Marsh Posté le 15-03-2006 à 08:16:51    

cris__tof a écrit :

Et bien j'ai déjà programmé pas mal d'autres trucs, en luttant c'est vrai. Et là pour l'OS j'ai pas trop le choix à vrai dire.
Sinon pour reprendre le topic je vois toujours pas comment avec un push j'arriverai à mettre les valeurs contenues dans les registres dans un unsigned long contexte[Nb_Registres] :s


longjmp() / setjmp() est fait pour ça...


---------------
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/
Reply

Marsh Posté le 15-03-2006 à 11:55:15    

Je ne peux pas utiliser setjmp.h -__-

Reply

Marsh Posté le 15-03-2006 à 12:11:29    

J'ai le droit à ces macros  :
 
#define __MOVSB__(dest, src, n)    \
 __asm__ __volatile__(    \
  "rep\n"     \
  "\tmovsb"    \
  : "=S" (src), "=D" (dest), "=c" (n) \
  : "0" (src), "1" (dest), "2" (n) \
  : "memory", "cc" )
 
#define __MOVSL__(dest, src, n)    \
 __asm__ __volatile__(    \
  "rep\n"     \
  "\tmovsl"    \
  : "=S" (src), "=D" (dest), "=c" (n) \
  : "0" (src), "1" (dest), "2" (n) \
  : "memory", "cc" )
 
Mais après recherches sur le net ( http://www-128.ibm.com/developerwo [...] /l-ia.html ) j'ai du mal à comprendre leur fonctionnement.

Reply

Marsh Posté le 15-03-2006 à 12:56:38    

encore de la syntaxe AT&T [:psychokwak]
la macro MOVSB copie n octets de src vers dest
la macro MOVSL copie n longs de src vers dest

Reply

Marsh Posté le 15-03-2006 à 12:58:13    

Merci pour l'info :]
Ceci dit j'ai toujours pas trouvé ma solution pour mettre les valeurs des registres dans un tableau :p

Reply

Marsh Posté le 15-03-2006 à 12:58:13   

Reply

Marsh Posté le 15-03-2006 à 15:09:38    

Merci à Push pour l'url :} Je n'avais pas vu ton post. Ca m'aide pas mal.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed