ARM 組合語言程式設計

2021-08-13 16:26:21 字數 1347 閱讀 1894

教材:嵌入式系統及應用,羅蕾、李允、陳麗蓉等,電子工業出版社

迴圈程式設計

子程式及其呼叫

匯程式設計序訪問全域性 c 變數

普通分支程式

多分支(散轉)程式

程式分支點上有多於兩個以上的執行路徑的程式叫做多分支程式。利用條件測試指令或跳轉表可以實現多分支程式

帶 arm/thumb 狀態切換的分支程式

為使子程式執行完畢能返回主程式的呼叫處,子程式末尾處應有 mov、b、bx、ldmfd 等指令,並在指令中將返回位址重新複製到 pc 中

在呼叫子程式的同時,也可以使用r0~r3 來進行引數的傳遞和從子程式返回運算結果

使用 bl 指令呼叫子程式的組合語言源程式的基本結構

aera  init, code, readonly

entry

start ldr r0, = 0x3ff5000

ldr r1, = 0xff

str r1, [r0]

ldr r0, = 0x3ff5008

ldr r1, = 0x01

str r1, [r0]

bl pr

...pr ...

mov pc,lr ;返回主程式

...end

子程式中堆疊的使用(子程式需要的暫存器與主程式使用的暫存器發生衝突時)

stmfd r13!, ;壓入堆疊

...... ;子程式**

ldmfd r13!, ;彈出堆疊並返回

希望某個變數或符號可以被外部檔案引用,必須在定義這個變數或符號的檔案裡使用 export 宣告

引用全域性變數的檔案中,使用 import 來宣告該全域性變數

下面是乙個彙編**的函式,它引用了乙個在其他檔案中定義的全域性變數globvar,將其加 2 後寫回 globvar

area globals, code, readonly

export asmsubrouttine ;宣告可匯出符號,其他檔案可以呼叫該函式(asmsubrouttine)

import globvar ;宣告引用的外部符號

asmsubrouttine

ldr r1, = globvar

ldr r0, [r1]

addr0, r0,#2

str r0, [r1]

mov pc, lr

end

ARM組合語言

指令stmfd和ldmfd分析 根據atpcs規則,我們一般使用fd full descending 型別的資料棧!所以經常使用的指令就有stmfd和ldmfd,通過arm對於棧操作和批量load store指令定址方式,可以知道指令stmfd和ldmfd的位址計算方法 stmfd指令的定址方式為事...

ARM組合語言常用知識

在組合語言中包含有兩種指令,分別為 在編寫組合語言時,指令不區分大小寫,即mov與mov意義相同,風格保持一致即可。一般在windows中常採用大寫,在gnu中採用小寫。在組合語言中,段落的注釋採用 注釋 單句的注釋採用符號 例如 mov r1,r2 注釋cmp 比較 eq 相等 ne 不相等mov...

組合語言程式設計

1.彙編語句的三種基本型別 2.標號相關 3.變數相關 4.運算元定址方式 buffer dw 500 x 17 rept 500 這是乙個重複巨集,以下重複彙編500遍 x x 979 mod 65535 這句話我也不懂 dw x endm 巨集在這裡結束transto10 proc near 函...