問題:
沒有說清楚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...