Forklaring @ soreno
Jeg henviser til http://www.eksperten.dk/spm/277815 og følgende kode:Hvad gør nedestående kald præcist? Henter hvad der står på de adresser og lægger dem ind i de long's der er defineret?
asm(".byte 0x0f, 0xa2" : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) : "a" (0));
char vendorID[64] = "";
int i=0;
int ch=0;
Hvad gør du i denne for løkke?
for(i = 0; i < 4; i++) {
vendorID[ch] = ebx >> (8*i);
ch++;
}
for(i = 0; i < 4; i++) {
vendorID[ch] = edx >> (8*i);
ch++;
}
for(i = 0; i < 4; i++) {
vendorID[ch] = ecx >> (8*i);
ch++;
}
//CPUID
Her kommer du så nogle nye værdier ind i eax,ebx,ecx og edx?
asm(".byte 0x0f, 0xa2" : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) : "a" (1));
Hvad gør du her?
model = (eax >> 4) & 0xf;
family = (eax >> 8) & 0xf;