Keil 中關(guān)于C語言編譯生成匯編代碼函數(shù)名規(guī)則
在keil 中 C語言的函數(shù)有帶參數(shù)和不帶參數(shù)之分。
一般的資料里說fun(void)類型的函數(shù)不帶參數(shù),所以,keil編譯器生成的匯編的調(diào)用地址(函數(shù)名) 為fun。這沒有錯。事實上,不管C語言的函數(shù)是否帶參數(shù),只要函數(shù)在調(diào)用過程中不用寄存器傳遞參數(shù),生成的匯調(diào)用址(函數(shù)名)都是原來的函數(shù)名。 比如:
#pragma noregparms
void fun(unsigned int a,unsigned char b)
{
unsigned c;
c = a + b;
return c;
}
main()
{
unsigned x,y;
x = 0xaabb;
y = 0x b1b2;
x = fun(x,y)
}
此文件生成的匯編代碼中,fun函數(shù)對應(yīng)的匯編函數(shù)名還fun。 如果將#pragma noregparms 注釋掉,則函數(shù)在調(diào)用時會用到寄存器傳遞參數(shù),這時,對應(yīng)的函數(shù)名會被keil生成為_fun。