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

  • 相关阅读:
    vue.js小结
    前端js
    前端HTML页面签入微信和APP小结
    angualr引入bootstrap部分效果失效。
    .net面试问到的问题
    C#网页爬虫抓取行政区划
    mysql 更新一个字段(在他的后面添加字符串)
    关于asp.net C# 导出Excel文件 打开Excel文件格式与扩展名指定格式不一致的解决办法
    动态生成GridView列
    MSDN_FieldInfo.SetValue
  • 原文地址:https://www.cnblogs.com/Efronc/p/2363106.html
Copyright © 2011-2022 走看看