inline asm "0" constraint 관련 질문
글쓴이: hongwoo / 작성시간: 월, 2009/03/16 - 2:24오후
x86이고 커널레벨에서 돌아가는 코드중 일부입니다.
... #define __OP "e" /* Operand Prefix */ ... 1: static inline struct cpu_info *get_cpu_info(void) 2: { 3: struct cpu_info *cpu_info; 4: __asm__ ( "and %%"__OP"sp,%0; or %2,%0" 5: : "=r" (cpu_info) 6: : "0" (~(STACK_SIZE-1)), "i" (STACK_SIZE-sizeof(struct cpu_info)) 7: ); 8: return cpu_info; 9: }
위의 코드가 대략 아래와 같은 코드로 만들어 지는것 같은데요...
... and %esp, cpu_info; or (STACK_SIZE-sizeof(struct cpu_info)), cpu_info; ...
그렇다면, 여기서 9번째 줄의 "0" (~(STACK_SIZE-1)) 은 무슨 역할을 하는건지 알려주시면 감사하겠습니다.
Forums:
%0에 초기 값을 지정하는겁니다.
최종 어셈블리 코드를 보시면 inline assembly로 작성한 코드 위쪽에 다음과
같은 코드 한 줄이 더 추가되어 있을 겁니다.
reg는 위에서 cpu_info로 해석해 놓은 레지스터가 됩니다.
자세한 내용은 이쪽을 참고 하시길.
http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html
댓글 달기