B跳轉指令:它是個相對跳轉指令,其機器碼格式以下:學習
[31:28]位是條件碼;[27:24]位爲「1010」(0xeaffffff)時,表示B跳轉指令,爲「1011」時,表示BL跳轉指令;[23:0]表示偏移地址。spa
使用B或BL跳轉時,下一條指令的地址是這樣計算的:開發
將指令中24位帶符號的補碼當即數擴展爲32(擴展其符號位);將此32位數左移兩位;將獲得的值加到pc寄存器中,即獲得跳轉的目標地址。擴展
例程:二進制
1.text開發流程
2.global _start總結
3_start:tar
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徹底開發流程》的一點總結...