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,可以参考:关于标识位影响










  • 10
    点赞
  • 71
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用中提到,ARM汇编语言中有一个用于测试指令状态的指令叫做TST。TST指令实际上是ANDS指令的别名,它将第一个操作数与第二个操作数进行逻辑与运算,并更新程序状态寄存器中的标志位。与ANDS指令不同的是,TST指令不会修改目标寄存器的值,只会更新标志位。所以,TST指令用于判断某个寄存器的值与另一个操作数的逻辑与结果是否为零。如果结果为零,则表示两者没有相同的位。如果结果不为零,则表示两者至少有一个相同的位。通过判断标志位的值,可以进行条件跳转或其他操作。 引用和给出了一些例子来说明如何使用CMP指令结合其他指令来实现条件判断和跳转。例如,CMP指令可以用来比较两个寄存器的值,并根据比较结果来执行不同的操作。BEQ指令可以用来判断CMP指令的比较结果是否相等,如果相等则跳转到指定的地址执行。类似地,BNE指令可以用来判断CMP指令的比较结果是否不相等,如果不相等则跳转到指定的地址执行。 综上所述,根据引用中的描述,TST指令是ARM汇编语言中用于测试指令状态的指令。它将第一个操作数与第二个操作数进行逻辑与运算,并更新程序状态寄存器中的标志位。通过判断标志位的值,可以进行条件跳转或其他操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [ARM的一个空项目 学习的新手不会建可以参考](https://download.csdn.net/download/qq_65311741/88278105)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [ARM汇编BNE和TST和BEQ](https://blog.csdn.net/weibo1230123/article/details/84037170)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值