
ARM芯片是目前最為成功的控制半導體產品之一。很多經典芯片產品都采用了ARM作為核心,ARM的匯編程序由ARM指令、偽指令、偽操作、宏指令組成。分類如此之多,對于剛剛接觸ARM的朋友來說似乎非常容易產生混淆。在本文當中,小編將為大家介紹ARM位操作與偽指令,感興趣的朋友快來看一看吧。
ARM偽操作
GET,通常用于包含定義常量的源文件,如用EQU定義的外設地址,類似于C語言中用include好含頭文件。(匯編語言中被包含的文件常以.inc結尾)GET2440addr.inc
AREA、ENTRY和END
AREA操作常用于定義一個段。通常一個ARM源程序至少需要一個代碼段。
ENTRY用于指定程序的入口點。
END用于告訴匯編編譯器源文件已經結束。
EXPORT和IMPORT
EXPORT偽操作用于聲明外部標號,即當前標號是本源文件中定義的,在其他文件中可能會被引用。
IMPORT偽操作用于告訴編譯器當前的符號不是本源文件中定義的,而是在其他源文件中定義的,在本源文件中可能引用該符號。
EQU用于定義常量。提醒,在每條ARM指令前必須有空格,但是用EQU定義常量時,必須頂格寫,否則編譯器會報錯。
LTORG用于聲明一個文字池,所謂文字池就是一個數據緩沖區。
ALIGN偽操作通過調整地址指針使當前位置滿足一定的對齊方式。在ARM代碼中要求地址符號是字對齊的。
MACRO和MEND偽操作用于宏定義。
MACRO表示宏定義的開始,MEND表示宏定義的結束。用MACRO和MEND定義的一段代碼,稱為宏體。這樣,在程序中就可以通過宏指令多次調用該代碼段。
MACRO
{$label}MACROName{$parameter}{$parameter}……;這里添加自己的代碼
MEND
MAP和FIELD
MAP用于定義內存表的首地址,其中MAP也可以用^表示。FIELD用于定義一個內存表中的數據域,其中FIELD可以用#表示。MAP和FIELD組合類似于C語言中定義一個數組,MAP指向數組的首地址,FIELD用于分配數組中的各個元素。
#definepISR_SWI(*(unsigned*)(_ISR_STARTADDRESS+0x8))
強制轉換后,可以對pISR_SWI進行賦值,調用。
_ISR_STARTADDRESSEQU0x33FFFF00
^_ISR_STARTADDRESS
HandleReset#4
HandleUndef#4
HandleSWI#4
HandlePabort#4
HandleDabort#4
ARM偽指令:ADRL;LDR;DCDSPACE
通過以上的介紹,相信大家對于ARM芯片中各類ARM匯編程序指令已經有了一定程度的了解。ARM偽操作通常用于包含定義常量的源文件,而AREA操作則常用于定義一個段,每一種匯編方式都有自己獨特的應用場合,大家可以將本文進行收藏,在需要復習的時候作為參考資料。
聲明:本內容為作者獨立觀點,不代表電源網。本網站原創內容,如需轉載,請注明出處;本網站轉載的內容(文章、圖片、視頻)等資料版權歸原作者所有。如我們采用了您不宜公開的文章或圖片,未能及時和您確認,避免給雙方造成不必要的經濟損失,請電郵聯系我們,以便迅速采取適當處理措施;歡迎投稿,郵箱∶editor@netbroad.com。
微信關注 | ||
![]() |
技術專題 | 更多>> | |
![]() |
技術專題之EMC |
![]() |
技術專題之PCB |