Endians是什么意思?它是数据在内存中的排列顺序。在微处理器中,象long/DWORD(32 bits) 0x12345678 这样的数据总是按照高位优先(BIG ENDIAN)方式存放的。但在内存中,数据存放顺序则因微处理器厂商的不同而不同。
数据大小的不同:
Byte:一个字节,标记为byte 0
Word:二个字节,从byte 0到byte 1
Long : 四个字节,从byte 0到byte 3
每个byte由8个位(bit)组成,从bit 7 到 bit 0 (从左往右)。
每个word由16个 bit 组成,从bit 15 到 bit 0 (从左往右)。
每个long由32个 bit 组成,从bit 31 到 bit 0 (从左往右)。
byte 0 是LSB (Less Significant Byte,最低有效字节),byte 3 是MSB (Most Significant Byte,最高有效字节)。因此如果有:
Byte : 3 2 1 0
Number : $12 $34 $56 $78
则值等于:$12*256^3 + $34*256^2 + $56*256^1 + $78*256^0
word类型也一样。word 0 是LSW (Less Significant Word,最低有效字),word 1 是MSW (Most Significant Word,最高有效字):
Word : 1 0
Number : $1234 $5678
值等于:$1234*65536^1 + $5678*65536^0.
字节存放方式:
BIG ENDIAN : 最低地址存放高位字节,可称为高位优先。内存从最低地址开始,顺序存放:
Byte : Byte 3 ($12) (正好是MSB)
Word : Byte 3 到 Byte 2,即word 1 ($1234) (按照从MSB 到 LSB 顺序存放)
Long : Byte 3 到 Byte 0,即word 1 到 word 0 ($12345678) (按照从MSB 到 LSB 顺序存放)
BIG ENDIAN 存放方式正是我们的书写方式,大数先写(比如,总是按照千、百、十、个位来书写数字)。而且所有的处理器都是按照这个顺序存放数据的。
在内存中,根据地址 n (+ 位移量),存放的数据分别是:
n+0 : Byte 3 ($12) (MSB 优先: BIG Endian)
n+1 : Byte 2 ($34)
n+2 : Byte 1 ($56)
n+3 : Byte 0 ($78) (LSB)
Byte 0 的位置是:'n+3' (在 'n+3', byte 0 等于 $78)
Word 0 的位置是:'n+2' ('n+2' 到 'n+3', byte 1 到 byte 0, word 0 等于 $5678)
Long 0 的位置是:'n+0' ('n+0' 到 'n+3', byte 3 到 byte 0, long 0 等于 $12345678)
高位优先方式对于嵌入式系统和调试内存映象都很有用。在寄存器中读到的数据就是内存里的数据。但是如果要在word 0 的地址 'n+2' 处提取低位字(Low Word),就要用附加的内存,通过移位后才能得到,所以会稍慢些。
例如在寄存器中有:$12345678
从地址 'n+0' 开始: $12 $34 $56 $78 (按字节从MSB 到 LSB,即byte 3 到 byte 0)
从地址'n+0' 开始: $1234 $5678 (按字从MSB 到 LSB, 即word 1 到 word 0)
BIG ENDIAN 排列顺序还广泛运用在TCP/IP协议上!主要使用BIG Endian 排列结构的是摩托罗拉的 Motorola 6800 系列,68000 系列和ColdFire 系列。PowerPC 是用低位优先(Little Endian)顺序,它是从IBM Power 处理器系列派生而来的。
LITTLE ENDIAN : 最低地址存放低位字节,可称为低位优先。内存从最低地址开始,顺序存放:
Byte : Byte 0 ($78) (正好是 LSB)
Word : Byte 0 到 Byte 1,即 word 0 ($7856) (按照从LSB 到MSB 顺序存放)
Long : Byte 0 到 Byte 3,即 word 0 到 word 1 ($78563412) (按照从LSB 到MSB 顺序存放)
LITTLE ENDIAN 处理器是通过硬件将内存中的LITTLE ENDIAN 排列顺序转换到寄存器的BIG ENDIAN排列顺序的,没有数据加载/存储的开销,不用担心。
在内存中,根据地址 n (+ 位移量),存放的数据分别是:
n+0 : Byte 0 ($78) (LSB 优先:Little Endian)
n+1 : Byte 1 ($56)
n+2 : Byte 2 ($34)
n+3 : Byte 3 ($12) (MSB)
Byte 0 的位置是:'n+3' (在 'n+3', byte 0 等于 $78)
Word 0 的位置是:'n+2' ('n+2' 到 'n+3', byte 1 到 byte 0, word 0 等于 $5678)
Long 0 的位置是:'n+0' ('n+0' 到 'n+3', byte 3 到 byte 0, long 0 等于 $12345678)
Byte 0 的位置是:'n+0' (在 'n+0', byte 0 等于 $78)
Word 0 的位置是:'n+0' ('n+0' 到 'n+1', byte 0 到to byte 1, word 0 等于 $5678,按照 LITTLE ENDIAN 顺序)
Long 0 的位置是:'n+0' ('n+0' 到 'n+3', byte 0 to byte 3, long 0 等于 $12345678,按照 LITTLE ENDIAN 顺序)
低位优先顺序对于要取得诸如LSB或LSW这样的低位数据是很有用的。只要在起始位置上直接提取即可。不过在内存调试时可有些“古怪”。
例如在寄存器中有:$12345678
从地址 'n+0' 开始:$78 $56 $34 $12 (按字节从LSB 到 MSB)
从地址 'n+0' 开始:$7856 $3412 (按字从LSB to MSB)
注意:少数一些处理器是按照LITTLE ENDIAN 排列顺序来进行位运算的,就是说,一个从bit 31 到bit 0 表达的long类型数值按照从bit 0到bit 31的顺序来存放!
寄存器有: $12345678 (%10010001101000101011001111000)
在地址'n+0':$01CD4589 (%0001110011010100010110001001) (老天,真蠢!)
附件:本文提及的数据格式:
公司: Motorola Toshiba Intel
十进制(Decimal) : 123 123 123 (缺省)
八进制(Octal) : @173 o173 173o
十六进制(Hexa) : $7B h7B 7Bh
二进制(Binary) : %1111011 b1111011 1111011b
分享到:
相关推荐
在编解码技术中,高位优先(MSB First)和低位优先(LSB First)的顺序影响了数据传输和解析的速度及效率。 文档“高位编码.docx”和“低位编码.docx”可能包含了详细的文字说明,如高位和低位编码在不同场景下的...
基数排序_BinSort,包括高位优先排序MSD和低位优先排序LSD_RadixSort
- **高位优先与低位优先**:高位优先(big-endian)与低位优先(little-endian)是指数据在内存中的存储方式。高位优先意味着最高有效字节存储在最低地址位置,而低位优先则相反。Solaris 10 在不同的架构上有不同的...
十一、高位优先和低位优先 高位优先是最低地址存放高位字节的存储方式。低位优先是最低地址存放低位字节的存储方式。高位交叉是把地址的码的前一位数分配给两个存储体。低位交叉是地址码的最后一位分配给存储体的...
计算机数据存储有两种字节优先顺序:高位字节优先和低位字节优先。Internet 上数据以高位字节优先顺序在网络上传输,所以对于在内部是以低位字节优先方式存储数据的机器,在 Internet 上传输数据时就需要进行转换。 ...
- **高位优先**:史丰收速算法强调从高位开始计算,这与传统算法中的低位优先形成鲜明对比。 - **无需工具**:该算法完全依赖于人脑,无需借助计算器或其他计算工具。 - **直接报答案**:熟练掌握后,可以直接看到...
高位优先(MSB First)意味着先处理最高有效位,低位优先(LSB First)则相反。不同的系统和应用可能有不同的字节顺序约定,因此理解和正确处理高低位对于正确实现CRC至关重要。 LabVIEW(Laboratory Virtual ...
大端序(Big-Endian),也称为高位优先,是高位字节在前,低位字节在后,这符合人类习惯的从左到右的阅读顺序。 在实际操作中,例如处理网络数据时,如果发送的数据包含多个字节,如一个32位整数,它会被拆分为四个...
每上升沿或下降沿,数据会按照预设的方向(高位优先或低位优先)进行转移,直到完成整个数据帧的传输。 总的来说,SPI接口提供了一种简单高效的方式来连接和控制多个外设,它的灵活性、高速度和全双工特性使其成为...
一般情况下,有水的燃料,高位热值总是高于低位热值,但是对于无水无氢的燃料,高位热值和低位热值是相等的。 #### 不完全燃烧的原因 不完全燃烧是指燃料在燃烧过程中不能完全转化为最终产物(通常是CO2和H2O)。...
在实现过程中,可能涉及到内存管理、字节序转换(高位字节优先或低位字节优先)、位操作以及图形绘制等技术。开发者需要将GB2312编码的汉字代码转化为对应的像素数组,然后通过某种方式在屏幕上呈现出来,如控制终端...
当按下小于10的键,低位显示器显示数字,高位显示器显示0;当按下大于9的键,低位显示个位数字,高位显示1。实验提供了一个4位二进制加法器74LS283,两个8线-3线优先编码器74LS148,以及两个显示译码器74LS47作为...
4. **数据传输**:掌握如何向LCD1602写入字符或命令,包括高位优先或低位优先的数据传输方式。 5. **软件编程**:在PIC18单片机上,通常使用C语言进行编程。在提供的文件列表中,LCD1602.c可能是实现这些功能的源...
- 数据传输函数:通过I/O端口将数据写入LCD12864,通常包括高位优先和低位优先两种方式。 - 指令发送函数:发送LCD12864的控制指令,如清屏、设置光标位置、开/关显示等。 - 字符显示函数:将ASCII码转换为点阵...
MSD 算法与 LSD 相反,它从字符串的最高位开始排序,逐位向低位推进。这种算法适用于字符串长度不一致的情况,其排序过程与 LSD 类似,但方向相反,从高位字符开始。MSD 算法可以看作是针对字符串的快速排序,通过...
- 高位出现的信号和低位未企稳的弱反弹信号需剔除,优先选择低位形态标准且已企稳的信号。 5. **源码解析**: - `TJ1`、`TJ2`、`TJ3`定义了大阴线和小阴小阳线的条件。 - `TJ4`计算满足条件的天数。 - `TJ5`...
3. **高位优先(HRD)**:相反,如果选择从最高位开始,那么就是高位优先排序。这种策略适用于数字的位数不一致的情况,可以确保即使是最小的数字也能在正确的位置。 在Java中,基数排序的实现通常会涉及几个辅助类...
一旦有空闲,就将存放时间长的车辆自动调整到车位的高位区,从而让出人口附近的低位区某些车位重新空出,以提高该区域的最佳利用率, 当高位区车辆快取出前,再利用空闲时间将它们调整到低位区的空位上,大大减少...
高4位决定通道选择,低4位决定数据长度(8位、12位或16位)、输出顺序(高位优先或低位优先)以及数据类型(单极性或双极性)。在转换过程中,上电后必须先将CS(片选)信号拉低,才能开始一个新的工作周期。随着...
- **Bit > Sym**:将输入的比特流按照指定的每符号位数转换为符号,可以选择高位优先或低位优先。 - **Sym > Bit**:相反地,将输入的符号重新排列成二进制信号,同样有高低位优先选择。 5. **比特误码率(BER)...