Подтвердить что ты не робот

Использует ли мой компьютер на базе AMD маленький конец или большой конец?

Я иду, хотя компьютерный курс, и я пытаюсь установить, наверняка, если мой компьютер на базе AMD - маленькая конечная машина? Я считаю, что это связано с совместимостью с Intel.

В частности, мой процессор AMD 64 Athlon x2.

Я понимаю, что это может иметь значение в программировании на С. Я пишу C-программы, и метод, который я использую, будет затронут этим. Я пытаюсь выяснить, получаю ли я такие же результаты, если бы я запускал программу на компьютере на базе Intel (предполагая, что - маленькая конечная машина).

Наконец, позвольте мне спросить: будут ли все и все машины, способные запускать Windows (XP, Vista, 2000, Server 2003 и т.д.) и, скажем, Рабочий стол Ubuntu Linux будет немного ориентирован?

Спасибо,
Франк

4b9b3361

Ответ 1

Все машины 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;
}

Ответ 3

Предполагая, что у вас установлен Python, вы можете запустить этот однострочный шрифт, который будет печатать "мало" на машинах с маленьким шрифтом и "большой" на больших терминах:

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

Ответ 4

"Intel-совместимый" не очень точен.

Intel использовала большие процессоры, в частности, StrongARM и XScale. Они не используют IAA ISA, широко известный как x86.

Еще в истории Intel также выпустила миниатюрные i860 и i960, которые также не совместимы с x86.

Еще в истории препроцессоры x86 (8080, 8008 и т.д.) также не совместимы с x86. Будучи 8-разрядными процессорами, endianness не имеет большого значения...

В настоящее время Intel по-прежнему выпускает Itanium (IA64), который является двунаправленным: нормальная работа имеет большой размер, но процессор также может работать в режиме little-endian. Случается, что он может запускать x86-код в режиме little-endian, но собственный 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). Я не верю, что есть ARM (eb) (big-endian) порт.

Ответ 5

В ответ на ваш последний вопрос ответ - нет. Linux способен работать на больших компьютерах, таких как, например, PowerMacs старшего поколения.

Ответ 6

Вам нужно загрузить версию Ubuntu, предназначенную для больших эндианских машин. Я знаю только версии PowerPC. Я уверен, что вы можете найти какое-то место, которое имеет более общую реализацию в стиле big-endian.

Ответ 7

Техническая документация Endianness от Intel Corp опубликована 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

Ответ 8

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

* макрос вызовет реальную функцию, и он преобразуется в BE

если BE

unsigned long number1 = Function_Convert_to_be_16(number2);

* макрос будет определяться как слово не как функция, а ваш номер будет находиться между скобками