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 |
總結
以上是生活随笔為你收集整理的ARM汇编 beq和bne的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WINCE6.0+S3C2443的启动过
- 下一篇: CE6内核启动过程-新角度