كيف تكتشف نوع بنية وحدة المعالجة المركزية خلال وقت التشغيل مع دول مجلس التعاون الخليجي والقصيرة ASM؟

StackOverflow https://stackoverflow.com/questions/1917761

سؤال

أحتاج إلى العثور على نوع الهندسة المعمارية من وحدة المعالجة المركزية. ليس لدي إمكانية الوصول إلى / بروك / 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;
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top