ARM彙編指令

2021-09-11 23:03:34 字數 1172 閱讀 7016

問題:

沒有說清楚arm讀取指令字對齊最低兩位是零問題.

參考:arm讀取指令字對齊最低兩位是零

ldr和mov的區別

參考: ldr 和mov 指令區別

ldr : 讀記憶體,load

例子: ldr r0,[r1]

解釋: 假設r1的值是0x123,讀取0x123位址的資料(4位元組),儲存到r0中

例子: ldr r0,#0x12345678

解釋: 錯誤指令,#0x12345678不是立即數.可以使用偽指令來操作.

例如: ldr r0,=0x12345678

str : 寫記憶體

例子: str r0,[r1]

解釋: 假設r1的值是0x123,把r0的值寫到位址0x123(4位元組)上

b : 跳轉

mov: 賦值

例子: mov r0,r1 : 把r1的值賦給r0, r0 = r1

mov r0,#0x100 : r0 = 0x#100

add : 加法運算

例子: add r0,r1,#4

解釋: r0 = r1 + 4

sub : 減法運算

例子: sub r0,r1,#4

解釋: r0 = r1 - 4

例子: sub r0 ,r1,r2

解釋: r0 = r1 - r2

bl : branch and link

例子: bl ***

解釋: 1, 跳轉到***. 2, 把返回位址儲存在lr暫存器. 3, 返回位址表示下一條指令位址.

ldm: 讀記憶體,寫入多個暫存器.

stm: 把多個暫存器的值寫入記憶體.

ldmia: 先讀後增. !感嘆號表示儲存減完後的值.

s***b: 先減後存. 存多個值都保持按高編號暫存器存在高位址規律.

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