嵌入式之家

 找回密码
 现在注册

QQ登录

只需一步,快速开始

搜索
热搜: ARM cortex
查看: 6263|回复: 2

GNU ARM汇编的.balignl对齐实验(转载)

[复制链接]
  • TA的每日心情
    开心
    2020-6-18 22:00
  • 签到天数: 1 天

    [LV.1]初来乍到

    101

    主题

    192

    帖子

    1645

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    1645
    发表于 2016-6-12 12:07:12 | 显示全部楼层 |阅读模式
    原文地址:http://www.cnblogs.com/Efronc/archive/2012/02/22/2363106.html

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


    这文章来自互联网如有侵权请和管理员联系删除


    回复

    使用道具 举报

    该用户从未签到

    11

    主题

    37

    帖子

    238

    积分

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    238
    发表于 2017-3-15 09:47:49 | 显示全部楼层
    学习了
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 现在注册

    本版积分规则

    QQ|Archiver|手机版|小黑屋|嵌入式之家 ( 京ICP备14038168号-1 )

    GMT+8, 2024-5-10 07:26 , Processed in 0.019698 second(s), 27 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

    快速回复 返回顶部 返回列表