日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ARM汇编 beq和bne

發布時間:2025/4/16 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ARM汇编 beq和bne 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1、前陣子看cpu從sleep模式喚醒時,對tst bne和tst beq有些模糊。先記錄:摘抄如下:

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

%B, %F可以這樣理解: B表示before,向前。F表示after,向后

總結

以上是生活随笔為你收集整理的ARM汇编 beq和bne的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。