zoukankan      html  css  js  c++  java
  • (转)汇编bne的问题

    网址:http://blog.csdn.net/lwj103862095/article/details/8073571

      

    memsetup:
        @ 设置存储控制器以便使用SDRAM等外设

        mov r1,     #MEM_CTL_BASE   @ 存储控制器的13个寄存器的开始地址
        adrl    r2, mem_cfg_val              @ 这13个值的起始存储地址
        add r3,     r1, #52                       @ 13*4 = 54
    1:  
        ldr r4,     [r2], #4            @ 读取设置值,并让r2加4
        str r4,     [r1], #4            @ 将此值写入寄存器,并让r1加4
        cmp r1,     r3                 @ 判断是否设置完所有13个寄存器
        bne 1b                          @ 若没有写成,继续
        mov pc,     lr                 @ 返回

    bne 1b什么意思呢?一开始老是在找1b的标号处,找了些许时间也没有发现哪里有这个标号。

    后来查找相关资料发现,原来0~9的数字为局部标签。局部标签可以重复使用,语法为:

    xf:往前跳的意思,就是还未执行的程序,x代表0~9的某个标签,f代表forward的意思。

    xb:往后跳的意思,回到原来已经执行过的语句,x达标0~9的某个标签,b代表backward的意思。

    上面bne 1b 的意思是,如果r1!=r3 即r1的地址的不等于r3的地址,也就是还没设置完

    这13个寄存器,就要重新跳到
    1:  
        ldr r4,     [r2], #4            @ 读取设置值,并让r2加4
        str r4,     [r1], #4            @ 将此值写入寄存器,并让r1加4
        ......

    处执行;直到r1=r3,即设置好这13个寄存器。才会结束这个局部循环。

    ——————————————————————————————————————

    eg:

    1: ;A
    cmp r0, #0
    beq 1f ;    @  r0==0那么向前跳转到B处执行
    bne 1b ;   @ 否则向后跳转到A处执行
    1: ;B

    ——————————————————————————————————————

    有趣的是:

    1:b 1b   @无限循环的意思,与while(1)等效

  • 相关阅读:
    日记10硬件与操作系统安装专用
    程序设计与算法(三)C++面向对象程序设计 (北大MOOC)
    macbook pro14 前端基本配置【20211114】
    springboot配置rabbitmq的序列化反序列化格式
    sql优化把派生表改成子查询,查询速度将变快
    Android开发 因为ViewPager与SwipeRefreshLayout冲突导致RecyclerView或者其他列表布局的item无法点击的问题
    Kotlin开发 委托
    Kotlin开发 协程的实践 Retrofit + 协程 + ViewModel
    git clean用法
    kotlin开发 高阶函数学习与记录
  • 原文地址:https://www.cnblogs.com/qiuheng/p/5741256.html
Copyright © 2011-2022 走看看