久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 3341|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

認(rèn)識(shí)(大端--小端)端模式

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:105323 發(fā)表于 2016-2-12 22:31 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
                        端模式(Endian)的這個(gè)詞出自JonathanSwift書(shū)寫(xiě)的《格列佛游記》。這本書(shū)根據(jù)將雞蛋敲開(kāi)的方法不同將所有的人分為兩類(lèi),從圓頭開(kāi)始將雞蛋敲開(kāi)的人被歸為BigEndian,從尖頭開(kāi)始將雞蛋敲開(kāi)的人被歸為L(zhǎng)ittileEndian。小人國(guó)的內(nèi)戰(zhàn)就源于吃雞蛋時(shí)是究竟從大頭(Big-Endian)敲開(kāi)還是從小頭(Little-Endian)敲開(kāi)。在計(jì)算機(jī)業(yè)Big Endian和LittleEndian也幾乎引起一場(chǎng)戰(zhàn)爭(zhēng)。在計(jì)算機(jī)業(yè)界,Endian表示數(shù)據(jù)在存儲(chǔ)器中的存放順序。下文舉例說(shuō)明在計(jì)算機(jī)中大小端模式的區(qū)別。

   如果將一個(gè)32位的整數(shù)0x12345678存放到一個(gè)整型變量(int)中,這個(gè)整型變量采用大端或者小端模式在內(nèi)存中的存儲(chǔ)由下表所示。為簡(jiǎn)單起見(jiàn),這里使用OP0表示一個(gè)32位數(shù)據(jù)的最高字節(jié)MSB(MostSignificant Byte),使用OP3表示一個(gè)32位數(shù)據(jù)最低字節(jié)LSB(Least SignificantByte)。

地址偏移   大端模式   小端模式
0x00      12(OP0)  78(OP3)
0x01     34(OP1)  56(OP2)
0x02     56(OP2)  34(OP1)
0x03     78(OP3)  12(OP0)

   如果將一個(gè)16位的整數(shù)0x1234存放到一個(gè)短整型變量(short)中。這個(gè)短整型變量在內(nèi)存中的存儲(chǔ)在大小端模式由下表所示。

地址偏移   大端模式   小端模式
0x00      12(OP0)  34(OP1)
0x01      34(OP1)  12(OP0)

   由上表所知,采用大小模式對(duì)數(shù)據(jù)進(jìn)行存放的主要區(qū)別在于在存放的字節(jié)順序,大端方式將高位存放在低地址,小端方式將低位存放在低地址。采用大端方式進(jìn)行數(shù)據(jù)存放符合人類(lèi)的正常思維,而采用小端方式進(jìn)行數(shù)據(jù)存放利于計(jì)算機(jī)處理。到目前為止,采用大端或者小端進(jìn)行數(shù)據(jù)存放,其孰優(yōu)孰劣也沒(méi)有定論。
   有的處理器系統(tǒng)采用了小端方式進(jìn)行數(shù)據(jù)存放,如Intel的奔騰。有的處理器系統(tǒng)采用了大端方式進(jìn)行數(shù)據(jù)存放,如IBM半導(dǎo)體和Freescale的PowerPC處理器。不僅對(duì)于處理器,一些外設(shè)的設(shè)計(jì)中也存在著使用大端或者小端進(jìn)行數(shù)據(jù)存放的選擇。
   因此在一個(gè)處理器系統(tǒng)中,有可能存在大端和小端模式同時(shí)存在的現(xiàn)象。這一現(xiàn)象為系統(tǒng)的軟硬件設(shè)計(jì)帶來(lái)了不小的麻煩,這要求系統(tǒng)設(shè)計(jì)工程師,必須深入理解大端和小端模式的差別。大端與小端模式的差別體現(xiàn)在一個(gè)處理器的寄存器,指令集,系統(tǒng)總線等各個(gè)層次中。
判斷大端小端
    inti=1;  
    char*p=(char*)&i;  
   if(*p==1)   
          printf("1");
    else
          printf("2");
     大小端存儲(chǔ)問(wèn)題,如果小端方式中(i占至少兩個(gè)字節(jié)的長(zhǎng)度)則i所分配的內(nèi)存最小地址那個(gè)字節(jié)中就存著1,其他字節(jié)是0.大端的話則1在i的最高地址字節(jié)處存放,char是一個(gè)字節(jié),所以強(qiáng)制將char型量p指向i則p指向的一定是i的最低地址,那么就可以判斷p中的值是不是1來(lái)確定是不是小端。
請(qǐng)寫(xiě)一個(gè)C函數(shù),若處理器是Big_endian的,則返回0;若是Little_endian的,則返回1
解答:
int checkCPU( )
{
    {
     unionw
      {  
        int a;
        char b;
      }c;
      c.a= 1;
      return(c.b==1);
    }
}
剖析:
嵌入式系統(tǒng)開(kāi)發(fā)者應(yīng)該對(duì)Little-endian和Big-endian模式非常了解。采用Little-endian模式的CPU對(duì)操作數(shù)的存放方式是從低字節(jié)到高字節(jié),而B(niǎo)ig-endian模式對(duì)操作數(shù)的存放方式是從高字節(jié)到低字節(jié)。例如,16bit寬的數(shù)0x1234在Little-endian模式CPU內(nèi)存中的存放方式(假設(shè)從地址0x4000開(kāi)始存放)為:

內(nèi)存地址
0x4000
0x4001
存放內(nèi)容
0x34
0x12

而在Big-endian模式CPU內(nèi)存中的存放方式則為
內(nèi)存地址
0x4000
0x4001
存放內(nèi)容
0x12
0x34

32bit寬的數(shù)0x12345678Little-endian模式CPU內(nèi)存中的存放方式(假設(shè)從地址0x4000開(kāi)始存放)為:
內(nèi)存地址
0x4000
0x4001
0x4002
0x4003
存放內(nèi)容
0x78
0x56
0x34
0x12

而在Big-endian模式CPU內(nèi)存中的存放方式則為:
內(nèi)存地址
0x4000
0x4001
0x4002
0x4003
存放內(nèi)容
0x12
0x34
0x56
0x78

聯(lián)合體union的存放順序是所有成員都從低地址開(kāi)始存放,面試者的解答利用該特性,輕松地獲得了CPU對(duì)內(nèi)存采用Little-endian還是Big-endian模式讀寫(xiě)。



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 伊人手机在线视频 | 国产视频中文字幕 | 天堂一区二区三区 | 国产精品视频播放 | 高清国产一区二区 | 黄色片视频| 97精品一区二区 | 午夜视频精品 | 久久精品久久久久久 | 91深夜福利视频 | 国产在线对白 | 韩日一区二区三区 | 成人在线视频免费观看 | 91精品国产综合久久婷婷香蕉 | 一级片免费观看 | www.色.com| 国产美女自拍视频 | 欧美美乳 | 日韩精品在线播放 | 性欧美精品一区二区三区在线播放 | 五月婷婷丁香 | 久久久久se | 在线视频中文字幕 | 福利片在线观看 | 免费一级黄色电影 | 精品欧美乱码久久久久久1区2区 | 日韩不卡在线 | 精品久久久久久亚洲国产800 | 欧美国产精品一区二区三区 | 日韩一区二区在线视频 | 免费看黄色视屏 | 国产精品日韩在线 | 国产精品高清在线 | 精品熟人一区二区三区四区 | 欧美精品91爱爱 | 久久伦理电影 | 成人久久网 | 午夜精品久久久久99蜜 | 免费久草 | 中文字幕精品一区二区三区精品 | 精品一区二区三区在线观看国产 |