This is a CPUID code.
It successfully compiled on Pelles C.
So I'd like to compile it on MinGW. Since I don't wanna use the AT&T syntax, I change the code a little bitCode://Author - Niloy Mondal //Reference - Intel Instruction Set Reference Volume 2 #include <stdio.h> #include <conio.h> int main() { char *strFeatures[32]={ "FPU - x87 FPU on Chip", "VME - Virtual 8086 Enhancement", "DE - Debugging Extensions", "PSE - Page Size Extensions", "TSC - Time Stamp Counter", "MSR - RDMSR and WRMSR Support", "PAE - Physical Address Extensions", "MCE - Machine Check Exception", "CX8 - CMPXCHG8B instruction", "APIC - Advanced Programmable Interrupt Controller on Chip", " ", //Reserved "SEP - SYSENTER and SYSEXIT", "MTRR - Memory Type Range Register", "PGE - PTE Global Bit", "MCA - Machine Check Architecture", "CMOV - Condtional Move/Compare Instruction", "PAT - Page Attribute Table", "PSE-32 - Page Size Extension", "PSN - Processor Serial Number", "CLFSH - CFLUSH Instruction", " ", //Reserved "DS - Debug Store", "ACPI - Thermal Monitor and Clock Control", "MMX - MMX Technology", "FXSR - FXSAVE/FXRSTOR", "SSE- SSE Extensions", "SSE2 - SSE2 Extensions", "SS - Self Snoop", "HTT - Hyper Threading Tech", "TM - Thermal Monitor", " ", //Reserved "PBE - Pend. Brk. En"}; char VendorID[13]; unsigned char SteppingID; unsigned char Model; unsigned char Family; unsigned char ProcessorType; unsigned char Brand; unsigned long VersionInfo; unsigned long FeatureInfo; _asm { mov eax,0 cpuid //CPUID Instruction mov dword ptr [VendorID],ebx mov dword ptr [VendorID+4],edx mov dword ptr [VendorID+8],ecx mov byte ptr [VendorID+12],0 } //Show the Vendor ID. Should be "GenuineIntel" if the processor is Intel"///////////// printf("Your processor is a %s\n",VendorID); //Store all the required information in memory//////////////////////////////////////// _asm { mov eax,1 cpuid //CPUID Instruction mov VersionInfo,eax //Store Version Information mov FeatureInfo,edx //Store Feature Information mov Brand,bl //Store Brand Information } ////////////////////////////////////////////////////////////////////////////////////// //Extract the SteppingID, model and family from the bit encoded VersionInfo and display SteppingID = VersionInfo & 0x0F; //Stepping ID Model = (VersionInfo & 0xF0)>>4; //Model Family = (VersionInfo & 0x0F00)>>8; //Family ProcessorType = (VersionInfo & 3000)>>12; //Processor Type printf("Stepping ID : %5d\n",SteppingID); printf("Model : %5d\n",Model); printf("Family : %5d\n",Family); ////////////////////////////////////////////////////////////////////////////////////// //Show the Processor Type///////////////////////////////////////////////////////////// switch(ProcessorType) { case 0: printf("Processor Type : Original OEM Processor\n"); break; case 1: printf("Processor Type : Intel OverDrive Processor\n"); break; case 2: printf("Processor Type : Dual Processor\n"); break; case 3: printf("Processor Type : Intel reserved\n"); } ////////////////////////////////////////////////////////////////////////////////////// //Show the Computer Brand///////////////////////////////////////////////////////////// printf("Your Computer Brand is :- "); switch(Brand) { case 0x00: printf("This Processor does not support the brand identification feature");break; case 0x01: printf("Intel Celeron processor");break; case 0x02: printf("Intel Pentium III processor");break; case 0x03: printf("Intel Pentium III Xeon or Intel Celeron processor");break; case 0x04: printf("Intel Pentium III processor");break; case 0x06: printf("Mobile Intel Pentium III processor-M");break; case 0x07: printf("Mobile Intel Celeron processor");break; case 0x08: printf("Intel Pentium 4 processor");break; case 0x09: printf("Intel Pentium 4 processor");break; case 0x0A: printf("Intel Celeron processor");break; case 0x0B: printf("Intel Xeon processor or Xeon processor MP");break; case 0x0C: printf("Intel Xeon processor MP");break; case 0x0E: printf("Mobile Intel Pentium 4 or Intel Xeon processor");break; case 0x0F: printf("Mobile Intel Celeron processor");break; case 0x13: printf("Mobile Intel Celeron processor");break; case 0x16: printf("Intel Pentium M processor");break; default: printf("Future Processor"); } printf("\n---------------------Press any key to continue more----------------\n"); _getch(); ///////////////////////////////////////////////////////////////////////////////////// //Show the Processor Features//////////////////////////////////////////////////////// printf("Your Processor has the following Features:-\n"); for(long i=0;i<32;i++) { _asm xor ebx,ebx _asm mov ebx,i _asm bt FeatureInfo,ebx //"bt" is opcode to test a particular bit(on/off) in a string //The bit number to test is provided as the second operand //The result is stored in the carry flag _asm jnc Feature_not_installed printf("%s\n",strFeatures[i]); Feature_not_installed: ; } ////////////////////////////////////////////////////////////////////////////////////// printf("************************Programmer - Niloy Mondal***********************"); return 1; }
like these :
Try to compile using this command :Code:#include <stdio.h> int main() { char *strFeatures[32] = { "FPU - x87 FPU on Chip","VME - Virtual 8086 Enhancement", "DE - Debugging Extensions","PSE - Page Size Extensions", "TSC - Time Stamp Counter","MSR - RDMSR and WRMSR Support", "PAE - Physical Address Extensions","MCE - Machine Check Exception", "CX8 - CMPXCHG8B Instruction","APIC - Advance Programmable Interrupt Controller On Chip", " ","SEP - SYSENTER and SYSECIT","MTRR - Memory Type Range Register","PGE - PTE Global Bit", "MCA - Machine Check Architecture","CMOV - Conditional Move/Compare Instruction", "PAT - Page Attribute Table","PSE-32 - Page Size Extension", "PSN - Processor Serial Number","CFLUSH - CFLUSH Instruction", "", "DS - Debug Store","ACPI - Thermal Monitor and Clock Control","MMX - MMX Technology", "FXSR - FXSAVE/FXRSTOR","SSE - SSE Extensions","SSE2 - SSE2 Extensions", "SS - Self Snoop","HTT - Hyper Threading Tech","TM - Thermal Monitor", " ","PBE - Pend. Brk. En"}; long i; char VendorID[13]; unsigned char SteppingID; unsigned char Model; unsigned char Family; unsigned char ProcessorType; unsigned char Brand; unsigned long VersionInfo; unsigned long FeatureInfo; asm(".intel_syntax noprefix\n"); asm("mov eax,0\n"); asm("cpuid\n"); asm("mov dword ptr [VendorID],ebx\n"); asm("mov dword ptr [VendorID+4],edx\n"); asm("mov dword ptr [VendorID+8],ecx\n"); asm("mov byte ptr [VendorID+12],0\n"); printf("Your processor is a %s\n",VendorID); asm("mov eax,1\n"); asm("cpuid\n"); asm("mov VersionInfo,eax\n"); asm("mov FeatureInfo,edx\n"); asm("mov Brand,bl\n"); SteppingID = VersionInfo & 0x0F; Model = (VersionInfo & 0xF0) >> 4; Family = (VersionInfo & 0xF00) >> 8; ProcessorType = (VersionInfo & 3000) >> 12; printf("SteppingID : %5d\n",SteppingID); printf("Model : %5d\n",Model); printf("Family : %5d\n",Family); switch(ProcessorType) { case 0: printf("Processor type : Original OEM processor\n"); break; case 1: printf("Processor type : Intel OverDrive processor\n"); break; case 2: printf("Processor type : dual processor\n"); break; case 3: printf("Processor type : Intel reserved\n"); break; } printf("Your computer brand is : "); switch(Brand) { case 0x00: printf("This procesor doesn't support the brand identification feature"); break; case 0x01: printf("Intel Celeron processor"); break; case 0x02: printf("Intel Pentium III processor"); break; case 0x03: printf("Intel Pentium III Xeon or Intel Xeon processor"); break; case 0x04: printf("Intel Pentium III processor"); break; case 0x06: printf("Mobile Intel Pentium III processor"); break; case 0x07: printf("Mobile Intel Celeron processor"); break; case 0x08: printf("Intel Pentium 4 processor"); break; case 0x09: printf("Intel Pentium 4 processor"); break; case 0x0A: printf("Intel Celeron processor"); break; case 0x0B: printf("Intel Xeon processor or Xeon processor MP"); break; case 0x0C: printf("Intel Xeon processor MP"); break; case 0x0E: printf("Mobile Intel Pentium 4 or Intel Xeon processor"); break; case 0x0F: printf("Mobile Intel Celeron processor"); break; case 0x13: printf("Mobile Intel Celeron processor"); break; case 0x16: printf("Intel Pentium M processor"); break; default: printf("Future processor"); } printf("\n--------------- Press any key to continue ---------------\n"); getch(); printf("Your processor has the following features :\n"); for (i = 0; i < 32; i++) { asm("xor ebx,ebx\n"); asm("mov ebx,i\n"); asm("bt FeatureInfo,ebx\n"); asm("jnc Feature_not_installed\n"); printf("%s\n",strFeatures[i]); asm("Feature_not_installed: \n"); } return 1; }
gcc -masm=intel cpuid.c -o cpuid
And these are the error messages :
So how should I use Intel syntax on MinGW ?Code:C:/DOCUME~1/ADMINI~1.DIV/LOCALS~1/Temp/cceKbaaa.o:cpuid.c:(.text+0x5c): undefined reference to `VendorID' C:/DOCUME~1/ADMINI~1.DIV/LOCALS~1/Temp/cceKbaaa.o:cpuid.c:(.text+0x62): undefined reference to `VendorID' C:/DOCUME~1/ADMINI~1.DIV/LOCALS~1/Temp/cceKbaaa.o:cpuid.c:(.text+0x68): undefined reference to `VendorID' C:/DOCUME~1/ADMINI~1.DIV/LOCALS~1/Temp/cceKbaaa.o:cpuid.c:(.text+0x6e): undefined reference to `VendorID' C:/DOCUME~1/ADMINI~1.DIV/LOCALS~1/Temp/cceKbaaa.o:cpuid.c:(.text+0x91): undefined reference to `VersionInfo' C:/DOCUME~1/ADMINI~1.DIV/LOCALS~1/Temp/cceKbaaa.o:cpuid.c:(.text+0x97): undefined reference to `FeatureInfo' C:/DOCUME~1/ADMINI~1.DIV/LOCALS~1/Temp/cceKbaaa.o:cpuid.c:(.text+0x9d): undefined reference to `Brand' C:/DOCUME~1/ADMINI~1.DIV/LOCALS~1/Temp/cceKbaaa.o:cpuid.c:(.text+0x30e): undefined reference to `i' C:/DOCUME~1/ADMINI~1.DIV/LOCALS~1/Temp/cceKbaaa.o:cpuid.c:(.text+0x315): undefined reference to `FeatureInfo' collect2: ld returned 1 exit status



LinkBack URL
About LinkBacks



CornedBee