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)等效

  • 相关阅读:
    产品列表
    PHP全栈学习笔记5
    PHP全栈学习笔记5
    PHP全栈学习笔记4
    更新YUM源后的arning: rpmts_HdrFromFdno: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY错误
    监听EditText输入完成
    关于PHP接收HTTP模拟POST传JSON格式时$_POST为空的问题
    安卓时间类型的转换和比大小
    Android之观察者/被观察者模式Observer/Observable
    WKWebView--JS调用OC的方法
  • 原文地址:https://www.cnblogs.com/qiuheng/p/5741256.html
Copyright © 2011-2022 走看看