‘壹’ 大端存储和小端存储各自的优缺点是什么
没有什么优缺点.
最好输入输出流,程序一致用同一种方式,全用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中的存储格式与之相反。