asm에서 cpuid를 얻어오는 부분에대한 질문.
글쓴이: cho's / 작성시간: 화, 2003/11/11 - 12:06오후
안녕하세요. 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; }
Forums:
댓글 달기