博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
arm汇编之 bne与beq
阅读量:7114 次
发布时间:2019-06-28

本文共 836 字,大约阅读时间需要 2 分钟。

  • 在网上看了一些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, #0clear_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,可以参考:

 

转载于:https://www.cnblogs.com/icefree/p/8539277.html

你可能感兴趣的文章
Windows批处理中的等待技巧
查看>>
艾伟_转载:使用AOP动态调用WebService
查看>>
C#收发邮件(Jmail+Professional+v4.4+特别版)
查看>>
嵌入式计算机与PC机的区别
查看>>
FastReport微调
查看>>
nginx下的文件下载防盗链(HttpAccessKeyModule)
查看>>
Linq延迟执行(转)
查看>>
Django实战(3):Django也可以有scaffold
查看>>
简单缓存 datatable
查看>>
MFC界面的完善
查看>>
WPF&SL之Basic MVVM
查看>>
On :target
查看>>
最新30幅动人心脾的优秀摄影作品欣赏
查看>>
Map 3D 2013 新功能和新API WebCast视频下载
查看>>
2012年7月感想
查看>>
Memcached的分布式算法-Consistent Hashing
查看>>
Spring-MVC入门(一):入门实例
查看>>
MongoDB 分片
查看>>
mvc area出现“找到多个与名为“Home”的控制器匹配的类型”错误的解决方法
查看>>
T-SQL事务编写
查看>>