Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[C][ASM] - macro switch_to del kernel 2.4
View unanswered posts
View posts from last 24 hours
View posts from last 7 days

 
Reply to topic    Gentoo Forums Forum Index Forum italiano (Italian)
View previous topic :: View next topic  
Author Message
n3m0
l33t
l33t


Joined: 08 Feb 2004
Posts: 798
Location: Richville, Naples, Italy, Europe

PostPosted: Sat Oct 30, 2004 1:59 pm    Post subject: [C][ASM] - macro switch_to del kernel 2.4 Reply with quote

Non sono molto pratico dell'assembler embedded in codice C.
C'è qualcuno di voi che lo è?
Avrei bisogno di una spiegazione delle righe dopo i tre pop.
Non tanto di cosa facciano all'interno del kernel, questo me o scopro da solo, ma di come si "leggono".
Spero di essere stato chiaro.
Ciao!

Code:
#define switch_to(prev,next,last) do {                  \
    asm volatile("pushl %%esi\n\t"                  \
             "pushl %%edi\n\t"                  \
             "pushl %%ebp\n\t"                  \
             "movl %%esp,%0\n\t"    /* save ESP */      \
             "movl %3,%%esp\n\t"    /* restore ESP */   \
             "movl $1f,%1\n\t"      /* save EIP */      \
             "pushl %4\n\t"     /* restore EIP */   \
             "jmp __switch_to\n"                \
             "1:\t"                     \
             "popl %%ebp\n\t"                   \
             "popl %%edi\n\t"                   \
             "popl %%esi\n\t"                   \
             :"=m" (prev->thread.esp),"=m" (prev->thread.eip),  \
              "=b" (last)                   \
             :"m" (next->thread.esp),"m" (next->thread.eip),    \
              "a" (prev), "d" (next),               \
              "b" (prev));                  \
} while (0)

_________________
L’energia è la civiltà. Lasciarla in mano ai piromani/petrolieri è criminale. Perché aspettare che finisca il petrolio?
L’età della pietra non è mica finita per mancanza di pietre. - B.G.


Site/Blog: http://www.neminis.org
Back to top
View user's profile Send private message
theRealMorpheu5
l33t
l33t


Joined: 26 Feb 2004
Posts: 841
Location: Vicenza, IT

PostPosted: Sat Oct 30, 2004 2:54 pm    Post subject: Reply with quote

Vediamo se ho capito, tu vuoi sapere quelle cose con i : in mezzo, giusto? Ebbene, la sintassi "spannometrica" della direttiva asm() è questa:

Code:
asm("mnemonici varii":<output>:<input>:<clobbered>);

In sostanza:
<output> è la lista dei parametri di output dei vari opcode, serve a inserire in variabili C quello che altrimenti finirebbe su registri o indirizzi di memoria, molto in soldoni;
<input> è la lista dei parametri di input come se li passassi direttamente in linea sugli mnemonici. Anche questa è una lista di variabili in cui sono contenuti i valori che intendi passare;
<clobbered> di solito è una lista di registri - ma ho visto specificare anche "memory" talvolta - e serve ad informare il compilatore di quali registri/aree di memoria andranno toccati dal codice di modo che lui possa cautelarsi come meglio crede.

Parliamo ora delle cosine tra "" tipo "=m" e via dicendo: la differenza è tra output (con "=" prima delle lettere) e input (senza "="). Per il resto i significati sono identici. quelli che ricordo a memoria sono:

a, b, c, d, S, D dovrebbero essere: (e)a(x/h/l), (e)b(x/h/l), (e)c(x/h/l), (e)d(x/h/l), (e)si ed (e)di. in pratica i registri general purpose e i due registri indice.
m dovrebbe essere per "memory" ma non conosco l'esatto significato.
p potrebbe stare per "pointer" ma non l'ho mai visto funzionare - anche se l'ho visto in qualche codice.
r sta per "register", un registro a caso che non specifichi, lasci al compilatore decidere quale sia meglio per lui. qualche volta potrebbe decidere di usare lo stack, per motivi di efficenza.

Poi gli altri non li ricordo a memoria, su www.osdever.net mi pare ci sia un tutorial in merito.
Back to top
View user's profile Send private message
n3m0
l33t
l33t


Joined: 08 Feb 2004
Posts: 798
Location: Richville, Naples, Italy, Europe

PostPosted: Sun Oct 31, 2004 9:38 am    Post subject: Reply with quote

Grazie, mi hai fornito l'input che cercavo :)
_________________
L’energia è la civiltà. Lasciarla in mano ai piromani/petrolieri è criminale. Perché aspettare che finisca il petrolio?
L’età della pietra non è mica finita per mancanza di pietre. - B.G.


Site/Blog: http://www.neminis.org
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Forum italiano (Italian) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum