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

  • 相关阅读:
    A 第一课 链表
    CSS基础_01:
    html基础(2)
    冒泡_选择算法
    高等数学以及Python 实现
    ubuntu18.04 镜像下载
    MatplotLib 第二部分
    一件很好笑的事情
    HIVE文件
    一个关于消息结构体的讨论
  • 原文地址:https://www.cnblogs.com/qiuheng/p/5741256.html
Copyright © 2011-2022 走看看