以ADS編譯器下匯編語言程序設(shè)計(jì)的格式為例,來介紹ARM匯編語言程序的基本格式,并詳細(xì)描述了ARM匯編語言的幾個(gè)重點(diǎn)。
ARM匯編語言是以段為單位來組織源文件的。段是相當(dāng)獨(dú)立、具有特定名稱、不可分割的指令或數(shù)據(jù)序列。段又可分為代碼段和數(shù)據(jù)段:代碼段存放執(zhí)行代碼;數(shù)據(jù)段存放代碼運(yùn)行時(shí)需要用的數(shù)據(jù)。一個(gè)ARM源程序至少需要一個(gè)代碼段,大的程序可包含多個(gè)代碼段和數(shù)據(jù)段。
ARM匯編語言源程序經(jīng)過匯編處理后生成一個(gè)可執(zhí)行的映像文件,它通常包括3部分:
一個(gè)或多個(gè)代碼段。代碼段通常是只讀的。
0或多個(gè)包含初始值的數(shù)據(jù)段。這些數(shù)據(jù)段通常是可讀/寫的。
0或多個(gè)不包含初始值的數(shù)據(jù)段。這些數(shù)據(jù)段被初始化為0,通常是可讀/寫的。
鏈接器根據(jù)一定的規(guī)則將各個(gè)段安排到內(nèi)存中的相應(yīng)位置。源程序中段之間的相鄰關(guān)系與執(zhí)行的映像文件中段之間的相鄰關(guān)系并不一定相同。
下面通過一個(gè)簡單的例子,說明ARM匯編語言源程序的基本結(jié)構(gòu)。
AREA EXAMPLE,CODE,READONLY
ENTRY
Start
MOV R0,#10
MOV R1,#3
MOV R0,R0,R1
END
在ARM匯編語言源程序中,使用偽操作AREA定義一個(gè)段。AREA偽操作表示了一個(gè)段的開始,同時(shí)定義了這個(gè)段的名稱及相關(guān)屬性。在本例中定義了一個(gè)只讀的代碼段,其名稱為EXAMPLE。
ENTRY偽操作標(biāo)識(shí)了程序執(zhí)行的第一條指令,即程序的入口點(diǎn)。一個(gè)ARM程序中可以有多個(gè)ENTRY,至少要有一個(gè)ENTRY。初始化部分的代碼及異常中斷處理程序中都包含了ENTRY。如果程序包含了C代碼,則C語言庫文件的初始化部分也包含了ENTRY.
END偽操作告訴匯編編譯器源文件的結(jié)束。每一個(gè)匯編模塊必須包含一個(gè)END偽操作,只是本模塊的結(jié)束。
本程序的程序體部分實(shí)現(xiàn)了一個(gè)簡單的加法運(yùn)算。