嵌入式ARM中常用的彙編指令講解

2021-10-01 13:02:03 字數 1384 閱讀 8240

在介紹之前,先把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 結構兩大類...