ARM汇编 beq和bne
TST     R0, #0X8
BNE    SuspendUp ;BNE指令是“不相等(或不为0)跳转指令”: 
LDR R1,#0x00000000
先进行and运算,如果R0的第四位不为1,则结果为零,则设置zero=1(继续下面的LDR指令);
否则,zero=0(跳到SuspendUp处执行)。
还有:
有点模糊,在此记下。
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、
昨天在看arm汇编,其中有这样的一段语句
| 0 ldr r3, [r0], #4 str r3, [r1], #4 cmp r2, r0 bne %B0 | 
| 
 | 
bne:不等于则调转
但%B0 ,网上搜了一遍,还是未果。从最后的汇编语言来看,%B 代表,往前搜索 lable为0的行,换句话说,就是指本条语句前,lable为0的地址。整条语句的意思就是,如果不相等则跳转到lable为0的行。
同样,有了bne %B0,也就有了bne %F1,这是向后搜索lable为1的行。参考代码:
| ; check if EIN0 button is pressed 
 ldr r0,=GPFCON ldr r1,=0x0 str r1,[r0] ldr r0,=GPFUP ldr r1,=0xff str r1,[r0] 
 ldr r1,=GPFDAT ldr r0,[r1] bic r0,r0,#(0x1e<<1) ; bit clear tst r0,#0x1 bne %F1 
 (省略一些语句) ;Clear SDRAM End 1 ;Initialize stacks bl InitStacks | 
 
                    
                     
                    
                 
                    
                 
                
            
         
 
         浙公网安备 33010602011771号
浙公网安备 33010602011771号