b跳轉指令:它是個相對跳轉指令,其機器碼格式如下:
[31:28]位是條件碼;[27:24]位為「1010」(0xeaffffff)時,表示b跳轉指令,為「1011」時,表示bl跳轉指令;[23:0]表示偏移位址。
將指令中24位帶符號的補碼立即數擴充套件為32(擴充套件其符號位);將此32位數左移兩位;將得到的值加到pc暫存器中,即得到跳轉的目標位址。
例程:1.text
2.global _start
3_start:
4 b step1
5 step1:
6 ldr pc, =step2
7 step2:
8 b step2
反彙編**:
0: eaffffff b 0x4
4: e59ff000 ldr pc, [pc, #0] ; 0xc
8: eafffffe b 0x8
c: 30000008 tsteq r0, #8 ; 0x8
b跳轉指令:它是個相對跳轉指令,其機器碼格式如下:
[31:28]位是條件碼;[27:24]位為「1010」(0xeaffffff為一條指令的二進位制機器碼)時,表示b跳轉指令,為「1011」時,表示bl跳轉指令;[23:0]表示乙個相對於pc的偏移位址。
將指令中24位帶符號的補碼立即數擴充套件為32(擴充套件其符號位);將此32位數左移兩位;將得到的值加到pc暫存器中,即得到跳轉的目標位址。
我們看看第一條指令「b step1」的機器碼0xeaffffff:
1.24位帶符號的補碼為0xffffff,將它擴充套件為32得到:0xffffffff
2.將此32位數左移兩位得到:0xfffffffc,其值就是-4(0xfffffffc符號位不變,其餘位取反再加1得到-4);
3.pc的值是當前指令的下兩條(下一條的下一條)指令的位址,加上步驟2得到的-4(pc-4,即pc回退4個位元組,剛好指向當前指令的下一條指令上),這恰好是第二條指令step1的位址。
不要被被反彙編**中的「b 0x4」給迷惑了,它可不是說跳到絕對位址0x4處執行,絕對位址得像上述3個步驟那樣計算。
學習《s3c2410完全開發流程》的一點總結...
B或BL跳轉時位址的計算方法
1 text 2.global start 3 start 4b step1 5step1 6 ldr pc,step2 7step2 8b step2 反彙編 0 eaffffff b 0x4 4 e59ff000 ldr pc,pc,0 0xc 8 eafffffe b 0x8 c 300000...
使用NRF52xx sniffer抓取BLE包
抓取ble資料報就和我們做程式開發中列印log功能是一樣的,我們可以方便快捷的獲取程式執行狀態以及出錯後定位bug位置,無線通訊過程中的資料報都是通過電磁波以空氣為介質進行傳播的。所以,我們抓取空氣中的資料報,對ble開發來說,完全是0感知,不會有傳統程式開發過程中log列印的太多影響程式的執行效率...
Mysql 索引(B樹或B 樹)
參考1 參考2myisam索引與innodb索引相比較 myisam支援全文索引 fulltext 壓縮索引,innodb不支援 innodb支援事務,myisam不支援 myisam順序儲存資料,索引葉子節點儲存對應資料行位址,輔助索引很主鍵索引相差無幾 innodb主鍵節點同時儲存資料行,其他輔...