zoukankan      html  css  js  c++  java
  • 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个字节,所以不填充。如图所示:

  • 相关阅读:
    ZOJ 3818 Pretty Poem
    HDU 4597 Play Game
    HDU 4497 GCD and LCM
    CSU 1335 高桥和低桥
    UVA 10791 Minimum Sum LCM
    CSU 1119 Collecting Coins
    CSU 1120 病毒
    UVA 12169 Disgruntled Judge
    HDU 1301 Jungle Roads
    POJ 1258 Agri-Net
  • 原文地址:https://www.cnblogs.com/Efronc/p/2363106.html
Copyright © 2011-2022 走看看