2009-06-21 12 views
29

मैं कंप्यूटर सिस्टम कोर्स के बावजूद जा रहा हूं और मैं को के लिए स्थापित करने की कोशिश कर रहा हूं, अगर मेरा एएमडी आधारित कंप्यूटर थोड़ा एंडियन मशीन है? मेरा मानना ​​है कि ऐसा इसलिए है क्योंकि यह इंटेल-संगत होगा।क्या मेरी एएमडी-आधारित मशीन थोड़ा एंडियन या बड़ा एंडियन का उपयोग करती है?

विशेष रूप से, मेरा प्रोसेसर एक एएमडी 64 एथलॉन x2 है।

मैं समझता हूं कि यह सी प्रोग्रामिंग में महत्वपूर्ण हो सकता है। मैं सी प्रोग्राम लिख रहा हूं और एक विधि जिसका मैं उपयोग कर रहा हूं उससे प्रभावित होगा। मैं यह पता लगाने की कोशिश कर रहा हूं कि अगर मैं इंटेल आधारित मशीन पर प्रोग्राम चलाता हूं तो मुझे एक ही परिणाम मिलेंगे (मानते हैं कि छोटी एंडियन मशीन है)।

अंत में, मुझे यह पूछने दो: क्या कोई और सभी मशीनें विंडोज़ (एक्सपी, विस्टा, 2000, सर्वर 2003, आदि) चलाने में सक्षम हैं और कहें, Ubuntu Linux desktop थोड़ा एंडियन हो?

धन्यवाद,
फ्रैंक

उत्तर

65

सभी 86 और x86-64 मशीनों (जो 86 के लिए सिर्फ एक विस्तार है) थोड़ा-endian हैं।

आप कुछ इस तरह से यह पुष्टि कर सकते हैं: अपने अंतिम प्रश्न के

#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; 
} 
+1

के बीच होगा अंतिम प्राइ में आपके कोड में एक छोटा टाइपो है एनटीएफ: printf ("बड़ा-एंडियन \ n"); कोड ने मुझे पुष्टि करने की अनुमति दी। धन्यवाद। –

+0

फिक्स्ड। इस पर ध्यान दिलाने के लिए धन्यवाद। –

+2

कानूनी होने पर, मुख्य प्रकार के रिटर्न प्रकार को छोड़ने के साथ-साथ अंत में "वापसी 0" को छोड़ना भी बुरा व्यवहार है। –

3

जवाब में, जवाब नहीं है। लिनक्स बड़ी एंडियन मशीनों जैसे कि पुरानी पीढ़ी पावरमैक्स पर चलने में सक्षम है।

+0

वह वितरण है, जिसे मैंने लिंक किया है, जो कि बड़े एंडियन पर चलाने में सक्षम है। मेरे प्रश्न के उस हिस्से के पते के लिए धन्यवाद। –

+0

मुझे लगता है कि वे पूछ रहे हैं कि क्या वे ऑपरेटिंग सिस्टम छोटी एंडियन मशीनों पर चल सकते हैं, जो वे कर सकते हैं। वास्तव में, मुझे लगता है कि उन्हें पुरानी पीढ़ी के पावरमैक्स के लिए विशेष संस्करण बनाना है क्योंकि पावरपीसी आर्किटेक्चर बड़ा-एंडियन है। – mnuzzo

+2

अब उबंटू में एआरएम समर्थन है, यह "उबंटू" के लिए एक बड़े एंडियन प्रोसेसर पर चलने के लिए संभव है। हालिया एआरएम कोर या तो छोटे या बड़े एंडियन मोड में चल सकते हैं। – Mark

2

आपको उबंटू का एक संस्करण डाउनलोड करना है जो बड़ी एंडियन मशीनों के लिए डिज़ाइन किया गया है। मैं केवल PowerPC संस्करणों के बारे में जानता हूं। मुझे यकीन है कि आप कुछ जगह पा सकते हैं जिसमें अधिक सामान्य बड़े-एंडियन कार्यान्वयन है।

+0

मैं समझता हूं। आपको धन्यवाद और लिंक के लिए धन्यवाद। –

+0

उबंटू के दूसरे श्रेणी के बंदरगाहों में ia64, आर्मेल, एचपीपीए, पावरपीसी, और स्पार्क शामिल हैं। पहले रिलीज में, पावरपीसी एक प्रथम श्रेणी का बंदरगाह था, और वहां एक रिलीज थी जहां एसपीएआरसी भी वहां था। – ephemient

6

में सूचीबद्ध है "इंटेल-संगत" बहुत ही सटीक नहीं है।

इंटेल बड़े-एंडियन प्रोसेसर बनाने के लिए उपयोग करता था, विशेष रूप से स्ट्रॉन्गर्म और एक्सस्केल। ये आईए 32 आईएसए का उपयोग नहीं करते हैं, जिसे आमतौर पर x86 के नाम से जाना जाता है।

इतिहास में आगे, इंटेल ने थोड़ा-एंडियन i860 और i960 भी बनाया, जो x86- संगत नहीं हैं।

