• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

Efronc

  • 博客园
  • 联系
  • 管理

公告

View Post

GNU ARM汇编的.balignl对齐实验

在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个字节,所以不填充。如图所示:

 

posted on 2012-02-22 20:05  Efronc  阅读(2372)  评论(1)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3