在MDK中編寫程序時C代碼不能滿足我們的需求,需要用到匯編,因此MDK支持C代碼中嵌入匯編的功能。
MDK支持兩種嵌入匯編的方法:內聯嵌入和匯編函數。這兩種嵌入匯編的方法均需要用到關鍵字__asm。
內聯嵌入方法:
void name(void) { __asm{ ;所嵌入的匯編代碼 } }
這種嵌入方法支持直接訪問C代碼中的變量,同時編譯器會對此進行相應的優化。
該方法不能直接訪問CPU內部寄存器。
匯編函數方法:
__asm void name(void){ ;所嵌入的匯編代碼 }
這種嵌入方法不能直接訪問C代碼中的變量,並且函數的返回需自行實現,不過編譯器不會對所寫匯編代碼進行優化。
該方法可訪問CPU內部寄存器,可通過操作寄存器讀取傳入參數,輸出返回值。
示例:
內聯嵌入
unsigned long func_add(unsigned long a,unsigned long b) { unsigned long c; __asm{ add c,a,b } return c; }
匯編函數
__asm unsigned long func_add(unsigned long a,unsigned long b) { add r0,r0,r1 bx lr }