宏是一段獨立的程序代碼,它是通過偽指令定義的,在程序中使用宏指令即可調(diào)用宏。當(dāng)程序被匯編時,匯編程序?qū)γ總€調(diào)用進(jìn)行展開,用宏定義取代源程序中的宏指令。 MACRO、MEND MACRO 其中, $ label在宏指令被展開時,label會被替換成相應(yīng)的符號,通常是一個標(biāo)號。在一個符號前使用$表示程序被匯編時將使用相應(yīng)的值來替代$后的符號。 macroname為所定義的宏的名稱。 $parameter為宏指令的參數(shù)。當(dāng)宏指令被展開時將被替換成相應(yīng)的值,類似于函數(shù)中的形式參數(shù),可以在宏定義時為參數(shù)指定相應(yīng)的默認(rèn)值。 宏定義中的$label是一個可選參數(shù)。當(dāng)宏定義體中用到多個標(biāo)號時,可以使用類似$label.$internallabel的標(biāo)號命名規(guī)則使程序易讀。 使用示例: MACRO $HandlerLabel HANDLER $HandleLabel ;宏的名稱為HANDLER,有1個參數(shù)$HandleLabel $HandlerLabel sub sp,sp,#4 ;decrement sp(to store jump address) stmfd sp!,{r0} ;PUSH the work register to stack(lr does not push because it return to original address) ldr ldr str ldmfd MEND ;在程序中調(diào)用該宏 HandlerFIQ HandlerIRQ HandlerUndef HandlerSWI HandlerDabort HandlerPabort 也許我們會問想格式中的[$ label]到底有什么作用? 例子: 宏的定義體: $PM $PM $PM.LOOP 在程序段中的使用:(使用兩次) ... AA ... BB ... 此時調(diào)用多次,編譯器就不會出現(xiàn)問題,例子中的AA和BB僅僅是一個標(biāo)號,用戶可以自行書寫,因為在宏指令唄展開時,這個符號在匯編時將使用相應(yīng)的值替代 0x00000FF0是一個參數(shù) 在此處是一個立即數(shù),用戶可自行使用為變量 |
|
來自: noreen_yue > 《ARM》