¿Mi máquina basada en AMD utiliza little endian o big endian?


Voy a través de un curso de sistema de computadoras y estoy tratando de establecer, seguro, si mi computadora basada en AMD es una máquina endian poco? Creo que es porque sería compatible con Intel.

Específicamente, mi procesador es un AMD 64 Athlon x2.

Entiendo que esto puede importar en la programación en C. Estoy escribiendo programas en C y un método que estoy usando se vería afectado por esto. Estoy tratando de averiguar si obtendría los mismos resultados si ejecutara el programa en un Intel basado máquina (suponiendo que es pequeña máquina endiana).

Finalmente, permítanme preguntar esto: ¿Todas y cada una de las máquinas capaces de ejecutar Windows (XP, Vista, 2000, Server 2003, etc.) y, digamos, Ubuntu Linux desktop serían little endian?

Gracias,
Frank

Author: Pokechu22, 2009-06-22

8 answers

Todas las máquinas x86 y x86-64 (que es solo una extensión de x86) son little-endian.

Puedes confirmarlo con algo como esto:

#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;
}
 66
Author: Mehrdad Afshari,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-06-30 02:42:35

Una forma fácil de conocer los endiannes se encuentra en el artículo Escribiendo código independiente de endian en C

const int i = 1;
#define is_bigendian() ( (*(char*)&i) == 0 )
 12
Author: FCo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-06-21 23:36:59

Suponiendo que tenga instalado Python, puede ejecutar este one-liner, que imprimirá "little" en máquinas little-endian y " big " en máquinas big-endian:

python -c "import struct; print 'little' if ord(struct.pack('L', 1)[0]) else 'big'"
 11
Author: Ben Hoyt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-06-24 04:38:58

"compatible con Intel" no es muy preciso.

Intel solía hacer procesadores big-endian, notablemente el StrongARM y XScale. Estos no utilizan el IA32 ISA, comúnmente conocido como x86.

Más atrás en la historia, Intel también hizo el little-endian i860 e i960, que tampoco son compatibles con x86.

Más atrás en la historia, los precoces del x86 (8080, 8008, etc.) tampoco son compatibles con x86. Al ser procesadores de 8 bits, la endianness realmente no asunto...

Hoy en día, Intel todavía fabrica el Itanium (IA64), que es bi-endian: el funcionamiento normal es big-endian, pero el procesador también puede ejecutarse en modo little-endian. Sucede que puede ejecutar código x86 en modo little-endian, pero la ISA nativa no es IA32.

Que yo sepa, todos los procesadores de AMD han sido compatibles con x86, con algunas extensiones como x86_64, y por lo tanto son necesariamente little-endian.

Ubuntu está disponible para x86 (little-endian) y x86_64 (little-endian), con puertos menos completos para ia64 (big-endian), ARM(el) (little-endian), PA-RISC (big-endian, aunque el procesador admite ambos), PowerPC (big-endian) y SPARC (big-endian). No creo que haya un puerto ARM(eb) (big-endian).

 6
Author: ephemient,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-06-21 23:38:58

En respuesta a su pregunta final, la respuesta es no. Linux es capaz de ejecutarse en máquinas big endian como, por ejemplo, los PowerMac de la generación anterior.

 3
Author: 1800 INFORMATION,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-06-21 23:06:12

Tienes que descargar una versión de Ubuntu diseñada para máquinas big endian. Solo conozco las versiones PowerPC . Estoy seguro de que puedes encontrar algún lugar que tenga una implementación big-endian más genérica.

 2
Author: mnuzzo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-06-21 23:14:17

Endianness White Paper de Intel Corp publicado el 15 de noviembre de 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
Author: Soumen Sarkar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-03-13 13:05:15
/* by Linas Samusas  */

#ifndef _bitorder 
#define _bitorder 0x0008

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

Y usa esto

#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

Si LE

unsigned long number1 = Function_Convert_to_be_16(number2);

* macro llamará a la función real y se convertirá en

Si ES

unsigned long number1 = Function_Convert_to_be_16(number2);

* macro se definirá como palabra no una función y su número estará entre corchetes

 1
Author: Linas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-12 00:52:59