请问我基于AMD的机器使用小端或大端?(Does my AMD-based machine use

2019-06-23 20:03发布

我要去虽然计算机系统课程,我试图建立, 可以肯定 ,如果我的基于AMD处理器的电脑是小端机? 我相信这是因为这将是Intel兼容。

具体地讲,我的处理器是AMD 64的Athlon X2。

据我所知,这可以在C编程关系。 我正在写C程序和我使用的方法将受此影响。 我想弄清楚,如果我能得到相同的结果,如果我跑了基于Intel的机器上的程序(假设小端机)。

最后,我想问:是否有任何与能够运行Windows(XP,Vista中,2000,Server 2003中,等等),并说所有的机器, Ubuntu的Linux桌面是小端?

谢谢,
坦率

Answer 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;
}


Answer 2:

要知道字节序的一个简单方法是在文章中列出编写C端无关的代码

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


Answer 3:

假设你已经安装了Python,可以运行此一行代码,这将打印“小”的小端机器和大端一“大”:

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


Answer 4:

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

英特尔用来做大端处理器,特别是StrongARM的和XScale。 这些不使用IA32 ISA,俗称86。

更久远的历史,英特尔也做了小端1860和1960年,这也不是x86兼容。

更久远的历史,在x86(8080,8008,等等)的prececessors不兼容x86两种。 作为8位处理器,字节顺序并不重要...

如今,英特尔仍使安腾(IA64),这是双端:正常运行是大端,但处理器也可以在小端模式下运行。 它确实发生,以便能够在小端模式下运行x86代码,但本地ISA不是IA32。

据我所知,所有AMD的处理器一直x86兼容,与像x86_64的一些扩展,因而必然是小端。

Ubuntu是可用于x86(小端)和x86_64(小端),与IA64不完整端口(大端),ARM(EL)(小端),PA-RISC(大端,虽然处理器支持),的PowerPC(大端)和SPARC(大端)。 我不相信有一个ARM(EB)(大端)端口。



Answer 5:

在回答你的最后一个问题,答案是否定的。 Linux是能够在大端机器象例如,老一辈的PowerMacs运行。



Answer 6:

您必须下载设计大端机器一个版本的Ubuntu。 我只知道的PowerPC的版本。 我敢肯定,你可以找到其中有一个更通用的大端实现某个地方。



Answer 7:

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

unsigned long number1 = Function_Convert_to_be_16(number2);

*宏将被定义为字不是一个功能,您的号码将是括号



文章来源: Does my AMD-based machine use little endian or big endian?