इतिहास में आगे, x86 (8080, 8008, आदि) के पूर्ववर्ती x86- संगत नहीं हैं। 8-बिट प्रोसेसर होने के नाते, अंतहीनता वास्तव में कोई फर्क नहीं पड़ता ...

आजकल, इंटेल अभी भी इटेनियम (आईए 64) बनाता है, जो द्वि-एंडियन है: सामान्य ऑपरेशन बड़ा-एंडियन है, लेकिन प्रोसेसर भी चला सकता है थोड़ा एंडियन मोड। यह x86 कोड को छोटे-अंत मोड में चलाने में सक्षम होने के लिए होता है, लेकिन मूल आईएसए IA32 नहीं है।

मेरे ज्ञान के लिए, सभी एएमडी के प्रोसेसर x86- संगत हैं, कुछ एक्सटेंशन जैसे x86_64, और इस प्रकार आवश्यक रूप से छोटे-अंत हैं।

उबंटू 8664 (बड़े-एंडियन), एआरएम (एल) (एआरएम (एल) (पीए-आरआईएससी) (पीए-आरआईएससी) के लिए कम पूर्ण बंदरगाहों के साथ x86 (छोटे-एंडियन) और x86_64 (छोटे-एंडियन) के लिए उपलब्ध है। एंडियन, हालांकि प्रोसेसर दोनों का समर्थन करता है), पावरपीसी (बिग-एंडियन), और एसपीएआरसी (बिग-एंडियन)। मुझे विश्वास नहीं है कि एक एआरएम (ईबी) (बड़ा-एंडियन) बंदरगाह है।

+0

वाह, विस्तार के लिए धन्यवाद। यह बहुत अच्छी जानकारी है। –

+1

दो मामूली सुधार: 8 बिट प्रोसेसर के लिए एंडियननेस भी मायने रखता है क्योंकि कुछ निर्देश 16 बिट मात्रा जैसे पते ('एलडीए $ 1234' (पते $ 1234 से बाइट लोड करना) को 6502 पर कोड 'एडी 34 12' कोडित किया जाएगा। और एएमडी ने किया x86 की तुलना में एक और आर्किटेक्चर है यह 2 9 000 श्रृंखला आरआईएससी प्रोसेसर था जो लेजर प्रिंटर जैसे एम्बेडेड डिज़ाइनों में बहुत लोकप्रिय था। –

+0

@tristopia जानकारी के लिए धन्यवाद, मुझे उन सभी के बारे में पता नहीं था। – ephemient

11

मान लिया जाये कि आप Python स्थापित है, तो आप इस एक लाइनर, जो थोड़ा-endian मशीनों पर प्रिंट होगा "छोटे" और बड़े endian वालों पर "बड़े" चला सकते हैं:

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

मेरे पास पाइथन स्थापित है। धन्यवाद कोड के लिए। –

1

endianness व्हाइट से कागज इंटेल कॉर्प प्रकाशित नवंबर 15, 2004 http://www.intel.com/design/intarch/papers/endian.pdf

 
Contents 
========= 
Introduction .................................................5 
Analysis  .................................................5 
    Code Portability .........................................5 
    Shared Data ..............................................5 
    Best Known Methods .......................................5 

Definition of Endianness .....................................5 

Merits of Endian Architectures ...............................6 
    Relevance of Endian Order ................................7 

Byte Swapping ................................................8 
    Byte Swapping Methods ....................................8 
     Network I/O Macros ...................................8 
     Custom Byte Swap Macros ..............................9 
    Byte Swap Controls .......................................9 
     Compile Time Controls ...............................10 
     Run Time Controls ...................................10 
    Recovering Byte Swap Overhead ...........................11 

Platform Porting Considerations .............................11 
    Data Storage and Shared Memory ..........................11 
    Data Transfer ...........................................12 
    Data Types ..............................................12 
     Unions ..............................................12 
     Byte Arrays .........................................12 
     Bit Fields and Bit Masks ............................12 
     Pointer Casts .......................................13 
    Native Data Types .......................................14 

Endian-Neutral Code .........................................14 

Guidelines for Implementing Endian-neutral Code .............15 
    Endian-neutral Coding Practices .........................15 
    Code Analysis ...........................................15 
     The Good ............................................16 
     The Bad .............................................16 
     The Ugly ............................................16 

Converting Endian-specific to Endian-neutral Code ...........16 

Reversing Endian-specific Architecture of Code ..............16 

Conclusion ..................................................17 
+1

मैं आपके योगदान की सराहना करता हूं, हालांकि एंडियननेस पर एक श्वेत पत्र (इंटेल से कम नहीं) इस प्रश्न के लिए थोड़ा अधिक है, इसके अलावा सवाल का उत्तर दिया गया है और थोड़ी देर के लिए रहा है। इसके अलावा, टीओसी क्यों पोस्ट करें? –

1
/* 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); 

* मैक्रो असली समारोह कॉल करेंगे और इसे होने की

अगर BE में परिवर्तित कर देंगे

unsigned long number1 = Function_Convert_to_be_16(number2); 

* मैक्रो शब्द के रूप में परिभाषित किया जाएगा नहीं एक समारोह और आपका नंबर ब्रैकेट्स

संबंधित मुद्दे