mips 与mipsel 区别 |
您所在的位置:网站首页 › ramips架构 › mips 与mipsel 区别 |
mips是big-endian的mips架构, mipsel是little-endian的mips架构。 他们之间的区别就是内存中存放的数据的字节顺序相反,也就是把低位放在低地址还是高地址。 little endian和big endian是表示计算机字节顺序的两种格式,所谓的字节顺序指的是长度跨越多个字节的数据的存放形式. 假设从地址0x00000000开始的一个字中保存有数据0x1234abcd,那么在两种不同的内存顺序的机器上从字节的角度去看的话分别表示为: 1)little endian:在内存中的存放顺序是0x00000000-0xcd,0x00000001-0xab,0x00000002-0x34,0x00000003-0x12 2)big endian:在内存中的存放顺序是0x00000000-0x12,0x00000001-0x34,0x00000002-0xab,0x00000003-0xcd 需要特别说明的是,以上假设机器是每个内存单元以8位即一个字节为单位的. 简单的说,little endian把低字节存放在内存的低位;而big endian将低字节存放在内存的高位. 现在主流的CPU,intel系列的是采用的little endian的格式存放数据,而motorola系列的CPU采用的是big endian. 以下是判断字节存储顺序的可移植的C语言代码: /******************************************************************** created: 2006-9-5 filename: test.cpp author: 李创 purpose: 可移植的用于判断存储格式是 little endian还是big ednian的C代码 取自 *********************************************************************/ #include union { long Long; char Char[sizeof(long)]; }u;
int main() { u.Long = 1; if (u.Char[0] == 1) { printf("Little Endian!\n"); } else if (u.Char[sizeof(long) - 1] == 1) { printf("Big Endian!\n"); } else { printf("Unknown Addressing!\n"); }
printf("Now, Let's look at every byte in the memory!\n"); for (int i = 0; i int i; for (i = SIZE_OF_UNSIGNEDINT - 1; i >= 0; --i) { cmd = data % 256; // 或者可以: //cmd = data & 0xFF; data = data >> 8; } } unsigned int get_32(unsigned char *cmd) { unsigned int ret; int i; for (ret = 0, i = SIZE_OF_UNSIGNEDINT - 1; i >= 0; --i) { ret = ret printf("%x", *p++); } printf("\n"); // 以相反的顺序存放到cmd之中 put_32(cmd, data); for (i = 0; i printf("%x", *p++); } printf("\n"); return 0; }
|
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |