asm에서 cpuid를 얻어오는 부분에대한 질문.

cho's의 이미지

안녕하세요. gas 문법중에 질문이 있어 이렇게 조언을 구합니다.
궁금한것은
gas에서 마지막 라인에 :"0"(index)); 부분에서 "0"이 의미하는 바가 무엇인지 궁금합니다. 현재 gas와 masm의 cpuID코드입니다.
gas에서는 ELF포맷의 PIC(위치 비의존 코드)로 인해서 ebx를 esi에 저장하고 시작하는것 외에는 크게 다른 바가 없습니다.
여기에서 op는 initial eax value가 됩니다.

//ebx saving is necessary for PIC.
#define cpuid(op, eax, ebx, ecx, edx)\
__asm__volatile \ 
("movl %%ebx, %%esi \n\t" \
"cpuid \n\t" \
"xchgl %%ebx, %%esi " \
:"=a" (eax), "=S" (ebx), "=c"(ecx), "=d"(edx) \
:"0"(op));

win32

static void cpuid(int op, int *eax0,int *ebx0, int *ecx0, int *edx0)
{
int a, b, c, d;
__asm {
  mov eax, op
  cpuid
  mov a, eax
  mov b, ebx
  mov c, ecx,
  mov d, edx
}
 *eax0 = a;
 *ebx0 = b;
 *ecx0 = c;
 *edx0 = d; 
}