Chinaunix首页 | 论坛 | 博客
  • 博客访问: 827448
  • 博文数量: 143
  • 博客积分: 455
  • 博客等级: 一等列兵
  • 技术积分: 861
  • 用 户 组: 普通用户
  • 注册时间: 2012-08-03 00:11
文章分类

全部博文(143)

文章存档

2018年(10)

2017年(6)

2016年(28)

2015年(14)

2014年(67)

2013年(1)

2012年(17)

我的朋友

分类: LINUX

2014-12-20 22:37:00

在u-boot的start.s源文件中出现“.balignl 16 0xdeadbeef”语句,这条语句是实现地址对齐的。

.balignl与. align类似,完整的laign语句格式为:.align {alignment} {,fill} {,max}

alignment用于指定对齐方式,可能的取值为2的次幂,缺省为4。fill是填充内容,缺省用0填充。max是填充字节数最大值,如果填充字节数超过max, 不进行对齐。

下面分4种情况进行对比:

1.正常情况

.word 0x12345678 /* now 16*4=64 */
.global _end_vect
_end_vect:
.balignl 16,0xdeadbeef

此时.balignl位于的地址是0x50,恰好是16的倍数,所以不填充。如图所示:

2.填充一个字

//.word 0x12345678 /* now 16*4=64 */
.global _end_vect
_end_vect:
.balignl 16,0xdeadbeef

此时将0x12345678注释掉,.balignl位于的地址是0x4c,不是16的倍数,所以要使用0xdeadbeef进行填充。如图所示:

3.填充三个字

.word 0x12345678 /* now 16*4=64 */
.word 0x12345678 /* now 16*4=64 */
.global _end_vect
_end_vect:
.balignl 16,0xdeadbeef

此时加多一个0x12345678,使.balignl的地址位于0x54,不是16的倍数,所以要填充到0x5f,内容使用指定的0xdeadbeef。如图所示:

4.超过限制不填充

.word 0x12345678 /* now 16*4=64 */
.word 0x12345678 /* now 16*4=64 */
.global _end_vect
_end_vect:
.balignl 16,0xdeadbeef,8

此时限制填充最多8个字节,但是需要填充12个字节,所以不填充。如图所示:


转载自:http://www.cnblogs.com/Efronc/archive/2012/02/22/2363106.html

阅读(1566) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~