هل يستخدم جهازك المستند إلى AMD Little Endian أو Big Endian؟

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

سؤال

أنا ذاهب على الرغم من دورة نظام أجهزة الكمبيوتر وأحاول تأسيسها ، بالتأكيد, ، إذا كان جهاز الكمبيوتر القائم على AMD هو آلة إنديان صغيرة؟ أعتقد أنه سيكون متوافقًا مع Intel.

على وجه التحديد ، المعالج الخاص بي هو AMD 64 Athlon X2.

أنا أفهم أن هذا يمكن أن يهم في البرمجة C. أنا أكتب برامج C وطريقة أستخدمها ستتأثر بهذا. أحاول معرفة ما إذا كنت سأحصل على نفس النتائج إذا قمت بتشغيل البرنامج على جهاز يعتمد على Intel (على افتراض ذلك هو آلة إنديان الصغيرة).

أخيرًا ، اسمحوا لي أن أسأل هذا: هل أي وجميع الآلات قادرة على تشغيل Windows (XP ، Vista ، 2000 ، Server 2003 ، إلخ) ، على سبيل المثال ، Ubuntu Linux Desktop كن قليلا إنديان؟

شكرا لك،
صريح

هل كانت مفيدة؟

المحلول

جميع آلات X86 و X86-64 (وهي مجرد امتداد إلى X86) هي صغيرة منديات.

يمكنك تأكيد ذلك بشيء مثل هذا:

#include <stdio.h>
int main() {
    int a = 0x12345678;
    unsigned char *c = (unsigned char*)(&a);
    if (*c == 0x78) {
       printf("little-endian\n");
    } else {
       printf("big-endian\n");
    }
    return 0;
}

نصائح أخرى

يتم سرد طريقة سهلة لمعرفة Endiannes في المقالة كتابة الكود المستقل عن الإنديان في ج

const int i = 1;
#define is_bigendian() ( (*(char*)&i) == 0 )

على افتراض أنك قمت بتثبيت Python ، يمكنك تشغيل هذا الخطية الواحدة ، والتي ستطبع "القليل" على آلات صغيرة إنديان و "كبيرة" على تلك الكبرى:

python -c "import struct; print 'little' if ord(struct.pack('L', 1)[0]) else 'big'"

"متوافق مع Intel" ليس دقيقًا جدًا.

استخدمت Intel لصنع المعالجات الكبيرة ، لا سيما Strongarm و XSCALE. هذه لا تستخدم IA32 ISA ، والمعروفة باسم x86.

بعد العودة إلى التاريخ ، قامت Intel أيضًا بتصنيع I860 و I960 Little-Indian ، والتي لا تتوافق أيضًا مع X86.

علاوة على ذلك في التاريخ ، فإن الأجزاء المسبقة لـ X86 (8080 ، 8008 ، وما إلى ذلك) ليست متوافقة مع X86 أيضًا. كونها معالجات 8 بت ، لا يهم حقًا ...

في الوقت الحاضر ، لا تزال Intel تصنع Itanium (IA64) ، وهي ثنائية إنديان: العملية العادية هي إنديان كبيرة ، ولكن يمكن للمعالج أيضًا أن يعمل في وضع صغير إنديان. يحدث أن يكون قادرًا على تشغيل رمز X86 في الوضع الصغير ، ولكن ISA الأصلي ليس IA32.

على حد علمي ، كانت جميع معالجات AMD متوافقة مع X86 ، مع بعض الامتدادات مثل x86_64 ، وبالتالي فهي بالضرورة endian.

يتوفر Ubuntu لـ X86 (Little-Endian) و X86_64 (Little-Endian) ، مع منافذ أقل اكتمالًا لـ IA64 (Big-Endian) ، Arm (EL) (Little-Endian) ، PA-RISC (Big-Endian ، على الرغم من يدعم المعالج كلاهما) ، PowerPC (Big-Endian) ، و SPARC (Big-Endian). لا أعتقد أن هناك ميناء ذراع (EB) (الكبير الإنديان).

ردا على سؤالك الأخير ، الجواب هو لا. Linux قادرة على تشغيل آلات Endian الكبيرة مثل EG ، الجيل الأقدم PowerMacs.

يجب عليك تنزيل إصدار من Ubuntu المصمم لآلات Endian الكبيرة. أنا أعرف فقط من PowerPC الإصدارات. أنا متأكد من أنه يمكنك العثور على مكان يحتوي على تطبيق كبير أكثر وضوحًا.

/* by Linas Samusas  */

#ifndef _bitorder 
#define _bitorder 0x0008

#if (_bitorder > 8)
#define BE
#else
#define LE
#endif

واستخدام هذا

#ifdef LE
#define Function_Convert_to_be_16(value)  real_function_to_be_16(value)
#define Function_Convert_to_be_32(value)  real_function_to_be_32(value)
#define Function_Convert_to_be_64(value)  real_function_to_be_64(value)
#else
#define Function_Convert_to_be_16
#define Function_Convert_to_be_32
#define Function_Convert_to_be_64
#endif

إذا لو

unsigned long number1 = Function_Convert_to_be_16(number2);

*سيقوم الماكرو بالاتصال بالوظيفة الحقيقية وسيتم تحويله إلى

إذا كان

unsigned long number1 = Function_Convert_to_be_16(number2);

*سيتم تعريف الماكرو على أنها كلمة ليست وظيفة وسيكون رقمك بين قوسين

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top