代码之家  ›  专栏  ›  技术社区  ›  Frank V

我的AMD机器使用小endian还是大endian?

  •  30
  • Frank V  · 技术社区  · 15 年前

    我正在学习计算机系统课程,我正在努力建立, 无疑 如果我的AMD电脑是一个小型的endian机器?我相信这是因为它将与英特尔兼容。

    具体来说,我的处理器是AMD 64 Athlon x2。

    我知道这在C编程中很重要。我正在编写C程序,我使用的方法会受到影响。我想知道如果我在一台基于英特尔的机器上运行这个程序是否会得到相同的结果(假设是这样的话) 小endian机器)。

    最后,让我问一个问题:是否有任何一台和所有能够运行Windows的计算机(XP、Vista、2000、Server2003等)以及,比如, Ubuntu Linux desktop 小endian?

    谢谢您,
    弗兰克

    8 回复  |  直到 9 年前
        1
  •  66
  •   Techwolf    9 年前

    所有x86和x86-64机器(只是x86的扩展)都是小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;
    }
    
        2
  •  12
  •   FCo    15 年前

    文章中列出了一种了解结尾的简单方法。 Writing endian-independent code in C

    const int i = 1;
    #define is_bigendian() ( (*(char*)&i) == 0 )
    
        3
  •  11
  •   Ben Hoyt    15 年前

    假设您已经安装了python,您可以运行这一行程序,它将在小endian机器上打印“little”,在大endian机器上打印“big”:

    python -c "import struct; print 'little' if ord(struct.pack('L', 1)[0]) else 'big'"
    
        4
  •  6
  •   ephemient    15 年前

    “英特尔兼容”不是很精确。

    英特尔曾生产大端处理器,特别是Strengarm和XScale。它们不使用IA32 ISA,通常称为x86。

    在历史上,Intel还制造了小endian i860和i960,它们也不兼容x86。

    再回到历史上,x86的前辈(8080、8008等)也不兼容x86。作为8位处理器,endianness并不重要…

    现在,Intel仍然生产双端的Itanium(ia64):正常操作是big endian,但处理器也可以在小端模式下运行。它确实能够在小endian模式下运行x86代码,但本机ISA不是IA32。

    据我所知,AMD的所有处理器都是x86兼容的,有一些扩展,如x86_64,因此必然是小endian。

    Ubuntu可用于x86(little endian)和x86_(little endian),IA64(big endian)、ARM(el)(little endian)、PA-RISC(big endian,尽管处理器支持这两种功能)、PowerPC(big endian)和SPARC(big endian)的端口不太完整。我不相信有ARM(eb)(big endian)端口。

        5
  •  3
  •   1800 INFORMATION    15 年前

    回答最后一个问题,答案是否定的。Linux能够在像旧一代PowerMacs这样的big endian机器上运行。

        6
  •  2
  •   mnuzzo    15 年前

    你必须下载为big-endian机器设计的Ubuntu版本。我只知道 PowerPC 版本。我确信您可以找到一些具有更通用的big-endian实现的地方。

        7
  •  1
  •   sth ypicasso    14 年前

    英特尔公司2004年11月15日发布的endianness白皮书 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
    
        8
  •  1
  •   Linas    10 年前
    /* 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
    

    如果LE

    unsigned long number1 = Function_Convert_to_be_16(number2);
    

    *宏将调用实函数并将其转换为

    如果是

    unsigned long number1=函数_convert_to_be_16(number2);
    

    *宏将被定义为单词而不是函数,您的数字将在括号之间。