arm彙編指令理解

2021-07-30 20:51:57 字數 1362 閱讀 2787

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...