匯編語言的程序結(jié)構(gòu)
在ARM(Thumb)匯編語言程序中,以程序段為單位組織代碼。段是相對獨(dú)立的指令或數(shù)據(jù)序列,具有特定的名稱。段可以分為代碼段和數(shù)據(jù)段,代碼段的內(nèi)容為執(zhí)行代碼,數(shù)據(jù)段存放代碼運(yùn)行時(shí)需要用到的數(shù)據(jù)。一個匯編程序至少應(yīng)該有一個代碼段,當(dāng)程序較長時(shí),可以分割為多個代碼段和數(shù)據(jù)段,多個段在程序編譯鏈接時(shí)最終形成一個可執(zhí)行的映像文件。
可執(zhí)行映像文件通常由以下幾部分構(gòu)成。
·一個或多個代碼段,代碼段的屬性為只讀。
·零個或多個包含初始化數(shù)據(jù)的數(shù)據(jù)段,數(shù)據(jù)段的屬性為可讀寫。
·零個或多個不包含初始化數(shù)據(jù)的數(shù)據(jù)段,數(shù)據(jù)段的屬性為可讀寫。
鏈接器根據(jù)系統(tǒng)默認(rèn)或用戶設(shè)定的規(guī)則,將各個段安排在存儲器中的相應(yīng)位置。因此源程序中段之間的相對位置與可執(zhí)行的映像文件中段的相對位置一般不會相同。
以下是一個匯編語言源程序的基本結(jié)構(gòu)。
在匯編語言程序中,用AREA偽指令定義一個段,并說明所定義段的相關(guān)屬性,本例定義一個名為Init的代碼段,屬性為只讀。ENTRY偽指令標(biāo)識程序的入口點(diǎn),接下來為指令序列,程序的末尾為END偽指令,該偽指令告訴編譯器源文件結(jié)束。每一個匯編程序段都必須有一條END偽指令,指示代碼段結(jié)束。
來源:ks990次