前言
c語言的函式呼叫內容主要有函式中的形參,函式的返回值,函式中呼叫之前的工作,函式呼叫之後的工作,函式引數的傳遞。
第一分鐘:函式的形參
形式引數是在函式定義中使用的引數叫形式引數,形式引數可以沒有,可以是指標,可以是結構體,可以是數值, 可以是聯合體等。
例如整數形參arg
void func (int arg) {}
形參是整形指標
void func (int *parg) {}
形參是結構體指標
typedef structstructname;
void func (structname *parg) {}
形參是空型別
void func (void){}
形參是聯合體指標
typedef enumenumename ;
void func (enumename *parg) {}
形參的個數就是實行引數的數量,每乙個形參之間用逗號隔開,如下
void func (int arg1, int arg2) {}
可變形參是在c99中的擴充套件的,用...表示其他的引數,但是需要在函式前包含標頭檔案,這個檔案中包含了va_list.
void func (int arg, ...)
返回值為int 型的函式
int func (void) {
int arg = 0;
return arg ;
返回值為指標型別的函式
int* func (void) {
int *parg = null;
return parg ;
第三分鐘:函式的呼叫之前
在函式呼叫之後,以ms-51為例講解該過程。
函式沒有引數的
沒有引數的函式呼叫就只用乙個lcall指令跳轉到函式的位址0b01h
2.函式有引數的
在keil中使用兩個暫存器來儲存函式指標,具體的型別和引數怎麼分配暫存器如下圖所示。第乙個函式指標:led_long_update用r6 r7傳遞;最右邊的1使用位定址區來儲存;第三個引數2000 使用r3 r2傳遞;第4個引數0使用r5和r4傳遞。
把暫存器的放在棧中,當r7-r4都使用了,其他的引數採用間接定址,如紅框中框起來的那樣傳遞引數。
執行上面函式前
傳遞引數後
第四分鐘:函式呼叫之後
在函式呼叫之後,以ms-51為例講解該過程。
函式沒有返回值
函式有返回值
函式返回值傳遞見下表 ,演示的這個函式返回值乙個位元組,使用r7來返回
第五分鐘:中斷函式引數的傳遞
中斷函式呼叫的時,有保護現場,即儲存acc 、b 、dptr 和 r0-r7使用的那組暫存器和psw(程式狀態機暫存器),把這些通過push儲存在棧中。
中斷退出的時,恢復現場,依次恢復之前壓棧的,出棧和入棧的順序相反,filo(先進後出),如下圖所示。
5分鐘讓你知道什麼是PKI
public key infrastructure pki 中文叫做公開金鑰基礎設施,也就是利用公開金鑰機制建立起來的基礎設施。但是如果這麼解釋起來,到底是個什麼東西,大家想必是沒辦法理解的。現在大家的很多重要活動都是通過網路進行的,那麼與之俱來的安全問題就顯得非常重要。同時很多安全保障機制都是基於...
5分鐘讓你的牙齒blingbling讓牙齒
很多人認為,多刷幾次牙,多嚼幾顆口香糖就可以解決。no!單靠刷牙並不能徹底清潔口腔,特別是牙齒。好吧,下面將介紹幾種方法,讓你的牙齒迅速潔淨,並且是徹底性的。方法一材料 士多啤梨一顆,發酵粉1 2茶匙。使用方法 將士多啤梨碾成糊狀,與發酵粉充分混合,用乙個柔軟的牙刷將混合物均勻塗在牙齒表面,5分鐘後...
互動教程,讓你5分鐘掌握 Flexbox 布局模式
flexbox 布局模組目前是 w3c 候選標準,旨在提供乙個更有效的方式進行布局,對齊和為容器裡的專案分配空間,即使它們的大小是未知的或者動態的。這裡分享乙個基於 knockout.js 構建的互動教程,讓你5分鐘就掌握 flexbox 布局模式。真是好東西!13種非常動感的頁面載入動畫效果 你見...