ARM邪獵文章,請點(diǎn)擊以下匯總鏈接:
《從0學(xué)arm合集》
一、MDK和GNU偽指令區(qū)別
我們在學(xué)習(xí)匯編代碼的時候經(jīng)過會看到以下兩種風(fēng)格的代碼:
gnu代碼開頭是:
.global _start
_start: @匯編入口
ldr sp,=0x41000000
.end @匯編程序結(jié)束
MDK代碼開頭是:
AREA Example,CODE,READONLY ;聲明代碼段Example
ENTRY ;程序入口
Start
MOV R0,#0
OVER
END
這兩種風(fēng)格的代碼是要使用不同的編譯器,我們之前的實例代碼都是MDK風(fēng)格的。
那么多對于我們初學(xué)者來說要學(xué)習(xí)哪種風(fēng)格呢?答案是肯定的,學(xué)習(xí)GNU風(fēng)格的匯編代碼,因為做Linux驅(qū)動開發(fā)必須掌握的linux內(nèi)核、uboot,而這兩個軟件就是GNU風(fēng)格的。
為了大家不要把過多精力浪費(fèi)在暫時沒用的知識上,下面我們只講GNU風(fēng)格匯編。
二、GNU匯編書寫格式:1. 代碼行中的注釋符號:
‘@’ 整行注釋符號:‘?!?語句分離符號:
直接操作數(shù)前綴: ‘?!?或 ‘$’
2. 全局標(biāo)號:
標(biāo)號只能由a~z,A~Z,0~9,“.”,_等(由點(diǎn)、字母、數(shù)字、下劃線等組成,除局部標(biāo)號外,不能以數(shù)字開頭)字符組成,標(biāo)號的后面加“:”。
段內(nèi)標(biāo)號的地址值在匯編時確定;
段外標(biāo)號的地址值在連接時確定。
3. 局部標(biāo)號:
局部標(biāo)號主要在局部范圍內(nèi)使用而且局部標(biāo)號可以重復(fù)出現(xiàn)。它由兩部組成開頭是一個0-99直接的數(shù)字局部標(biāo)號 后面加“:”
F:指示編譯器只向前搜索,代碼行數(shù)增加的方向 / 代碼的下一句
B:指示編譯器只向后搜索,代碼行數(shù)減小的方向
注意局部標(biāo)號的跳轉(zhuǎn),就近原則「舉例:」
文件位置
arch/arm/kernel/entry-armv.S
-
ARM
+關(guān)注
關(guān)注
134文章
9008瀏覽量
366054 -
偽指令
+關(guān)注
關(guān)注
0文章
12瀏覽量
10491
發(fā)布評論請先 登錄
相關(guān)推薦
評論