版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weibo1230123/article/details/84037170
ARM汇编:BNE和TST
(1)例一:TST与BNE搭配
TST r0,#02
BNE sleep
LDR r1,#0
解释:位比较,先进行and运算,如果r0第2位不为1,则与的结果为0,设置标志位zero=1,继续下面的ldr指令。反之,zero=0,跳转到sleep执行。
bne指令: 非零则跳转
个人总结:TST 和BNE 连用: 先是用TST 进行位与运算,然后将位与的结果与0比较,如果不为0,则跳到bne紧跟着的标记(如bne sleep,则跳到sleep处)。
TST 和BEQ连用: 先是用tst进行位与运算,然后将位与的结果与0比较,如果为0,则跳到beq紧跟着的标记(如bne AAAA,则跳到AAAA处)。
(2)例二:CMP同BNE搭配
CMP r1,r2
BNE copy_loop
这个CMP搭配下边的BNE指令构成了如果r1≠r2则执行BNE指令,跳转到copy_loop函数处执行。否则,就跳过下边,bne指令向下执行。
(3)例三:CMP同BEQ搭配
CMP r0,r1
BEQ clean_bss
如果r0=r1,就执行BEQ,跳转到clean_bss函数处执行,否则跳过BEQ向下执行。
总结:其实上边两句都是跳转指令,跳转到相关函数处执行。区别在于执行跳转的条件不同。