新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > ARM匯編程序基本知識

ARM匯編程序基本知識

作者: 時間:2016-11-28 來源:網(wǎng)絡(luò) 收藏

如:

Str DCB “this is a test” ;分配一片連續(xù)的字節(jié)存儲單元并初始化

Data DCW 1,2,3 ;分配一片連續(xù)的半字存儲單元并初始化

Data DCD 4,5,6 ; 分配一片連續(xù)的字存儲單元并初始化

Fdata DCFS 2e5,-5e-7 ;分配一片連續(xù)的字存儲單元并初始化為指定的單精度數(shù)

Dspce SPACE 100 ;分配連續(xù)100字節(jié)的存儲單元并初始化為0

控制偽操作

IF ELSE ENDIF

WHILE WEND

MACRO MEND;MEXIT

信息報告?zhèn)尾僮?p>ASSERT

INFO

OPT

其他常用偽操作

AREA ALIGN CODE16/CODE32 ENTRY END EQU EXPORT(GLOBLE) IMPORT EXTERN GET(INCLUDE) INCBIN RN ROUT

AREA

格式:AREA 段名 屬性1,屬性2,……

常用屬性有:

CODE :用于定義代碼段,默認(rèn)為READONLY

DATA: 定義數(shù)據(jù)段,默認(rèn)為READWRITE

READONLY: 指定本段為只讀

READWRITE: 指定本段為讀寫

ALIGN: 使用方式為ALIGN表達(dá)式。在默認(rèn)時,ELF(可執(zhí)行鏈接文件)的代碼段和數(shù)據(jù)段是按字對齊的。表達(dá)式的取值范圍為0~31,相應(yīng)的對齊方式為2次冪。

COMMON: 定義一個通用的段,不包含任何用戶的代碼和數(shù)據(jù)。各源文件中同名的COMMON段共享同一段存儲單元。

ALIGN

格式:ALIGN [表達(dá)式[,偏移量]]

ALIGN偽操作可通過添加填充字節(jié)的方式,使當(dāng)前位置滿足一定的對齊方式。

例:

……

DATA1DCB “STRIN” ; 定義后不能保證地址對齊

ALIGN 4 ;確保當(dāng)前地址是4字節(jié)對齊

……

例:

AREA Cache, CODE, ALIGN=3 ; 指定本代碼段的指令時23=8字節(jié)對齊的

……

MOV PC, LR ;程序跳轉(zhuǎn)后是4字節(jié)對齊,返回后需要繼續(xù)8字節(jié)對齊

ALIGN 8 ;當(dāng)前位置再次滿足8字節(jié)對齊

……

注意上面,在AREA中使用和單獨(dú)使用ALIGN的區(qū)別,格式和計算方式不一樣。

ENTRY

用于指定匯編程序的入口點(diǎn)。一個程序可以由一個或者多個源文件組成,一個源文件由一個或者多個程序段組成。一個程序至少有一個入口點(diǎn),也可有多個入口點(diǎn),但是在一個源文件中,最多只能有一個ENTRY。當(dāng)有多個ENTRY時,程序的真正入口點(diǎn)由鏈接器指定。編譯程序在編譯連接時根據(jù)程序入口點(diǎn)進(jìn)行連接。在只有一個入口點(diǎn)時,編譯程序會把這個入口點(diǎn)的地址定義為系統(tǒng)復(fù)位后的程序起始點(diǎn)。

END

在源文件結(jié)束處寫上,表示源程序的結(jié)尾。

EXPORT

格式:EXPORT 標(biāo)號 [,WEAK]

聲明一個全局標(biāo)號,該標(biāo)號在其他文件中可引用。WEAK表示碰上其他同名標(biāo)號時,其他標(biāo)號優(yōu)先。

AREA INIT, CODE, READONLY

EXPORT Stest

……

END

IMPORT

格式:IMPORT 標(biāo)號 [,WEAK]

表示該引用的標(biāo)號在其他源文件中,但要在當(dāng)前文件中引用。WEAK表示找不到該標(biāo)號時,也不報錯,一般講該標(biāo)號值置為0,如果是B或者BL使用到,則該指令置為NOP。

與EXTERN的不同的是,無論當(dāng)前文件是否引用該標(biāo)號,該標(biāo)號都被加入當(dāng)前源文件的符號表中。

AREA INIT, CODE, READONLY

IMPORT MAIN;

……

END

EXTERN

和IMPORT一樣,不同之處在于,如果當(dāng)前文件沒有引用該標(biāo)號,該標(biāo)號不會加入當(dāng)前源文件的符號表中。

GET(或INCLUDE)

將一個源文件包含到當(dāng)前的源文件中,并在當(dāng)前位置進(jìn)行編譯。

AREA INIT, CODE, READONLY

GET a1.s

GET C:/a2.s

……

END

INCBIN

將一個目標(biāo)文件或者數(shù)據(jù)文件包含到當(dāng)前,文件內(nèi)容被原封不動的放在當(dāng)前位置,編譯器不對文件內(nèi)容進(jìn)行編譯。

AREA INIT, CODE, READONLY

GET a1.s ; 包含a1.s并且對a1.s進(jìn)行編譯

INCBIN C:/d.txt ; 包含d.txt,不對內(nèi)容進(jìn)行編譯

GET a2.s ; 包含a2.s,并對內(nèi)容進(jìn)行編譯

END

RN

給一個寄存器定義一個別名。

Temp RN, R0 ; 將R0定義一個別名 Temp


上一頁 1 2 下一頁

關(guān)鍵詞: ARM匯編程序基本知

評論


技術(shù)專區(qū)

關(guān)閉