单片机存储中的大小端模式

转载 2016年06月02日 12:07:03

请写一个C函数,若处理器是Big_endian的,则返回0;若是Little_endian的,则返回1

解答

int checkCPU( )
{
    {
           union w
           { 
                  int a;
                  char b;
           } c;
           c.a = 1;
           return(c.b ==1);
    }
}

剖析
嵌入式系统开发者应该对Little-endianBig-endian模式非常了解。采用Little-endian模式的CPU对操作数的存放方式是从低字节到高字节,而Big-endian模式对操作数的存放方式是从高字节到低字节。例如,16bit宽的数0x1234在Little-endian模式CPU内存中的存放方式(假设从地址0x4000开始存放)为:

内存地址 0x4000 0x4001
存放内容 0x34 0x12

而在Big-endian模式CPU内存中的存放方式则为:

内存地址 0x4000 0x4001
存放内容 0x12 0x34

32bit宽的数0x12345678在Little-endian模式CPU内存中的存放方式(假设从地址0x4000开始存放)为:

内存地址 0x4000 0x4001 0x4002 0x4003
存放内容 0x78 0x56 0x34 0x12

而在Big-endian模式CPU内存中的存放方式则为:

内存地址 0x4000 0x4001 0x4002 0x4003
存放内容 0x12 0x34 0x56 0x78

联合体union的存放顺序是所有成员都从低地址开始存放,面试者的解答利用该特性,轻松地获得了CPU对内存采用Little-endian还是Big-endian模式读写。如果谁能当场给出这个解答,那简直就是一个天才的程序员。
补充:
所谓的大端模式,是指数据的低位(就是权值较小的后面那几位)保存在内存的高地址中,而数据的高位,保存在内存的低地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放; 所谓的小端模式,是指数据的低位保存在内存的低地址中,而数 据的高位保存在内存的高地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低,和我们的逻辑方法一致。
为什么会有大小端模式之分呢?这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为 8bit。但是在C语言中除了8bit的char之外,还有16bit的short型,32bit的long型(要看具体的编译器),另外,对于位数大于 8位的处理器,例如16位或者32位的处理器,由于寄存器宽度大于一个字节,那么必然存在着一个如果将多个字节安排的问题。因此就导致了大端存储模式和小 端存储模式。例如一个16bit的short型x,在内存中的地址为0x0010,x的值为0x1122,那么0x11为高字节,0x22为低字节。对于 大端模式,就将0x11放在低地址中,即0x0010中,0x22放在高地址中,即0x0011中。小端模式,刚好相反。我们常用的X86结构是小端模 式,而KEIL C51则为大端模式。很多的ARM,DSP都为小端模式。有些ARM处理器还可以由硬件来选择是大端模式还是小端模式。

大端(高位先在低内存地址位置存储),小端(低位先在低内存地址位置存储)

【转】大端(高位先在低内存地址位置存储),小端(低位先在低内存地址位置存储) 端模式(Endian)的这个词出自Jonathan Swift书写的《格列佛游记》。这本书根据将鸡蛋敲开的方法不同将...
  • wdykanq
  • wdykanq
  • 2012年12月03日 11:18
  • 7124

ARM存储格式的“大小端”解析

ARM储存—大端格式和小端格式   所谓的大端模式,是指数据的高位,保存在内存的低地址中,而数据的低位,保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而...
  • c12345423
  • c12345423
  • 2016年10月17日 10:12
  • 1090

C语言16位拆成高低八位,和高低八位合成16位数据(1)

#include #include char right,left,temp;//right表示第八位,left表示高八位 int size_right,size_left,size_temp; ...
  • qq_34071268
  • qq_34071268
  • 2017年12月07日 17:11
  • 438

大端小端以及51单片机,CORTEX M 32位单片机中的归属

1 定义:         大端模式,是指数据的高位保存在内存的低地址中,而数据的低位保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放...
  • wzk456
  • wzk456
  • 2014年11月11日 22:58
  • 1576

详解大端模式和小端模式

详解大端模式和小端模式 一、大端模式和小端模式的起源         关于大端小端名词的由来,有一个有趣的故事,来自于Jonathan Swift的《格利佛游记》:Lilliput和Blefuscu这...
  • ce123
  • ce123
  • 2011年11月16日 20:21
  • 121054

大端模式与小端模式的详解分析

大端序与小端序 何为大端序,小端序? 简单点说,就是字节的存储顺序,如果数据都是单字节的,那怎么存储无所谓了,但是对于多字节数据,比如int,double等,就要考虑存储的顺序了。注意...
  • bzhxuexi
  • bzhxuexi
  • 2014年08月29日 16:20
  • 2388

单片机大小端问题

大端格式:字数据的高字节存储在低地址,而字数据的低字节则存储在高地址(数组第一字节存的是最大值)。 51单片机   小端格式:高存高地址,低存低地址(数组第一字节存的是最小值)。 AVR   PIC ...
  • j182010
  • j182010
  • 2016年09月27日 10:12
  • 424

如何判断机器的字节顺序是高字节在前还是低字节在前

最近经常听各种人在群里面讨论各种机,linux,mac,windows,单片机的啥都有。讨论的焦点就是在这些机器上到底是高字节在前还是低字节在前。围绕这些各种口水战也是不亦乐乎,除了浪费时间以外,并没...
  • misakahina
  • misakahina
  • 2015年08月12日 21:41
  • 2959

关于C51中“大小端存储”问题的详解

1. Little-Endian(小端存储),即将低字节的数据存储于低地址中,Big-Endian(大端存储)反之。 2. 小端存储称为Intel模式,大端存储称为Motorola模式。 ...
  • it1988888
  • it1988888
  • 2013年05月01日 13:33
  • 5345

大端小端格式详解

1. 什么是大端,什么是小端: 所谓的大端模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中; 所谓的小端模式,是指数据的低位保存在内存的低地址中,而数据的高位保存在内存...
  • zhaoshuzhaoshu
  • zhaoshuzhaoshu
  • 2014年07月09日 16:30
  • 61060
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:单片机存储中的大小端模式
举报原因:
原因补充:

(最多只允许输入30个字)