CPU:大小端模式的区别:
大端模式(Big-endian),是指数据的低位(就是权值较小的后面那几位)保存在内存的高地址中,而数据的高位,保存在内存的低地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;
小端模式(Little-endian),是指数据的低位保存在内存的低地址中,而数据的高位保存在内存的高地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低,和我们的逻辑方法一致。
内存地址高地的理解:
我们对内存表的高位和低位的理解,就可以想做这里就是一张白纸. 我们把每个空格都当作一个位置,从0~1000开始计数,写在最前的就是低位,
比如说写四个数,从0~3 . GAME数据的低位~高位就是从G到M.
寄存器高位低位的理解:
之后呢,我们从内存表中区数据,放入寄存器中,我们可以把寄存器比做一个水桶,我们放入数据的时候肯定是把"水"先倒到水筒的底部.
如我们从内存中区GAME放入到水桶中的话 水桶中存放的数据就成了EMAG 也就是 45 4D 41 47 (注意每个字节是两个16进制的字符)
而水桶的高位和地位呢,想必大家会很明白,水桶的最上方就是高位,水桶底就是低位,所以EMAG 数据的高低位就是 E~G(E为最高位 G为最低位)
嵌入式系统开发者应该对Little-endian和Big-endian模式非常了解。
我们常用的X86结构是小端模 式,而KEIL C51则为大端模式。很多的ARM,DSP都为小端模式
可以用下面的程序测试:
int checkSystem( )
{
union check
{
int i;
char ch;
} c;
c.i = 1;
return (c.ch ==1);
}
如果当前系统为大端模式这个函数返回 0;如果为小端模式,函数返回 1。
大端模式(Big-endian),是指数据的低位(就是权值较小的后面那几位)保存在内存的高地址中,而数据的高位,保存在内存的低地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;
小端模式(Little-endian),是指数据的低位保存在内存的低地址中,而数据的高位保存在内存的高地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低,和我们的逻辑方法一致。
内存地址高地的理解:
我们对内存表的高位和低位的理解,就可以想做这里就是一张白纸. 我们把每个空格都当作一个位置,从0~1000开始计数,写在最前的就是低位,
比如说写四个数,从0~3 . GAME数据的低位~高位就是从G到M.
寄存器高位低位的理解:
之后呢,我们从内存表中区数据,放入寄存器中,我们可以把寄存器比做一个水桶,我们放入数据的时候肯定是把"水"先倒到水筒的底部.
如我们从内存中区GAME放入到水桶中的话 水桶中存放的数据就成了EMAG 也就是 45 4D 41 47 (注意每个字节是两个16进制的字符)
而水桶的高位和地位呢,想必大家会很明白,水桶的最上方就是高位,水桶底就是低位,所以EMAG 数据的高低位就是 E~G(E为最高位 G为最低位)
嵌入式系统开发者应该对Little-endian和Big-endian模式非常了解。
我们常用的X86结构是小端模 式,而KEIL C51则为大端模式。很多的ARM,DSP都为小端模式
可以用下面的程序测试:
int checkSystem( )
{
union check
{
int i;
char ch;
} c;
c.i = 1;
return (c.ch ==1);
}
如果当前系统为大端模式这个函数返回 0;如果为小端模式,函数返回 1。
本文介绍了CPU的大小端模式,大端模式将数据高位存储在低地址,小端模式则相反。内存地址高位意味着数值低位存储在较低地址,而寄存器中数据的低位在前(底部)。X86采用小端模式,KEIL C51使用大端模式。通过一个检查程序可以判断系统是大端还是小端模式。

2万+

被折叠的 条评论
为什么被折叠?



