ARM彙編:BNE和TST和BEQ
阿新 • • 發佈:2018-11-16
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向下執行。
總結:其實上邊兩句都是跳轉指令,跳轉到相關函式處執行。區別在於執行跳轉的條件不同。