ARM位操作和偽指令介紹
ARM偽操作:
GET,通常用于包含定義常量的源文件,如用EQU定義的外設(shè)地址,類似于C語(yǔ)言中用include好含頭文件。(匯編語(yǔ)言中被包含的文件常以.inc結(jié)尾)GET 2440addr.inc
AREA、ENTRY和END
AREA操作常用于定義一個(gè)段。通常一個(gè)ARM源程序至少需要一個(gè)代碼段。
ENTRY用于指定程序的入口點(diǎn)。
END用于告訴匯編編譯器源文件已經(jīng)結(jié)束。
EXPORT和IMPORT
EXPORT 偽操作用于聲明外部標(biāo)號(hào),即當(dāng)前標(biāo)號(hào)是本源文件中定義的,在其他文件中可能會(huì)被引用。
IMPORT 偽操作用于告訴編譯器當(dāng)前的符號(hào)不是本源文件中定義的,而是在其他源文件中定義的,在本源文件中可能引用該符號(hào)。
EQU用于定義常量。提醒,在每條ARM指令前必須有空格,但是用EQU定義常量時(shí),必須頂格寫(xiě),否則編譯器會(huì)報(bào)錯(cuò)。
LTORG用于聲明一個(gè)文字池,所謂文字池就是一個(gè)數(shù)據(jù)緩沖區(qū)。
ALIGN偽操作通過(guò)調(diào)整地址指針使當(dāng)前位置滿足一定的對(duì)齊方式。在ARM代碼中要求地址符號(hào)是字對(duì)齊的。
MACRO和MEND 偽操作用于宏定義。
MACRO表示宏定義的開(kāi)始,MEND表示宏定義的結(jié)束。用MACRO和MEND定義的一段代碼,稱為宏體。這樣,在程序中就可以通過(guò)宏指令多次調(diào)用該代碼段。
MACRO
{$label}MACRO Name {$parameter}{$parameter}……
;這里添加自己的代碼
MEND
MAP和FIELD
MAP用于定義內(nèi)存表的首地址,其中MAP也可以用^表示。FIELD用于定義一個(gè)內(nèi)存表中的數(shù)據(jù)域,其中FIELD可以用#表示。MAP和FIELD組合類似于C語(yǔ)言中定義一個(gè)數(shù)組,MAP指向數(shù)組的首地址,F(xiàn)IELD用于分配數(shù)組中的各個(gè)元素。
#define pISR_SWI (*(unsigned*)(_ISR_STARTADDRESS+0x8))
強(qiáng)制轉(zhuǎn)換后,可以對(duì)pISR_SWI進(jìn)行賦值,調(diào)用。
_ISR_STARTADDRESS EQU 0x33FFFF00
^ _ISR_STARTADDRESS
HandleReset # 4
HandleUndef # 4
HandleSWI # 4
HandlePabort # 4
HandleDabort # 4
ARM偽指令:ADRL;LDR;DCD SPACE
評(píng)論