ldr命令:把資料從記憶體載入到暫存器
ldr r0, =addr ;r0 = addr
ldr r1, [r0] ; r1 = *r0
ldr r1, [r0, #4] ; r1 = *(r0+4)
ldr r1, [r0, #4] ! ; r1 = *(r0+4);r0=r0+4;
ldr r1, [r0], #4 ; r1 = *(r0);r0=r0+4;
str命令:把資料從暫存器儲存到記憶體
str r1, [r0] ; *r0 = r1
str r1, [r0, #4] ; *(r0+4) = r1
str r1, [r0, #4] ! ; *(r0+4) = r1;r0=r0+4;
str r1, [r0], #4 ; *r0 = r1;r0=r0+4;
**多資料傳輸指令:stm ldm **
arm指令的多資料傳輸(stm、ldm)中,提到:多暫存器的load和store指令分為2組:一組用於資料的儲存與讀取,對應於ia、ib、da、db,一組用於堆疊操作,對應於fd、ed、fa、ea,兩組中對應的指令含義相同。
即:
stmib(位址先增而後完成操作)、stmfa(滿遞增堆疊);
stmia(完成操作而後位址遞增)、stmea(空遞增堆疊);
s***b(位址先減而後完成操作)、stmfd(滿遞減堆疊);
s***a(完成操作而後位址遞減)、stmed(空遞減堆疊)。
上述各組2個指令含義相同只是適用場合不同,同理有:
ldmib、ldmed;
ldmia、ldmfd;
ldmdb、ldmea;
ldmda、ldmfa。
多暫存器載入/儲存指令共有8種模式(4個用與資料塊的傳輸,4個用於棧操作)
舉例
指令:s***b sp!,
含義:sp = sp - 4,先壓lr,sp = lr(即將lr中的內容放入sp所指的記憶體位址)。sp = sp - 4,再壓r12,sp = r12。sp = sp - 4,再壓r11,sp = r11…sp = sp - 4,最後壓r0,sp = r0。
如果想要將r0-r12和lr彈出,可以用ldmia指令:
指令:ldmia sp!,
mo彙編指令 彙編指令大全
一 資料傳輸指令 它們在存貯器和暫存器 暫存器和輸入輸出埠之間傳送資料.1.通用資料傳送指令.mov 傳送字或位元組.movsx 先符號擴充套件,再傳送.movzx 先零擴充套件,再傳送.push 把字壓入堆疊.pop 把字彈出堆疊.pusha 把ax,cx,dx,bx,sp,bp,si,di依次壓...
彙編 彙編指令大全
一 資料傳輸指令 它們在存貯器和暫存器 暫存器和輸入輸出埠之間傳送資料.1.通用資料傳送指令.mov 傳送字或位元組.movsx 先符號擴充套件,再傳送.movzx 先零擴充套件,再傳送.push 把字壓入堆疊.pop 把字彈出堆疊.pusha 把ax,cx,dx,bx,sp,bp,si,di依次壓...
彙編指令msr STM 常用彙編指令
在嵌入式開發中,匯程式設計序常常用於非常關鍵的地方,比如系統啟動時初始化,進出中斷時 的環境保護,恢復等對效能有要求的地方。arm指令集可以分為六大類,分別為資料處理指令 load store 指令 跳轉指令 程式狀態 暫存器處理指令 協處理器指令和異常產生指令。arm指令使用的基本格式如下 opc...