嵌入式系统数据存储的大端模式小端模式应用举例0x12345678存储到8000H
程序员文章站
2022-06-10 12:30:36
一、背景:因为不同架构的处理器,所以造成了数据在各种处理器中数据存储方式的不同;一般情况下分为两种,一种是大段模式,另外一种是小段模式。通常情况下:x86、ARM,DSP架构处理器都是小端模式,而Motorola为大端模式。二、大小端模式的概念:小端模式:指数据的高位保存在内存的高地址中,而数据的低位则保存在内存的低地址中;大端模式:是指数据的高位保存在内存的低地址中,而数据的低位则保存在内存的高地址中。可以看出两种存储数据的方式正好相反。三、应用举例:以存储一个32位数0x12...
一、背景:
因为不同架构的处理器,所以造成了数据在各种处理器中数据存储方式的不同;一般情况下分为两种,一种是大端模式,另外一种是小端模式。通常情况下:x86、ARM,DSP架构处理器都是小端模式,Motorola等为大端模式。
二、大端小端模式的概念:
小端模式(Little-endian):指数据的高数据位保存在内存的高地址中,而数据的低数据位则保存在内存的低地址中;
大端模式(Big-endian):是指数据的高数据位保存在内存的低地址中,而数据的低数据位则保存在内存的高地址中。
可以看出两种存储数据方式正好相反。
三、应用举例:
以存储一个32位数0x12345678到8000H~8003H四个字节单元中为例,讲解一下数据分别以大端模式和小端模式在内存中的存储不同;
数据大小端模式存储举例 | ||||
地址 | 8003H | 8002H | 8001H | 8000H |
小端模式 | 12 | 34 | 56 | 78 |
大端模式 | 78 | 56 | 34 | 12 |
内存中8000H为低地址,内存地址从8001H-->8001H-->8002H-->8003H以此递进增加,所以8003H为内存地址的高地址;小端模式下:低字节数据存放在内存的低地址中,所以低字节的0x78存放在低地址8000H中,0x56存放在8001H中,以此类推;而大端模式下:高字节数据存放在内存的低地址中,所以数据0x12存放在8000H中,以此类推。
因为处理器可以访问的最小单元为字节(1Byte=8bit),所以32位数据0x12345678会被分为4Byte分别存储在4个字节单元中,合如下表可以看出小端模式下,内存中各个数据bit位的详情;
bit位 | 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
十六进制 | 12 | 34 | 56 | 78 | ||||||||||||||||||||||||||||
进制转换↓ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | ||||||||||||||||||||||||
二进制 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | 0 |
1Byte=8bit | Byte 3 | Byte 2 | Byte 1 | Byte 0 |
因为小编自己能力水平有限,文中难免有错误或表达失误的信息,还望广大阅读者留言批评指正,谢谢。
本文地址:https://blog.csdn.net/praguejing/article/details/108220356