어셈블리어에 대해 문의 드립니다.
안녕하세요? 리눅스 입문한지 얼마안된 프로그래머 입니다.
소스코드를 분석중인데요, 이해가 되지않는 부분이 있어서 문의 드립니다.
고수님들의 도움 부탁드리겠습니다. ^^
15 #define switch_to(prev,next,last) do { \
16 unsigned long esi,edi; \
17 asm volatile("pushl %%ebp\n\t" \
18 "movl %%esp,%0\n\t" /* save ESP */ \
19 "movl %5,%%esp\n\t" /* restore ESP */ \
20 "movl $1f,%1\n\t" /* save EIP */ \
21 "pushl %6\n\t" /* restore EIP */ \
22 "jmp __switch_to\n" \
23 "1:\t" \
24 "popl %%ebp\n\t" \
25 :"=m" (prev->thread.esp),"=m" (prev->thread.eip), \
26 "=a" (last),"=S" (esi),"=D" (edi) \
27 :"m" (next->thread.esp),"m" (next->thread.eip), \
28 "2" (prev), "d" (next)); \
19번째 라인에서 %5의 의미가 무엇인지요? 전 처음에 인자중에 하나 (prev,next,last)라고 생각했습니다만, 5의 숫자가 나와서..의미가 궁금합니다.
또 %%esp와 %esp와의 차이가 무엇인지요..
기초적인 질문같습니다만, 도움주시면 감사하겠습니다. 감사합니다. 좋은하루보내세요!
http://www.ibiblio.org/gferg/
http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html
참고하세요.
댓글 달기