2009年9月29日 星期二

ARM assembly 範例 and 解說

   AREA ARMex, CODE, READONLY ;Name this block of code ARMex
   ENTRY ;Mark first instruction to execute
start
   MOV r0, #10 ; Set up parameters
   MOV r1, #3
   ADD r0, r0, r1 ; r0 = r0 + r1
stop
   MOV r0, #0x18 ; angel_SWIreason_ReportException
   LDR r1, =0x20026 ; ADP_Stopped_ApplicationExit
   SVC #0x123456 ; ARM semihosting (formerly SWI)
END ; Mark end of file

我們可以發現第一行就指定了這個section的名子,叫做ARMex。第一個AREA的意思是表示一個section
的開始,除了明子以外,還會設定這個section的屬性。名子基本上可以隨便取,可是如果不是英文字母開頭的話,就要用兩個bar把它包起來,好比說|1_DataArea|。不然的話會有AREA name missing的錯誤。


ENTRY跟AREA一樣,都是directive,顧名思義是說明一個section的開始,後面的END相對應的就是說明一個section的結束。

start和stop都是function的label。

如果是在C code裡面的話
就是 #pragma arm section [code、rwdata、rodata、zidata] = "label"

沒有留言: