我的基于AMD的机器是使用小端还是大端?

Fra*_*k V 30 c intel endianness amd-processor

我正在进行一个计算机系统课程,我试图确定,如果我的基于AMD的计算机是一个小端机器?我相信这是因为它与英特尔兼容.

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

我知道这在C编程中很重要.我正在编写C程序,我正在使用的方法会受此影响.我试图弄清楚如果我在基于Intel的机器上运行程序我会得到相同的结果(假设这小端机器).

最后,让我问一下:任何能够运行Windows(XP,Vista,2000,Server 2003等)以及Ubuntu Linux桌面的机器都是小端吗?

谢谢,
弗兰克

Meh*_*ari 67

所有x86和x86-64机器(它只是x86的扩展)都是little-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;
}
Run Code Online (Sandbox Code Playgroud)


FCo*_*FCo 13

在C中编写与字节序无关的代码一文中列出了一种了解endiannes的简单方法

const int i = 1;
#define is_bigendian() ( (*(char*)&i) == 0 )
Run Code Online (Sandbox Code Playgroud)


Ben*_*oyt 11

假设你已经安装了Python,你可以运行这个单行程序,它将在小端机器上打印"little",在big-endian机器上打印"big":

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


eph*_*ent 6

"与英特尔兼容"并不十分精确.

英特尔过去常常使用大端处理器,特别是StrongARM和XScale.这些不使用IA32 ISA,通常称为x86.

在历史上,英特尔还制造了小端i860和i960,它们也不兼容x86.

进一步回到历史,x86(8080,8008等)的前身也不兼容x86.作为8位处理器,字节顺序并不重要......

如今,英特尔仍然生产Itanium(IA64),它是双端的:正常运行是大端的,但处理器也可以在小端模式下运行.它碰巧能够以little-endian模式运行x86代码,但本机ISA不是IA32.

据我所知,所有AMD的处理器都是x86兼容的,有一些像x86_64这样的扩展,因此必然是小端的.

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)(大端)端口.

  • 两个小的更正:字节序对于 8 位处理器也很重要,因为一些指令涉及 16 位数量,如地址(`LDA $1234`(从地址 $1234 加载一个字节)将在 6502 上编码为 `AD 34 12`。而 AMD 确实有除了 x86 之外的另一种架构是 29000 系列 RISC 处理器,它在激光打印机等嵌入式设计中非常流行。 (2认同)