我要去虽然计算机系统课程,我试图建立, 可以肯定 ,如果我的基于AMD处理器的电脑是小端机? 我相信这是因为这将是Intel兼容。
具体地讲,我的处理器是AMD 64的Athlon X2。
据我所知,这可以在C编程关系。 我正在写C程序和我使用的方法将受此影响。 我想弄清楚,如果我能得到相同的结果,如果我跑了基于Intel的机器上的程序(假设是小端机)。
最后,我想问:是否有任何与能够运行Windows(XP,Vista中,2000,Server 2003中,等等),并说所有的机器, Ubuntu的Linux桌面是小端?
谢谢,
坦率
所有的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;
}
要知道字节序的一个简单方法是在文章中列出编写C端无关的代码
const int i = 1;
#define is_bigendian() ( (*(char*)&i) == 0 )
假设你已经安装了Python,可以运行此一行代码,这将打印“小”的小端机器和大端一“大”:
python -c "import struct; print 'little' if ord(struct.pack('L', 1)[0]) else 'big'"
“英特尔兼容”是不是很精确。
英特尔用来做大端处理器,特别是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)(大端)端口。
在回答你的最后一个问题,答案是否定的。 Linux是能够在大端机器象例如,老一辈的PowerMacs运行。
您必须下载设计大端机器一个版本的Ubuntu。 我只知道的PowerPC的版本。 我敢肯定,你可以找到其中有一个更通用的大端实现某个地方。
/* 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);
*宏将被定义为字不是一个功能,您的号码将是括号