.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字节)对齐后,能正常编译通过。
![](https://images2015.cnblogs.com/blog/593387/201512/593387-20151212000746247-2112426820.png)
至于在uboot中看到.align 5,也就是0x20对齐,为什么要8个word对齐,暂不知道为什么?
有空再研究