PowerPC的字节序问题

来源:互联网 发布:仿微信源码 html 编辑:程序博客网 时间:2024/06/04 23:28

 转自:http://lion3875.blog.51cto.com/2911026/529749

因为以前一直接触的是x86和ARM,习惯了little endian。PowerPC采用大端模式。
存放的字节顺序对于大小端的区别是:Big Endian, 高字节(MSB)存放在低地址。Little Endian,低字节(LSB)存放在低地址。

0x12345678在大端和小端中的存放序列如下图所示:
endian.jpg


从软件的角度看,不同端模式的处理器进行数据传递时需要考虑端模式的问题。互联网使用的网络字节顺序采用大端模式进行编址,这样大端模式处理器的字节序到网络字节序不需要转换,此时ntohs(n) = n, ntohl(n) = n;而小端模式处理器的字节序到网络字节必须进行转换,此时ntohs(n) = __swap16(n), ntohl = __swap32(n)。

 

驱动程序员大多比较关注register相关的东西,对于大小端模式而言,不同处理器的register bitlayout也不相同,比如对于32位register而言,PowerPC将其寄存器的最高位msb(most significant bit)定义为0,最低位lsb(least significant bit)定义为31。小端处理器正好相反,比如Intel的处理器。大小端寄存器bit layout区别如下图所示:




数据0x12345678写到大小端的register中如下图:



从数据总线角度而言,大端模式32位数据总线的msb是第0位, MSB是数据总线的第0~7bit,小端模式的32位数据总线的msb是第31位, MSB是数据总线的第31~24bit。

当不同端模式的处理器和外设互联时,IC的设计人员需要关注数据总线的bit序列问题。在实际应用中,并没有大端外设。


0 0
原创粉丝点击