zoukankan      html  css  js  c++  java
  • 关于u-boot中的.balignl 16,0xdeadbeef的理解

    .globl _start  //不占内存
    _start: b       start_code //占4字节内存
     ldr pc, _undefined_instruction //占4字节内存
     ldr pc, _software_interrupt //占4字节内存
     ldr pc, _prefetch_abort //占4字节内存
     ldr pc, _data_abort //占4字节内存
     ldr pc, _not_used //占4字节内存
     ldr pc, _irq //占4字节内存
     ldr pc, _fiq //占4字节内存

    占了4x8=32字节内存。

    _undefined_instruction: .word undefined_instruction //占4字节内存
    _software_interrupt: .word software_interrupt //占4字节内存
    _prefetch_abort: .word prefetch_abort //占4字节内存
    _data_abort:  .word data_abort //占4字节内存
    _not_used:  .word not_used //占4字节内存
    _irq:   .word irq //占4字节内存
    _fiq:   .word fiq //占4字节内存

    占了4x7=32字节内存。

    所以在这个.balignl 16,0xdeadbeef指令之前,一共占了4x15=60个字节的内存,所以本代码的作者当时就简单的在15这个数上,加了个1,即16,把当前指针往后移到地址为64的位置,然后在前面插上了0xdeadbeef这个特殊的值。

    我不知道这个地方是作者一个错误,歪打正着呢,还是怎么回子事,其实这个偏移的值还有好多种情况。如果说最小的值的话,那么也可以写成.balignl 8,0xdeadbeef,也可以达到同样的目的。因为60不是8的倍数,但是64是8的倍数,如果写8,也正好插到64前面,也即60这个内存起始地址。如果更大一点儿的呢,那么填32也可以达到同样的效果,即.balignl 32,0xdeadbeef,道理同上。当然,不能为4,因为pc值在任何时候,都是4的倍数,只要不为0就为4的倍数,呵呵,这个值不行,如果用了这个值,0xdeadbeef永远也插不进去。

  • 相关阅读:
    最少代码的瀑布流实现
    GoLang代码规范
    wcf基础知识之ListenUri和ListenUriMode实现 逻辑地址和物理地址的分离
    STL学习笔记 string
    Bitbucket上使用SSH协作
    使用注册表文件(REG)添加、 修改或删除注册表子项和值
    《大话设计模式》Python版代码实现
    go windows 32位环境搭建
    借书场景领域建模分析
    E/R模型学习
  • 原文地址:https://www.cnblogs.com/laojie4321/p/4388237.html
Copyright © 2011-2022 走看看