كيف تكتشف نوع بنية وحدة المعالجة المركزية خلال وقت التشغيل مع دول مجلس التعاون الخليجي والقصيرة ASM؟
-
20-09-2019 - |
سؤال
أحتاج إلى العثور على نوع الهندسة المعمارية من وحدة المعالجة المركزية. ليس لدي إمكانية الوصول إلى / بروك / CPUINFO، حيث يتم تشغيل الجهاز Syslineux. أعلم أن هناك طريقة للقيام بذلك مع مضمون ASM، ومع ذلك أعتقد أن بناء الجملة الخاص بي غير صحيح كما لا يتم تعيين iedx المتغير الخاص بي بشكل صحيح.
أنا من الدرجة الأولى مع ASM، وعدم وجود خبير. إذا كان لدى أي شخص أي نصائح أو يمكن أن يشيرني في الاتجاه الصحيح، فسأكون ملزما كثيرا.
static int is64Bit(void) {
int iedx = 0;
asm("mov %eax, 0x80000001");
asm("cpuid");
asm("mov %0, %%eax" : : "a" (iedx));
if ((iedx) && (1 << 29))
{
return 1;
}
return 0;
}
المحلول
كم عدد الأخطاء التي يمكن أن تناسبها في خطوط قليلة؛)
محاولة
static int is64bit(void) {
int iedx = 0;
asm volatile ("movl $0x80000001, %%eax\n"
"cpuid\n"
: "=d"(iedx)
: /* No Inputs */
: "eax", "ebx", "ecx"
);
if(iedx & (1 << 29))
{
return 1;
}
return 0;
}
لا تنتمي إلى StackOverflow