大端模式处理器需要在寄存器,指令集,数据总线及数据总 线与小端外设的连接等等多个方面进行处理, 以解决与小端外设连接时 的端模式转换问题。在寄存器和数据总线的位序定义上,基于大小端模 式的处理器有所不同。 一个采用大端模式的 32 位处理器, 如基于 E500 内核的 MPC8541, 将其寄存器的最高位 msb(most significant bit)定义为 0,最低位 lsb (lease significant bit)定义为 31;而小端模式的 32 位处理器,将其 寄存器的最高位定义为 31,低位地址定义为 0。与此向对应,采用大端 模式的 32 位处理器数据总线的最高位为 0,最高位为 31;采用小端模 式的 32 位处理器的数据总线的最高位为 31,最低位为 0。 大小端模式处理器外部总线的位序也遵循着同样的规律,根据所 采用的数据总线是 32 位,16 位和 8 位,大小端处理器外部总线的位序 有所不同。大端模式下 32 位数据总线的 msb 是第 0 位,MSB 是数据 总线的第 0~7 的字段;而 lsb 是第 31 位,LSB 是第 24~31 字段。小端 模式下 32 位总线的 msb 是第 31 位, MSB 是数据总线的第 31~24 位, lsb 是第 0 位,LSB 是 7~0 字段。大端模式下 16 位数据总线的 msb 是 第 0 位,MSB 是数据总线的第 0~7 的字段;而 lsb 是第 15 位,LSB 是 第 8~15 字段。小端模式下 16 位总线的 msb 是第 15 位,MSB 是数据 总线的第 15~7 位,lsb 是第 0 位,LSB 是 7~0 字段。大端模式下 8 位 数据总线的 msb 是第 0 位,MSB 是数据总线的第 0~7 的字段;而 lsb 是第 7 位, LSB 是第 0~7 字段。 小端模式下 8 位总线的 msb 是第 7 位, MSB 是数据总线的第 7~0 位,lsb 是第 0 位,LSB 是 7~0 字段。 由上分析,我们可以得知对于 8 位,16 位和 32 位宽度的数据 总线, 采用大端模式时数据总线的 msb 和 MSB 的位置都不会发生变化, 而采用小端模式时数据总线的 lsb 和 LSB 位置也不会发生变化。 为此, 大端模式的处理器对 8 位, 位和 32 位的内存访问 16 (包 括外设的访问)一般都包含第 0~7 字段,即 MSB。小端模式的处理器 对 8 位, 位和 32 位的内存访问都包含第 7~0 位, 16 小端方式的第 7~0 字段,即 LSB。由于大小端处理器的数据总线其 8 位,16 位和 32 位宽 度的数据总线的定义不同, 因此需要分别进行讨论在系统级别上如何处 理端模式转换。在一个大端处理器系统中,需要处理大端处理器对小端 外设的访问。 十、实际中的例子 虽然很多时候,字节序的工作已由编译器完成了,但是在一些小 的细节上, 仍然需要去仔细揣摩考虑, 尤其是在以太网通讯、 MODBUS 通讯、软件移植性方面。这里,举一个 MODBUS 通讯的例子。