在学习uboot的时候经常在start.S头文件前面看到:
.word 0x2000
.word 0x0
.word 0x0
.word 0x0
课程解释说是占位用的,是uboot前面的16个字节的header
.word
代表是字,一个字长。
字长与处理器的位数有关,比如16位处理器,字长为2Byte:
同理,arm的32位处理器字长为4字节。
.word
是怎么排布的?
.word 0x2000
.word 0x1234
.word 0x5678
.word 0x9abc
用winhex把编译后的uboot.bin读出可得
首先,红框内是16个字节的内容,通过现象分析
分为这样4组,一组4字节。
00 20 00 00
34 12 00 00
78 56 00 00
BC 9A 00 00
得到结论
1.我写进去的只有2个字节,而且是先写入低16位,因为是.word类型的(4字节-32位系统),高16位自动补0
2.写入的时候是从低位到高位以字节为单位写入,以0x1234为例
实际是00 00 12 34
写入后变为 34 12 00 00
为了进一步验证我的想法:
这次写满32位
.word 0x2000aabb
.word 0x12344321
.word 0x56788765
.word 0x9abcbca9
编译后读出:
.word 0x2000aabb
.word 0x12344321
.word 0x56788765
.word 0x9abcbca9
对应关系
BB AA 00 20
21 43 34 12
65 87 78 56
A9 CB BC 9A
验证结论成立。
结论
1 .word
字长要根据处理器位数决定
2. 数据写入时从低位到高位依次写入,如果没写满则剩下的高位补0。