`

高位优先与低位优先

阅读更多

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

分享到:
评论

相关推荐

    高位编码和低位编码.rar

    在编解码技术中,高位优先(MSB First)和低位优先(LSB First)的顺序影响了数据传输和解析的速度及效率。 文档“高位编码.docx”和“低位编码.docx”可能包含了详细的文字说明,如高位和低位编码在不同场景下的...

    基数排序_BinSort,包括高位优先排序MSD和低位优先排序LSD_RadixSort.zip

    基数排序_BinSort,包括高位优先排序MSD和低位优先排序LSD_RadixSort

    Linux到Solaris 10操作系统迁移指南

    - **高位优先与低位优先**:高位优先(big-endian)与低位优先(little-endian)是指数据在内存中的存储方式。高位优先意味着最高有效字节存储在最低地址位置,而低位优先则相反。Solaris 10 在不同的架构上有不同的...

    华南师范大学-计算机组成原理-期末复习知识点.pdf

    十一、高位优先和低位优先 高位优先是最低地址存放高位字节的存储方式。低位优先是最低地址存放低位字节的存储方式。高位交叉是把地址的码的前一位数分配给两个存储体。低位交叉是地址码的最后一位分配给存储体的...

    linux 中socket编程 常用结构体 详解

    计算机数据存储有两种字节优先顺序:高位字节优先和低位字节优先。Internet 上数据以高位字节优先顺序在网络上传输,所以对于在内部是以低位字节优先方式存储数据的机器,在 Internet 上传输数据时就需要进行转换。 ...

    由速算大师史丰收经过10年钻研发明的快速计算法,是直接凭大脑进行运算 ....doc

    - **高位优先**:史丰收速算法强调从高位开始计算,这与传统算法中的低位优先形成鲜明对比。 - **无需工具**:该算法完全依赖于人脑,无需借助计算器或其他计算工具。 - **直接报答案**:熟练掌握后,可以直接看到...

    crc-16.rar_CRC check_crc高低位_labview版本CRC

    高位优先(MSB First)意味着先处理最高有效位,低位优先(LSB First)则相反。不同的系统和应用可能有不同的字节顺序约定,因此理解和正确处理高低位对于正确实现CRC至关重要。 LabVIEW(Laboratory Virtual ...

    High-Byte-in-the-post.rar_high

    大端序(Big-Endian),也称为高位优先,是高位字节在前,低位字节在后,这符合人类习惯的从左到右的阅读顺序。 在实际操作中,例如处理网络数据时,如果发送的数据包含多个字节,如一个32位整数,它会被拆分为四个...

    同步串行外设接口SPI

    每上升沿或下降沿,数据会按照预设的方向(高位优先或低位优先)进行转移,直到完成整个数据帧的传输。 总的来说,SPI接口提供了一种简单高效的方式来连接和控制多个外设,它的灵活性、高速度和全双工特性使其成为...

    清华大学《燃烧学》期中考试试卷集合(部分含答案).pdf

    一般情况下,有水的燃料,高位热值总是高于低位热值,但是对于无水无氢的燃料,高位热值和低位热值是相等的。 #### 不完全燃烧的原因 不完全燃烧是指燃料在燃烧过程中不能完全转化为最终产物(通常是CO2和H2O)。...

    GB_display16_C-C++_in_gb231216x16_

    在实现过程中,可能涉及到内存管理、字节序转换(高位字节优先或低位字节优先)、位操作以及图形绘制等技术。开发者需要将GB2312编码的汉字代码转化为对应的像素数组,然后通过某种方式在屏幕上呈现出来,如控制终端...

    数字电路实验_数字显示电路.pdf

    当按下小于10的键,低位显示器显示数字,高位显示器显示0;当按下大于9的键,低位显示个位数字,高位显示1。实验提供了一个4位二进制加法器74LS283,两个8线-3线优先编码器74LS148,以及两个显示译码器74LS47作为...

    PIC的1602显示

    4. **数据传输**:掌握如何向LCD1602写入字符或命令,包括高位优先或低位优先的数据传输方式。 5. **软件编程**:在PIC18单片机上,通常使用C语言进行编程。在提供的文件列表中,LCD1602.c可能是实现这些功能的源...

    msp430液晶显示程序

    - 数据传输函数:通过I/O端口将数据写入LCD12864,通常包括高位优先和低位优先两种方式。 - 指令发送函数:发送LCD12864的控制指令,如清屏、设置光标位置、开/关显示等。 - 字符显示函数:将ASCII码转换为点阵...

    字符串排序算法的调研与实现1

    MSD 算法与 LSD 相反,它从字符串的最高位开始排序,逐位向低位推进。这种算法适用于字符串长度不一致的情况,其排序过程与 LSD 类似,但方向相反,从高位字符开始。MSD 算法可以看作是针对字符串的快速排序,通过...

    通达信版新炉架底 原创源码 副图选股.doc

    - 高位出现的信号和低位未企稳的弱反弹信号需剔除,优先选择低位形态标准且已企稳的信号。 5. **源码解析**: - `TJ1`、`TJ2`、`TJ3`定义了大阴线和小阴小阳线的条件。 - `TJ4`计算满足条件的天数。 - `TJ5`...

    java基数排序

    3. **高位优先(HRD)**:相反,如果选择从最高位开始,那么就是高位优先排序。这种策略适用于数字的位数不一致的情况,可以确保即使是最小的数字也能在正确的位置。 在Java中,基数排序的实现通常会涉及几个辅助类...

    立体车库存取车时间优化控制方案.pdf

    一旦有空闲,就将存放时间长的车辆自动调整到车位的高位区,从而让出人口附近的低位区某些车位重新空出,以提高该区域的最佳利用率, 当高位区车辆快取出前,再利用空闲时间将它们调整到低位区的空位上,大大减少...

    串行AD转换器TLC2543与51单片机的接口设计.doc

    高4位决定通道选择,低4位决定数据长度(8位、12位或16位)、输出顺序(高位优先或低位优先)以及数据类型(单极性或双极性)。在转换过程中,上电后必须先将CS(片选)信号拉低,才能开始一个新的工作周期。随着...

    systemview仿真数据库

    - **Bit > Sym**:将输入的比特流按照指定的每符号位数转换为符号,可以选择高位优先或低位优先。 - **Sym > Bit**:相反地,将输入的符号重新排列成二进制信号,同样有高低位优先选择。 5. **比特误码率(BER)...

Global site tag (gtag.js) - Google Analytics