『壹』 大端存儲和小端存儲各自的優缺點是什麼
沒有什麼優缺點.
最好輸入輸出流,程序一致用同一種方式,全用big endian,或 little endian. 省去byte 交換。
『貳』 簡述大端存儲法和小端存儲法,並說明信息存儲器對嵌入式設計的影響
摘要 你好,大端排序的好處是接收數據的程序可以優先得到數據的最高位,以便快速反應。
『叄』 1,理解大端模式,小端模式的存儲方式;2,掌握STR、CMP、LDR、LDREQ、MOV、ADDE
摘要 一種方法是在編譯器中加上-thumb選項,在編譯器中進行設置好了之後編譯下,採用的指令集就是Thumb指令集了。二是可以直接在ARM匯編里實現。具體的切換是通過Branch Exchange—即BX 指令來實現的。指令格式為:Thumb狀態 BX RnARM狀態 BX Rn其中Rn可以是寄存器R0—R15中的任意一個。指令可以通過將寄存器Rn的內容拷貝到程序計數器PC來完成在4Gbyte地址空間中的絕對跳轉,而狀態切換是由寄存器Rn的最低位來指定的,如果操作數寄存器的狀態位Bit0=0,則進入ARM狀態,如果Bit0=1,則進入Thumb狀態,以下是一個用例:CODE32 //表示以下使用ARM狀態下的代碼,32位對齊LDR R0, =Into_Thumb+1 //將Into_Thumb地址值加1,再賦給R0//產生跳轉地址並且設置最低位BX R0 //地址值位0為1,將進入THUMB狀態//Branch Exchange 進入Thumb狀態… CODE16 //Thumb狀態下的子函數,16位對齊…LDR R3, =Back_to_ARM //將Back_to_ARM 地址值賦給R0//產生字對齊的跳轉地址,最低位被清除,即bit0為0BX R3//Branch Exchange 返回到ARM狀態,此時運行在ARM指令集環境里 CODE32 //ARM狀態下的子函數Bach_to_ARM
『肆』 如何提取大端存儲(Big
必須清楚文件中以大端存儲數據的類型,16、32還是64位。知道了這個,就可以轉換了。轉換方法很多:
1、16位交換HIBYTE()與LOBYTE(),32位交換HIWORD()與LOWORD(),64位前兩者結合
2、調用網路編程函數ntohs(16位)、ntohl(32位)
3、匯編實現,不說了,懂匯編就不會問這個問題了
『伍』 判斷一個機器使用的是大端存儲還是小端存儲
下面的程序可以判斷一台機器是大端存儲還是小端存儲。
[cpp]view plain
#include<stdio.h>
intmain(intargc,char**argv){
//聯合(union)中,所有成員引用的是內存中相同位置,
//由具體成員類型決定了這些位如何被解釋
union{
shorts;
charc[sizeof(short)];
}un;
un.s=0x0102;//16進制數中,02是低序位元組,01是高序位元組
if(sizeof(short)==2){
if(un.c[0]==1&&un.c[1]==2){
printf("big-endian ");
}elseif(un.c[0]==2&&un.c[1]==1){
printf("little-endian ");
}else{
printf("unknow ");
}
}else{
printf("sizeof(short)=%d ",sizeof(short));
}
return0;
}
『陸』 大端和小端存儲法是什麼兩者有什麼區別
小端:較高的有效位元組存放在較高的的存儲器地址,較低的有效位元組存放在較低的存儲器地址。
大端:較高的有效位元組存放在較低的存儲器地址,較低的有效位元組存放在較高的存儲器地址。
大端模式就是低位存放在高地址上。高位存放在地址上。
小端模式就是地位存放在低地址上。高位存放在高地址上。
例如,16bit寬的數0x1234在Little-endian模式CPU內存中的存放方式(假設從地址0x4000開始存放)為:
內存地址 0x4000 0x4001
存放內容 0x34 0x12
而在Big-endian模式CPU內存中的存放方式則為:
內存地址 0x4000 0x4001
存放內容 0x12 0x34
『柒』 大端存儲方式和小端存儲方式的區別
採用大小模式對數據進行存放的主要區別在於在存放的位元組順序,大端方式將高位存放在低地址,小端方式將低位存放在高地址。採用大端方式進行數據存放符合人類的正常思維,而採用小端方式進行數據存放利於計算機處理。到目前為止,採用大端或者小端進行數據存放,其孰優孰劣也沒有定論。
『捌』 大端存儲與小端存儲對存儲數據的要求
大端小端針對多位元組數據存儲時位元組順序而言的。所謂"Little Endian",為INTEL所採用模式,數據的低位元組存放在內存低地址中,高位元組存放在高地址中,即學X86時說的「高高低低」原則。Byte3 Byte2 Byte1 Byte0在內存中對應的是:
Base Address+0 Byte0
Base Address+1 Byte1
Base Address+2 Byte2
Base Address+3 Byte3
所謂"Big Endian" ,為MOTO所採用模式,數據的低位元組存放在內存的高地址,數據的高位元組存放在內存的低地址。Byte3 Byte2 Byte1 Byte0在內存中對應的是:
Base Address+0 Byte3
Base Address+1 Byte2
Base Address+2 Byte1
Base Address+3 Byte0
Java使用的是大端序來存儲數據。big—endian:即低位元組的數據存儲在高位內存上,如對於1234,12是高位數據,34為低位數據,則java中的存儲格式應該為12存在內存的低地址,34存在內存的高地址,x86中的存儲格式與之相反。