zoukankan      html  css  js  c++  java
  • arm汇编之 bne与beq

    • 在网上看了一些bne和beq的区别,但是对于初学者来说,容易越看越糊涂,因此简单介绍下:
    • 我们先分析CPSR寄存器的Z标识位:

    • cmp指令可以直接影响CPSR寄存器的Z标识位(条件位),从图中可以看出:比较结果为0时,Z位置1,比较结果为非0时,Z位为0;
    • 再来看一段SDRAM重定位中的子过程(不必纠结于子过程的功能):
    • // 清bss段,其实就是在链接地址处把bss段全部清零
      clean_bss:
          ldr r0, =bss_start                    
          ldr r1, =bss_end
          cmp r0, r1            // 如果r0等于r1,说明bss段为空,直接下去
          beq run_on_dram            // 清除bss完之后的地址
          mov r2, #0
      clear_loop:
          str r2, [r0], #4        // 先将r2中的值放入r0所指向的内存地址(r0中的值作为内存地址),
          cmp r0, r1            // 然后r0 = r0 + 4
          bne clear_loop

    beq:

    • “beq run_on_dram” 如果 r0 - r1 = 0 ,程序跳转到run_on_dram处,再向下执行,此时CPSR的Z标识位为1,我们可以理解为:cmp的结果为0,或者CPSR的Z标识位为1时,程序跳转到beq 后的标签处;

    bne:

    • “bne clear_loop”  如果 r0 - r1  != 0 ,程序跳转到clear_loop处,再向下执行,此时CPSR的Z标识位为0,我们可以理解为:cmp的结果为1,或者CPSR的Z标识位为0时,程序跳转到bne 后的标签处;
    • 对于CPSR寄存器的条件位的 N Z C V,可以参考:关于标识位影响



  • 相关阅读:
    快学Scala-第八章 继承
    快学scala-第七章 包和引入
    快学Scala-第六章 对象
    快学Scala-第五章 类
    快学Scala-第四章 映射和元组
    快学Scala-第三章 数组相关操作
    快学Scala-第二章 控制结构和函数
    快学Scala-第一章 基础
    ReLu(Rectified Linear Units)激活函数
    软件工程的发展史
  • 原文地址:https://www.cnblogs.com/icefree/p/8539277.html
Copyright © 2011-2022 走看看