4300|10

68

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

现在家用cpu是32bit,也就是一次寻址的数据是32bit的,那么大小字节序是还有意义? [复制链接]

如题?
最近想到这个问题,拿出来讨论一下。

大小字节序是字节上的问题。
假如说我一次读写的位宽超为32bit
那么是否说就没有大小字节序的问题了?

最新回复

这几个东西  我同时接触 有点搞混了 最近几天做了试验 搞清楚了。 谢谢大家 结论就是:其实位域和大小字节序没关系  -_-!  当然他们还是有影响的。 1 位域不够的时候,会占用下个字节。   byte a1:6;   byte a2:3;   实际上a2就到了下个字节中去了,不会继续占用上面的a1剩下的2个字节。   我曾经看到过公司内部的一个文档,说大小字节序,那个图示表明,会紧凑的占用字节。可能和编译器有关。反正可以肯定vs2008不是这样的。 2 大小字节序是cpu内部的排序方式,如果一个变量或者常量大于8bit,那么他就按照字节去划分。   如果小于8bit,这个就没有太多意义,因为最小的单位是字节。 耽误大家的时间了。  详情 回复 发表于 2009-4-25 21:43
点赞 关注

回复
举报

71

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
位域的影响。。。。。
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
对于一个数字
0xABCDEF

假如是8位的cpu
那么小字节序
0xEF
0xCD
0xAB

但是如果是32的cpu,那么是否是一次读完?
就是0xABCDEF?
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

4
 
重要的是现在种类繁多的CPU存在两种字节序模式,Big-endian(Motorola)和Little-Endian(Intel),如果不同字节序的CPU之间通讯怎么办?
8-bit位宽的CPU其实没有什么字节序问题;16/32位宽的CPU需要考虑在表示16/32位数据的时候每个字节在存储器中地址的问题。

 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

5
 
我不知道你说的大小字节序是不是指的是大小端模式
对于一个数字
0x89ABCDEF
如果是小端模式那么
地址1=0xef
2=0xcd
3=0xab
4=0x89
大端模式的话
地址1=0x89
2=0xab
3=0xcd
4=0xef
你的处理器如果是32bit的话 ..是可以一次性读完这些数据,
只所以字节序列问题,,是考虑到
如果你访问的时候不是32bit的情况..比如用32bit cpu 一次访问8bit 或者 16bit时候,
又要吧 两个16bit 组合成32bit等等情况..
另外..如果一个 处理器和另一个处理器共用一块ram,,另一块处理器又不是32bit等情况


 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

6
 
呵呵  用到这个的情况还是很多的
想截取32位中的高8位 或者低8位
没有这个顺序怎么截 等等
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

7
 
#define LITTLE

#ifdef LITTLE
union SET_ENTRY
{
    struct
    {
        WORD wVal0;
        WORD wVal1;
    }ValueGet;
    struct
    {
        WORD wa:16;

        WORD wb:12;
        WORD resv:4;
    }ValueSet;
};
#else
union SET_ENTRY
{
    struct
    {
        WORD wVal0;
        WORD wVal1;
    }ValueGet;
    struct
    {
        WORD wa:16;

        WORD resv:4;
        WORD wb:12;
    }ValueSet;
};
#endif

拿这个作为例子吧。
假设我用的cpu是16位的。小字节序。
我的疑惑主要是在这里:

按照我上面的定义应该是哪种地址分配方式?
(1)
wVal0---地址0x0000----wa
wVal1---地址0x0004----wb
        地址0x0007----resv

(2)
wVal0---地址0x0000----wb
        地址0x0003----resv
wVal1---地址0x0004----wa

也就是说在位域的内部是否也存在那个字节序的问题?

 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

8
 
位域在内存中是不存在的。实际还是多个字节的存储。所以仍然是按大、小端方式。
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

9
 
学习。。。
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

10
 
1.大小端的存储结构是由CPU决定的,并非是软件设定的。
2.以你的例子来说,CPU16位,但存储时还是按字节寻址的,因此,对应你的联合体(WORD为16位)
1)wVAL0占用地址0x0000和0x0001这两个字节,对应的是wa
2)wVAL1占用地址0x0002和0x0003这两个字节,而resv,wb的情况如下:
  你的定义:xxxx yyyy yyyy yyyy
  实际存储:0x0002:yyyy yyyy
           0x0003:xxxx yyyy
  其中x,y都是具体二进制位0或者1,x代表了占用4位的resv,y代表了占用12位的wb情况。

以上,也就是说resv只占用了半个字节,如果一定要说它的地址的话,可以认为它部分占用了0x0003地址空间。
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

11
 
这几个东西  我同时接触 有点搞混了
最近几天做了试验 搞清楚了。
谢谢大家

结论就是:其实位域和大小字节序没关系  -_-!  当然他们还是有影响的。

1 位域不够的时候,会占用下个字节。
  byte a1:6;
  byte a2:3;
  实际上a2就到了下个字节中去了,不会继续占用上面的a1剩下的2个字节。
  我曾经看到过公司内部的一个文档,说大小字节序,那个图示表明,会紧凑的占用字节。可能和编译器有关。反正可以肯定vs2008不是这样的。

2 大小字节序是cpu内部的排序方式,如果一个变量或者常量大于8bit,那么他就按照字节去划分。
  如果小于8bit,这个就没有太多意义,因为最小的单位是字节。



耽误大家的时间了。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表