日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
識別Linux大小端識別:深入淺出(linux大小端)

linux大小端識別是對于存儲器編碼方式的識別,它是指在存儲器中字節(jié)的順序,大端表示存儲器中字節(jié)的高位放在低位地址,而小端則恰好相反,高位存儲在高地址。在開發(fā)中會遇到不同的系統(tǒng)、處理器,存儲器編碼方式也是不盡相同,例如x86編譯出來的可執(zhí)行文件是字節(jié)順序都是小端的。而在ARM之類的開發(fā)中,編譯出的文件的字節(jié)順序可以根據(jù)不同的處理器設(shè)置大端或小端,開發(fā)者需要針對不同的處理器進(jìn)行字節(jié)順序的檢測,并且采用不同的程序進(jìn)行處理。

一種最簡單的linux大小端識別方法就是使用CPUID命令檢測CPU的類型,在不同的架構(gòu)中采用不同的匯編指令,實現(xiàn)Linux大小端識別,代碼如下:

//Check CPU Type

asm volatile (“movl $0x01, %%eax; \

xorl %%edx, %%edx; \

cpuid; \

movl %%edx, %0″

:”=r” (INFO->EDX)::”%eax”,”%edx”);

// Checks if the CPU is big or little endian

if((info->EDX) & 0x00000001){

info->ENDIANNESS = LITTLE_ENDIAN;

}

else{

info->ENDIANNESS = BIG_ENDIAN;

}

上面的代碼使用匯編指令CPUID,然后將edx寄存器中第一位的值判斷出CPU類型,從而識別Linux大小端。如果根據(jù)edx的第一位的值的話,對于x86系統(tǒng)下查詢出來的結(jié)果是0,則為小端模式,如果查詢結(jié)果是1,則為大端模式。

此外,如果要實時的進(jìn)行大小端的轉(zhuǎn)換,同樣可以使用匯編指令來進(jìn)行,具體代碼如下:

//Swap endianness

asm volatile (“rorl $16, %0”

: “=q” (info->data)

:: “cc”);

上面的代碼使用匯編指令rorl對變量info->data進(jìn)行移位16次,實現(xiàn)大小端的轉(zhuǎn)換,將原來的小端字節(jié)序轉(zhuǎn)換成大端字節(jié)序或者將大端字節(jié)序轉(zhuǎn)換成小端字節(jié)序。

總之,Linux大小端識別的實現(xiàn)較為簡單,不僅可以使用cpuid命令,還可以使用rorl匯編指令來識別CPU類型,以及實時的進(jìn)行大小端轉(zhuǎn)換,這樣可以使得我們可以在不同系統(tǒng)之間正常實現(xiàn)數(shù)據(jù)同步。

成都網(wǎng)站建設(shè)選創(chuàng)新互聯(lián)(?:028-86922220),專業(yè)從事成都網(wǎng)站制作設(shè)計,高端小程序APP定制開發(fā),成都網(wǎng)絡(luò)營銷推廣等一站式服務(wù)。


分享題目:識別Linux大小端識別:深入淺出(linux大小端)
分享URL:http://www.5511xx.com/article/djecdji.html