blx指令
76 09 00 fa
fa 00 09 76
31 30 29 28 27 26 25 24 23 0
1 1 1 1 1 0 1 0(h) 0 000 0000 0000 1001 0111 011 0
最高4位表示執行條件
1111無條件執行
101固定指令碼
h=0signed_immed_24
000976
pc = pc + (signextend(signed_immed_24)<<2) + (h<<1)
0000 0000 0010 0101 1101 1000
0025d8
38 11 9f e5
ldr指令
2f5c:
e59f1138
ldrr1, [pc, #312]
; 0x309c
e59f1138
1110 0101 1001 1111 0001 0001 0011 1000
bit31-28 1110 無條件執行
bit27-26 01 固定編碼
bit25 0 0 固定編碼
bit24 1 1 固定編碼
bit23 u 1
if( u == 1 )else
bit22 b 0
if( b==1 )else
bit21 0 固定編碼
bit20 l 1
if(l==1)else
bit19-16 rn 基址暫存器 1111 r15 pc
bit15-12 rd 目的暫存器 0001 r1
bit11-0 offset_12 位址偏移量
2f5c:
e59f1138
ldrr1, [pc, #312]
; 0x309c
載入(pc+0x138)位址裡面的內容(字32bit)送到r1暫存器
0x2f5c+0x138 = 0x3094
0x309c = 0x3094 + 8
為什麼加8, 3級流水線
載入0x309c位址的乙個字到r1
還有乙個資訊,此處的裝載屬於與位置無關的**,因為基址是pc
也就是說此**在記憶體的任何位址都可以得到正確執行。
uboot載入到記憶體執行,即屬於此類
關鍵再配合adr絕對取位址指令.....
bin檔案linux平台反彙編指令:
arm-linux-androideabi-objdump -d -b binary -m arm boot0_sdcard_sun8iw5p1.bin >boot0asm.asm
ARM彙編指令
b或bl指令引起處理器轉移到 子程式名 也就是位址 處開始執行,這兩個指令都是相對跳轉指令。兩者的不同之處在於bl指令在轉移到子程式執行之前,將其下一條指令的位址拷貝到r14 lr,鏈結暫存器 由於bl指令儲存了下條指令的位址,因此使用指令 mov pc lr 即可實現子程式的返回。而b指令則無法實...
arm彙編指令
一般arm官方風格彙編指令為大寫,windows ads mdk 實際運用一般用gnu風格,為小寫,linux 1 arm採用risc架構,cpu本身不能直接讀取內 存,而需要先將記憶體中內容加載入cpu中通用寄 存器中才能被 cpu處理 ldr loadregister 指令 將記憶體內容加載入通...
ARM彙編指令
1.彙編概述 2.指令分類學習 3.偽指令 4.協處理訪問指令 為什麼要學習使用匯程式設計序?bootloader kernel的初始化和需要執行效率極高的程式中 1.arm標準彙編 2.gnu彙編 section.data 初始化的資料 section.bss 未初始化的資料 section.te...