#define switch_to(prev,next,last) do { \
unsigned long esi,edi; \
asm volatile("pushl %%ebp\n\t" \
"movl %%esp,%0\n\t" /* save ESP */ \
"movl %5,%%esp\n\t" /* restore ESP */ \
"movl $1f,%1\n\t" /* save EIP */ \
"pushl %6\n\t" /* restore EIP */ \
"jmp __switch_to\n" \
"1:\t" \
"popl %%ebp\n\t" \
:"=m" (prev->thread.esp),"=m" (prev->thread.eip), \
"=a" (last),"=S" (esi),"=D" (edi) \
:"m" (next->thread.esp),"m" (next->thread.eip), \
"2" (prev), "d" (next)); \
} while (0)
switch_to()ÇÔ¼ö°¡ defineÀ¸·Î Àü󸮰¡ µÇ¾î ÀÖ´Ù´Ï...
±×³ªÀú³ª Àú 4¹øÂ° ÁÙ¿¡ "movl %%esp,%0\n\t" <- ÀÌ ¹®¹ýÀ» ¾î¶»°Ô ÇØ¼®ÇØ¾ß µÉ±î¿ä?
Ã¥¿¡¼± °£´ÜÇÏ°Ô "prev·Î Ç¥½ÃµÉ ÇÁ·Î¼¼½ºÀÇ ESP ·¹Áö½ºÅ͸¦ ¹é¾÷ÇØ µÎ°í..."¶ó°í ³ª¿À´Âµ¥
Àú´Â Àú ¾î¼Àºí¸®¾îÀÇ ÀÛµ¿°úÁ¤°ú ¿ø¸®°¡ ±Ã±ÝÇÕ´Ï´Ù.
p.s. ¾î¼À °øºÎ Á» ÇØµÑ °É... ¤Ð¤Ð |