.align

.align的作用是针对指令或数据的存放地址对齐。但不同的CPU架构,指令和数据的存储方式不同,也就导致对齐的计量单位不一样。

i386:n对齐

ARM:2^n 对齐,ARM架构下,指令都是占32位,所以是4字节对齐。

当数据没有4字节对齐,编译器会报错(arm-linux-gcc (ctng-1.8.1-FA) 4.5.1),也有的编译器不会报错(有可能ldr指令的地址是6,那么在运行时b跳转肯定会出错)。
加入.align(默认4字节)对齐后,能正常编译通过。
 
至于在uboot中看到.align  5,也就是0x20对齐,为什么要8个word对齐,暂不知道为什么? 
有空再研究
 
原文地址:https://www.cnblogs.com/black-mamba/p/5040586.html