ARM的大端格式big endian、小端格式little endian和字word

您所在的位置:网站首页 arm78 ARM的大端格式big endian、小端格式little endian和字word

ARM的大端格式big endian、小端格式little endian和字word

2024-07-03 01:58| 来源: 网络整理| 查看: 265

1.大小端格式的定义 在ARM体系结构的数据存储格式中,将4字节定义为一个字(Word),2字节定义为半字。 例如从0地址开始存放字数据,0号字节到3号字节放置第一个字数据,从第4号字节到第7字节放置第二个字数据。 当ARM处理器向以字节为单位编址的线性地址空间写入字数据(或半字数据)时,就存在一个字(或半字)中,高位字节和低位字节与存储器连续的4个字节单元(或2个)字节对应的问题。

小端格式是字数据中的低字节对应4个字节存储空间的低地址单元、高字节对应存储空间的高地址单元。 大端格式是字数据中的低字节对应4个字节存储空间的高地址单元、高字节对应存储空间的低地址单元。 例如一个字的数据0x12345678 其字节从高到低分别为 0x12、0x34、0x56、0x78 假设他存储在起始地址单元为0x0000的存储空间则

++++ 低地址位 ++++ ++++ 高地址位 地址空间 0x0000 0x0001 0x0002 0x0003 大端格式 0x12 0x34 0x56 0x78 小端格式 0x78 0x56 0x34 0x12 大小端格式的优缺点 大端容易判断出正负,小端容易进行数据类型转换。 一般情况下,ARM是大端模式,X86是小端模式。

3.数组在大小端的存储情况 Big-Endian: 低地址存放高位,如下: 高地址 --------------- buf[3] (0x78) -- 低位 buf[2] (0x56) buf[1] (0x34) buf[0] (0x12) -- 高位 --------------- 低地址 Little-Endian: 低地址存放低位,如下: 高地址 --------------- buf[3] (0x12) -- 高位 buf[2] (0x34) buf[1] (0x56) buf[0] (0x78) -- 低位 -------------- 低地址

4.为什么会有大小端模式之分呢? 这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为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处理器还可以由硬件来选择是大端模式还是小端模式。 在ARM体系中,每个字单元包含4个字节单元或者两个半字单元。在字单元中,4个字节哪一个是高位字节,哪一个是低位字节则有两种不同的格式:big-endian和little-endian格式。在小端模式中,低位字节放在低地址,高位字节放在高地址;在大端模式中,低位字节放在高地址,高位字节放在低地址。 在C语言中,不同于结构体,共用体(联合体)中的几种不同类型的变量存放在同一段内存单元中。利用这一特点,可以用联合体变量判断ARM或x86环境下,存储系统是大端还是小端模式。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3