ARM匯編程序基本知識(shí)
1.匯編程序的基本組成
本文引用地址:http://2s4d.com/article/201611/322725.htmARM匯編語(yǔ)言程序中,程序是以程序段為單位組織代碼的。段是相對(duì)獨(dú)立的指令或者代碼序列,擁有特定的名稱。段的種類有代碼段、數(shù)據(jù)段和通用段,代碼段的內(nèi)容為執(zhí)行代碼,數(shù)據(jù)段存放代碼運(yùn)行時(shí)需要用到的數(shù)據(jù),通用段不包含用戶代碼和數(shù)據(jù),所有通用段共用一個(gè)空間。段使用AREA偽操作來(lái)定義,并且說(shuō)明相關(guān)屬性,如
代碼段定義
數(shù)據(jù)段定義
等
一個(gè)匯編程序至少應(yīng)該有一個(gè)代碼段,可以有零或者多個(gè)數(shù)據(jù)段。在格式上,一個(gè)匯編程序需要至少有一個(gè)ENTRY(關(guān)于ENTRY具體內(nèi)容看偽操作符ENTRY),還需要在匯編源文件結(jié)束處,寫上END表示該源文件的結(jié)束。
如一個(gè)基本的匯編源程序
Start
當(dāng)匯編程序較長(zhǎng)時(shí),可以分割為多個(gè)代碼段和多個(gè)數(shù)據(jù)段,多個(gè)段在程序編譯鏈接時(shí),最終形成一個(gè)可執(zhí)行的映像文件。一個(gè)可執(zhí)行映像文件通常由以下幾部分組成
鏈接器根據(jù)系統(tǒng)默認(rèn)或者用戶設(shè)定的規(guī)則,將各段安排在存儲(chǔ)器中的相應(yīng)位置,因此源程序中段之間的相對(duì)位置與可執(zhí)行映像文件中的段的相對(duì)位置一般不會(huì)相同。
2.匯編語(yǔ)句應(yīng)該注意的地方
匯編語(yǔ)句格式
[LABEL] OPERATION, [OPERAND], [;COMMENT]
LABEL必須在一行的開(kāi)頭寫。
OPERATION包括指令、偽操作、宏指令或偽指令。每一條操作助記符必須全部大寫或者全部小寫。在寫操作助記符前,必須有空格。
OPERAND 表示操作的對(duì)象,可以使常量、變量、標(biāo)號(hào)、寄存器或者表達(dá)式,不同的對(duì)象之間必須用逗號(hào)分開(kāi)。
例子:
DATA
3.常用符號(hào)
匯編語(yǔ)言中,經(jīng)常使用各種符號(hào)表示變量、常量和地址。
變量的定義:使用偽操作GBLA、GBLL、GBLS,分別是定義全局的數(shù)值變量、邏輯變量和字符變量;LCLA、LCLL、LCLS定義局部的數(shù)值變量、邏輯變量和字符變量。相應(yīng)的變量使用SETA、SETL、SETS來(lái)進(jìn)行賦值。注意字符串長(zhǎng)度不應(yīng)超過(guò)512個(gè)字節(jié)。
例子:
DATA
常量是在運(yùn)行過(guò)程中不能改變的量。ARM支持?jǐn)?shù)值常量、邏輯常量和字符串常量。匯編中使用EQU來(lái)定義一個(gè)數(shù)值常量,如
Test EQU 10; 定義標(biāo)號(hào)Test的值為20.
Addr EQU 0x55,CODE32;
關(guān)于EQU的具體使用,看偽操作EQU。
數(shù)值常量一般為32為的整數(shù),可以使十進(jìn)制、十六進(jìn)制,也可以是n進(jìn)制(n=2~9)如8_247是一個(gè)八進(jìn)制數(shù)。
4.常見(jiàn)的偽操作符
符號(hào)定義偽操作
GBLA、GBLL、GBLS
LCLA、LCLL、LCLS
SETA、SETL、SETS
RLIST
其中RLIST用來(lái)定義通用寄存器列表名稱,使用該偽操作定義的名稱可以在ARM指令LDM/STM中使用。在LDM/STM中,訪問(wèn)列表中的寄存器次序?yàn)榧拇嫫骶幪?hào)由低到高的順序。如
RegList RLIST {r0-r5,r8,r10}; 將寄存器列表名稱定義為RegList
在程序中使用
STMFD SP!, RegList ;存儲(chǔ)列表到堆棧
LDMIA R5, RegList ; 加載列表
數(shù)據(jù)定義偽操作
DCB 分配一片連續(xù)的字節(jié)存儲(chǔ)單元并初始化
DCW(DCWU) 分配一片連續(xù)的半字存儲(chǔ)單元并初始化
DCD(DCDU) 分配一片連續(xù)的字存儲(chǔ)單元并初始化
DCDO、DCI、DCQ(DCQU)
DCFS(DCFSU) 為單精度浮點(diǎn)數(shù)分配一片連續(xù)的字存儲(chǔ)單元并初始化
DCFD(DCFDU) 為雙精度浮點(diǎn)數(shù)分配一片連續(xù)的字存儲(chǔ)單元并初始化
SPACE 分配一片連續(xù)的存儲(chǔ)單元
FIELD、MAP、LTORG
評(píng)論