在介紹之前,先把arm中常見的暫存器及其別名截圖,如下:
其中的r1,r2,r3常用作傳遞引數,r4至r11儲存區域性變數,r13常用作資料棧指標,別名sp;r14暫存器稱作連線暫存器,別名lr,常用儲存子程式返回位址;暫存器r15是程式計數器,別名pc
(1)相對跳轉指令:b、bl
這倆條指令可跳轉範圍是當前指令的前後32mb,並且這倆條指令是與位置無關的指令
例如:/* 死迴圈 */
halt:
b halt
(2)資料傳送指令mov,位址讀取偽指令ldr
mov可以把乙個暫存器的值(或乙個常數)賦值給暫存器
例如:mov r1,r2 /*把暫存器r2的值賦值給r1*/
mov r1,#4096
/*把4096寫到暫存器r1中,#號後面的常數必須為立即數,當不確定這個常數是不是可以用立即數表示,
我們一般用ldr命令賦值*/
ldr r1,=4097
/*這種形式的ldr為偽指令,偽指令的意思是不存在這條指令,這條指令在執行時會自動拆分成多條指令去執行,
一般這種形式用於比較大的數給暫存器賦值的情況*/
(3)記憶體訪問指令:ldr,str,ldm,stm
ldr指令從記憶體中讀取資料到暫存器,str指令把暫存器的值儲存到記憶體中,他們操作的資料都是32位的。
例如:ldr r1,[r2,#4] /*將位址為r2+4的記憶體單元資料讀取到r1中*/
ldr r1,[r2] /*將位址為r2的記憶體單元資料讀取到r1中*/
ldr r1,[r2],#4 /*將位址為r2的記憶體單元資料讀取到r1中,然後r2=r2+4*/
str r1,[r2,#4] /*將暫存器r1中的資料存到位址為r2+4的記憶體單元*/
str r1,[r2] /*將暫存器r1中的資料存到位址為r2的記憶體單元*/
str r1,[r2],#4 /*將暫存器r1中的資料存到位址為r2的記憶體單元,然後r2=r2+4*/
ldm,stm則是對多個暫存器操作,前置讀記憶體,將資料寫入多個暫存器中,後者把多個暫存器的值寫入記憶體
(4)加減指令:add,sub
嵌入式GNU彙編常用指令
特殊暫存器 cpsr和spsr 除了push,pop還有stmfd,ldmfd。stm 和 ldm 就是多儲存和多載入,arm 使用的 fd 型別 的堆疊,fd 是 full descending 的縮寫,即滿遞減的意思,因為fd堆疊是向下增長的。stmfd sp r0 r3,r12 入棧 stmf...
嵌入式系統(三) ARM 指令彙編(3)
在 2 中基本上把arm的儲存訪問指令過了一遍,今天搞搞其他型別的指令。3 arm分支指令 4 協處理器指令 資料處理指令大致可分為3類 資料傳送指令 算術邏輯運算指令 比較指令。資料處理指令只能對暫存器的內容進行操作,而不能對記憶體中的資料進行操作。所有arm資料處理指令均可選擇使用s字尾,並影響...
嵌入式ARM彙編複習
嵌入式系統是將先進的計算機技術 半導體技術和電子技術與各個行業的具體應用相結合後的產物。嵌入式系統的特點 形式多樣 面向特定應用,處理器和處理器體系結構型別多,關注成本,實時性和可靠性的要求 嵌入式微處理器的體系結構 可以分為馮 諾依曼 von neumann 結構或哈佛 harvard 結構兩大類...